Added and rewrote tests

This commit is contained in:
Marvin Scham
2023-06-28 04:31:26 +02:00
parent f32b7fc1c7
commit 44c9e0d9e4
19 changed files with 1145 additions and 18 deletions

View File

@@ -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());
}
}