Added utility structures + tests
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package de.rwu.easydrop.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ProductCatalogueTest {
|
||||
private ProductCatalogue productCatalogue;
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
productCatalogue = new ProductCatalogue("GPU", "Graphics Processing Units");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAddProduct() {
|
||||
Product product = new Product();
|
||||
product.setProductId("12345");
|
||||
product.setMerchant("AmazonSeller");
|
||||
product.setDataOrigin("Amazon");
|
||||
productCatalogue.addProduct(product);
|
||||
|
||||
List<Product> products = productCatalogue.getProducts();
|
||||
Assertions.assertEquals(1, products.size());
|
||||
Assertions.assertEquals(product, products.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRemoveProduct() {
|
||||
Product product1 = new Product();
|
||||
product1.setProductId("12345");
|
||||
product1.setMerchant("AmazonSeller");
|
||||
product1.setDataOrigin("Amazon");
|
||||
productCatalogue.addProduct(product1);
|
||||
|
||||
Product product2 = new Product();
|
||||
product2.setProductId("54321");
|
||||
product2.setMerchant("eBaySeller");
|
||||
product2.setDataOrigin("eBay");
|
||||
productCatalogue.addProduct(product2);
|
||||
|
||||
productCatalogue.removeProduct(product1);
|
||||
|
||||
List<Product> products = productCatalogue.getProducts();
|
||||
Assertions.assertEquals(1, products.size());
|
||||
Assertions.assertEquals(product2, products.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testClearProducts() {
|
||||
Product product1 = new Product();
|
||||
product1.setProductId("12345");
|
||||
product1.setMerchant("AmazonSeller");
|
||||
product1.setDataOrigin("Amazon");
|
||||
productCatalogue.addProduct(product1);
|
||||
|
||||
Product product2 = new Product();
|
||||
product2.setProductId("54321");
|
||||
product2.setMerchant("eBay");
|
||||
product2.setDataOrigin("eBay");
|
||||
productCatalogue.addProduct(product2);
|
||||
|
||||
productCatalogue.clearProducts();
|
||||
|
||||
List<Product> products = productCatalogue.getProducts();
|
||||
Assertions.assertTrue(products.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testToString() {
|
||||
Product product1 = new Product();
|
||||
product1.setProductId("12345");
|
||||
product1.setMerchant("AmazonSeller");
|
||||
product1.setDataOrigin("Amazon");
|
||||
productCatalogue.addProduct(product1);
|
||||
|
||||
Product product2 = new Product();
|
||||
product2.setProductId("54321");
|
||||
product2.setMerchant("eBaySeller");
|
||||
product2.setDataOrigin("eBay");
|
||||
productCatalogue.addProduct(product2);
|
||||
|
||||
String expectedString = "Product Catalogue: GPU\n" +
|
||||
"Description: Graphics Processing Units\n" +
|
||||
"Products:\n" +
|
||||
"Product: [12345 from AmazonSeller (Amazon) at 0,00 € (available: no)]\n" +
|
||||
"Product: [54321 from eBaySeller (eBay) at 0,00 € (available: no)]\n";
|
||||
|
||||
Assertions.assertEquals(expectedString, productCatalogue.toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package de.rwu.easydrop.service.retriever;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import de.rwu.easydrop.model.Product;
|
||||
import de.rwu.easydrop.model.ProductCatalogue;
|
||||
import de.rwu.easydrop.util.ProductsConfig;
|
||||
|
||||
class CatalogueRetrieverTest {
|
||||
private ProductsConfig productsConfig;
|
||||
private ProductRetriever productRetriever;
|
||||
private CatalogueRetriever catalogueRetriever;
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
productsConfig = mock(ProductsConfig.class);
|
||||
productRetriever = mock(ProductRetriever.class);
|
||||
catalogueRetriever = new CatalogueRetriever(productsConfig, productRetriever);
|
||||
}
|
||||
|
||||
@Test
|
||||
void loadCatalogues_ValidConfig_CataloguesLoaded() throws ConfigurationException {
|
||||
// Arrange
|
||||
List<ProductCatalogue> productCatalogues = new ArrayList<>();
|
||||
|
||||
// Create a sample product catalogue with two products
|
||||
ProductCatalogue productCatalogue = new ProductCatalogue("Catalogue 1", "Sample catalogue");
|
||||
Product product1 = new Product();
|
||||
product1.setDataOrigin("Amazon");
|
||||
product1.setProductId("ASIN1");
|
||||
productCatalogue.addProduct(product1);
|
||||
Product product2 = new Product();
|
||||
product2.setDataOrigin("eBay");
|
||||
product2.setProductId("ProductID2");
|
||||
productCatalogue.addProduct(product2);
|
||||
|
||||
productCatalogues.add(productCatalogue);
|
||||
|
||||
// Mock the methods
|
||||
when(productsConfig.getProductCatalogues()).thenReturn(productCatalogues);
|
||||
when(productRetriever.getProductFromAmazon("ASIN1")).thenReturn(product1);
|
||||
when(productRetriever.getProductFromEbay("ProductID2")).thenReturn(product2);
|
||||
|
||||
// Act
|
||||
catalogueRetriever.loadCatalogues();
|
||||
|
||||
// Assert
|
||||
List<ProductCatalogue> loadedCatalogues = catalogueRetriever.getProductCatalogues();
|
||||
assertEquals(1, loadedCatalogues.size());
|
||||
|
||||
ProductCatalogue loadedCatalogue = loadedCatalogues.get(0);
|
||||
assertEquals("Catalogue 1", loadedCatalogue.getProductName());
|
||||
assertEquals("Sample catalogue", loadedCatalogue.getDescription());
|
||||
List<Product> loadedProducts = loadedCatalogue.getProducts();
|
||||
assertEquals(2, loadedProducts.size());
|
||||
assertEquals(product1, loadedProducts.get(0));
|
||||
assertEquals(product2, loadedProducts.get(1));
|
||||
|
||||
// Verify the method invocations
|
||||
verify(productsConfig).loadConfig();
|
||||
verify(productRetriever).getProductFromAmazon("ASIN1");
|
||||
verify(productRetriever).getProductFromEbay("ProductID2");
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
class ConfigImplTest {
|
||||
private Config config;
|
||||
private final static String TESTDATA_PATH = "src/test/resources/testdata.properties";
|
||||
private final static String TESTDATA_PATH = "src/test/resources/test.config.properties";
|
||||
private final static String TESTDATA_KEY = "API_KEY";
|
||||
private final static String TESTDATA_VAL = "keyIsHere";
|
||||
|
||||
@@ -77,7 +77,7 @@ class ConfigImplTest {
|
||||
@Test
|
||||
void testLoadConfigSuccessfully() {
|
||||
try {
|
||||
config.setConfigLocation("src/test/resources/testdata.properties");
|
||||
config.setConfigLocation("src/test/resources/test.config.properties");
|
||||
config.loadConfig();
|
||||
assertEquals(TESTDATA_VAL, config.getProperty(TESTDATA_KEY));
|
||||
} catch (ConfigurationException e) {
|
||||
@@ -98,7 +98,7 @@ class ConfigImplTest {
|
||||
|
||||
@Test
|
||||
void testReset() throws ConfigurationException {
|
||||
config.setConfigLocation("src/test/resources/testdata.properties");
|
||||
config.setConfigLocation("src/test/resources/test.config.properties");
|
||||
config.loadConfig();
|
||||
|
||||
assertNotNull(config.getProperty(TESTDATA_KEY));
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
package de.rwu.easydrop.util;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ProductsConfigImplTest {
|
||||
private ProductsConfig config;
|
||||
private final static String TESTDATA_PATH = "src/test/resources/test.products-config.json";
|
||||
private final static String TESTDATA_EMPTY_PATH = "src/test/resources/test.empty.products-config.json";
|
||||
private final static String TESTDATA_MALFORMED_PATH = "src/test/resources/test.malformed.products-config.json";
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
config = ProductsConfig.getInstance();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLoadConfigSuccessfully() {
|
||||
try {
|
||||
config.setConfigLocation(TESTDATA_PATH);
|
||||
config.loadConfig();
|
||||
String value = config.getProductCatalogues().get(0).getProductName();
|
||||
|
||||
assertEquals("Demo Product", value);
|
||||
} catch (ConfigurationException e) {
|
||||
fail("ConfigurationException should not be thrown");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLoadConfigMissingFile() {
|
||||
config.setConfigLocation("path/that/doesnt/exist/products-config.json");
|
||||
|
||||
ConfigurationException exception = assertThrows(ConfigurationException.class, () -> {
|
||||
config.loadConfig();
|
||||
});
|
||||
|
||||
assertEquals("Couldn't load required products config file", exception.getMessage());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLoadConfigEmptyFile() {
|
||||
config.setConfigLocation(TESTDATA_EMPTY_PATH);
|
||||
|
||||
ConfigurationException exception = assertThrows(ConfigurationException.class, () -> {
|
||||
config.loadConfig();
|
||||
});
|
||||
|
||||
assertEquals("Products config is empty or malformed", exception.getMessage());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLoadConfigMalformedFile() {
|
||||
config.setConfigLocation(TESTDATA_MALFORMED_PATH);
|
||||
|
||||
ConfigurationException exception = assertThrows(ConfigurationException.class, () -> {
|
||||
config.loadConfig();
|
||||
});
|
||||
|
||||
assertEquals("Products config is empty or malformed", exception.getMessage());
|
||||
}
|
||||
}
|
||||
44
src/test/java/de/rwu/easydrop/util/ProductsConfigTest.java
Normal file
44
src/test/java/de/rwu/easydrop/util/ProductsConfigTest.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package de.rwu.easydrop.util;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
class ProductsConfigTest {
|
||||
private ProductsConfig productsConfig;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws ConfigurationException {
|
||||
MockitoAnnotations.openMocks(this);
|
||||
productsConfig = spy(ProductsConfig.getInstance());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetInstance() {
|
||||
ProductsConfig newConfig = ProductsConfig.getInstance();
|
||||
assertNotNull(newConfig);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetInstanceEquality() {
|
||||
// Create "two" instances to check validity of Singleton pattern
|
||||
ProductsConfig instance1 = ProductsConfig.getInstance();
|
||||
ProductsConfig instance2 = ProductsConfig.getInstance();
|
||||
|
||||
assertSame(instance1, instance2, "Instances should be equal");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSetConfigLocation() {
|
||||
String newPath = "new/location/config.properties";
|
||||
productsConfig.setConfigLocation(newPath);
|
||||
assertEquals(newPath, productsConfig.getConfigLocation());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user