Added and rewrote tests
This commit is contained in:
@@ -1,5 +1,176 @@
|
||||
package de.rwu.easydrop.service.processing;
|
||||
|
||||
public class OfferIdentifierTest {
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import de.rwu.easydrop.exception.InvalidCatalogueException;
|
||||
import de.rwu.easydrop.exception.InvalidOfferException;
|
||||
import de.rwu.easydrop.model.Offer;
|
||||
import de.rwu.easydrop.model.Product;
|
||||
import de.rwu.easydrop.model.ProductCatalogue;
|
||||
import de.rwu.easydrop.model.ProductPair;
|
||||
|
||||
class OfferIdentifierTest {
|
||||
|
||||
@Mock
|
||||
private ProductCatalogue mockProductCatalogue;
|
||||
|
||||
private OfferIdentifier offerIdentifier;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
MockitoAnnotations.openMocks(this);
|
||||
|
||||
offerIdentifier = new OfferIdentifier();
|
||||
}
|
||||
|
||||
@Test
|
||||
void runIdentifier_WithValidProductCatalogues_IdentifiesOffers() {
|
||||
// Arrange
|
||||
List<ProductCatalogue> productCatalogues = new ArrayList<>();
|
||||
ProductCatalogue productCatalogue1 = new ProductCatalogue("Catalogue1", "desc");
|
||||
ProductCatalogue productCatalogue2 = new ProductCatalogue("Catalogue2", "desc");
|
||||
|
||||
Product product1 = new Product();
|
||||
product1.setCurrentPrice(100.0);
|
||||
Product product2 = new Product();
|
||||
product2.setCurrentPrice(200.0);
|
||||
Product product3 = new Product();
|
||||
product3.setCurrentPrice(300.0);
|
||||
Product product4 = new Product();
|
||||
product4.setCurrentPrice(400.0);
|
||||
|
||||
productCatalogue1.addProduct(product1);
|
||||
productCatalogue1.addProduct(product2);
|
||||
productCatalogue2.addProduct(product3);
|
||||
productCatalogue2.addProduct(product4);
|
||||
|
||||
productCatalogues.add(productCatalogue1);
|
||||
productCatalogues.add(productCatalogue2);
|
||||
|
||||
// Act
|
||||
List<Offer> identifiedOffers = offerIdentifier.runIdentifier(productCatalogues);
|
||||
|
||||
// Assert
|
||||
assertEquals(2, identifiedOffers.size());
|
||||
assertNotNull(identifiedOffers.get(0).getSourceProduct());
|
||||
assertNotNull(identifiedOffers.get(0).getTargetProduct());
|
||||
assertNotNull(identifiedOffers.get(1).getSourceProduct());
|
||||
assertNotNull(identifiedOffers.get(1).getTargetProduct());
|
||||
}
|
||||
|
||||
@Test
|
||||
void runIdentifier_WithOneGoodOneBadCatalogue_BadOneIsntIncluded() {
|
||||
// Arrange
|
||||
List<ProductCatalogue> productCatalogues = new ArrayList<>();
|
||||
ProductCatalogue productCatalogue1 = new ProductCatalogue("Catalogue1", "desc");
|
||||
ProductCatalogue productCatalogue2 = new ProductCatalogue("Catalogue2", "desc");
|
||||
|
||||
Product product1 = new Product();
|
||||
product1.setCurrentPrice(100.0);
|
||||
Product product2 = new Product();
|
||||
product2.setCurrentPrice(200.0);
|
||||
Product product3 = new Product();
|
||||
product3.setCurrentPrice(300.0);
|
||||
Product product4 = new Product();
|
||||
product4.setCurrentPrice(300.0);
|
||||
|
||||
productCatalogue1.addProduct(product1);
|
||||
productCatalogue1.addProduct(product2);
|
||||
productCatalogue2.addProduct(product3);
|
||||
productCatalogue2.addProduct(product4);
|
||||
|
||||
productCatalogues.add(productCatalogue1);
|
||||
productCatalogues.add(productCatalogue2);
|
||||
|
||||
// Act
|
||||
List<Offer> identifiedOffers = offerIdentifier.runIdentifier(productCatalogues);
|
||||
|
||||
// Assert
|
||||
assertEquals(1, identifiedOffers.size()); // Only 1 passed
|
||||
}
|
||||
|
||||
@Test
|
||||
void getHighestMarginProducts_WithValidProductCatalogue_ReturnsProductPair() {
|
||||
// Arrange
|
||||
ProductCatalogue productCatalogue = new ProductCatalogue("TestCatalogue", "desc");
|
||||
Product product1 = new Product();
|
||||
product1.setCurrentPrice(100.0);
|
||||
Product product2 = new Product();
|
||||
product2.setCurrentPrice(200.0);
|
||||
productCatalogue.addProduct(product1);
|
||||
productCatalogue.addProduct(product2);
|
||||
|
||||
// Act
|
||||
ProductPair productPair = OfferIdentifier.getHighestMarginProducts(productCatalogue);
|
||||
|
||||
// Assert
|
||||
assertNotNull(productPair);
|
||||
assertNotNull(productPair.getProduct1());
|
||||
assertNotNull(productPair.getProduct2());
|
||||
assertNotEquals(productPair.getProduct1(), productPair.getProduct2());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getHighestMarginProducts_SecondProductCheaper() {
|
||||
// Arrange
|
||||
ProductCatalogue productCatalogue = new ProductCatalogue("TestCatalogue", "desc");
|
||||
Product product1 = new Product();
|
||||
product1.setCurrentPrice(200.0);
|
||||
Product product2 = new Product();
|
||||
product2.setCurrentPrice(100.0);
|
||||
productCatalogue.addProduct(product1);
|
||||
productCatalogue.addProduct(product2);
|
||||
|
||||
// Act
|
||||
ProductPair productPair = OfferIdentifier.getHighestMarginProducts(productCatalogue);
|
||||
|
||||
// Assert
|
||||
assertNotNull(productPair);
|
||||
assertNotNull(productPair.getProduct1());
|
||||
assertNotNull(productPair.getProduct2());
|
||||
assertNotEquals(productPair.getProduct1(), productPair.getProduct2());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getHighestMarginProducts_WithCatalogueSizeLessThan2_ThrowsInvalidCatalogueException() {
|
||||
// Arrange
|
||||
ProductCatalogue productCatalogue = new ProductCatalogue("SmallCatalogue", "desc");
|
||||
|
||||
// Act and Assert
|
||||
assertThrows(InvalidCatalogueException.class, () -> {
|
||||
OfferIdentifier.getHighestMarginProducts(productCatalogue);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void getHighestMarginProducts_WithZeroPriceMargin_ThrowsInvalidOfferException() {
|
||||
// Arrange
|
||||
ProductCatalogue productCatalogue = new ProductCatalogue("name", "desc");
|
||||
Product product1 = new Product();
|
||||
product1.setCurrentPrice(200.0);
|
||||
|
||||
Product product2 = new Product();
|
||||
product2.setCurrentPrice(200.0);
|
||||
|
||||
productCatalogue.getProducts().add(product1);
|
||||
productCatalogue.getProducts().add(product2);
|
||||
|
||||
// Act and Assert
|
||||
InvalidOfferException e = assertThrows(InvalidOfferException.class, () -> {
|
||||
OfferIdentifier.getHighestMarginProducts(productCatalogue);
|
||||
});
|
||||
|
||||
assertEquals("Price margin is zero!", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user