package de.rwu.easydrop.service.writer; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import de.rwu.easydrop.api.dto.TransactionDTO; import de.rwu.easydrop.data.connector.TransactionPersistenceInterface; import de.rwu.easydrop.exception.InvalidTransactionException; import de.rwu.easydrop.model.Transaction; import de.rwu.easydrop.service.mapping.TransactionMapper; class TransactionWriterTest { @Mock private TransactionPersistenceInterface persistence; private TransactionWriter writer; @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); writer = new TransactionWriter(persistence); } @Test void writeTXToPersistence_ValidTransaction_TransactionSaved() { // Arrange Transaction transaction = new Transaction(); transaction.setOfferId("123"); transaction.setVolume(123f); transaction.setEarnings(12.23); transaction.setTransactionTime("2020-01-01 00:00:00"); TransactionDTO expectedDTO = TransactionMapper.mapTXToDTO(transaction); // Act writer.writeTXToPersistence(transaction); // Assert verify(persistence).writeTX(expectedDTO); } @Test void writeTXToPersistence_InvalidTransaction_ValidationExceptionThrown() { // Arrange Transaction transaction = new Transaction(); transaction.setVolume(123f); transaction.setEarnings(12.23); transaction.setTransactionTime("2020-01-01 00:00:00"); // Act & Assert assertThrows(InvalidTransactionException.class, () -> writer.writeTXToPersistence(transaction)); // Verify that persistence.writeTX is not called verifyNoInteractions(persistence); } }