package de.rwu.easydrop.service.writer; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.junit.jupiter.api.Assertions.assertThrows; import javax.sound.sampled.AudioFileFormat.Type; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import de.rwu.easydrop.api.dto.OfferDTO; import de.rwu.easydrop.api.dto.ProductDTO; import de.rwu.easydrop.data.connector.OfferPersistenceInterface; import de.rwu.easydrop.model.Offer; import de.rwu.easydrop.model.Product; import de.rwu.easydrop.model.Webshop; public class OfferWriterTest { @Mock private OfferDTO offerDTO; @Mock private OfferPersistenceInterface persistence; private OfferWriter offerWriter; @BeforeEach public void setup() { MockitoAnnotations.openMocks(this); offerWriter = new OfferWriter(persistence); } @Test void writeOfferToPersistence_InvalidProduct_ThrowsException() { //Arrange Offer offer = new Offer(); offer.setOfferId(""); offer.setLastUpdate(""); //Act and Assert assertThrows(Exception.class, () -> offerWriter.writeOfferToPersistence(offer)); } @Test void writeOfferToPresistence_ValidProduct_CallsSaveProduct(){ // Arrange Product product = new Product(); product.setProductId("12345"); product.setDataOrigin(Webshop.AMAZON); product.setCurrentPrice(9.99); // Arrange Offer offer = new Offer(); offer.setOfferId("26876"); offer.setLastUpdate("2022-12-25"); offer.setSourceProduct(product); offer.setTargetProduct(product); // Act offerWriter.writeOfferToPersistence(offer); // Assert Mockito.verify(persistence).writeOffer(any(OfferDTO.class)); } }