Updated test cases

This commit is contained in:
Marvin Scham
2023-06-27 06:45:25 +02:00
parent 9927b8f959
commit f2993a19a8
27 changed files with 104 additions and 331 deletions

View File

@@ -44,7 +44,7 @@ class AbstractDataWriterTest {
@Override
protected Webshop getDataTarget() {
return Webshop.Amazon;
return Webshop.AMAZON;
}
@Override
@@ -57,7 +57,7 @@ class AbstractDataWriterTest {
@Test
void sendPutRequest_badResponseCode_throwsException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO(demoProductId, Webshop.Amazon);
ProductDTO dto = new ProductDTO(demoProductId, Webshop.AMAZON);
// Set up Mocks
AbstractDataWriter mockWriter = mock(AbstractDataWriter.class);
@@ -69,13 +69,13 @@ class AbstractDataWriterTest {
writer.sendPutRequest(dto, "Sales");
});
assertEquals("Amazon Sales API responded with error code 400", e.getMessage());
assertEquals("AMAZON Sales API responded with error code 400", e.getMessage());
}
@Test
void sendPutRequest_ioException_throwsException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO(demoProductId, Webshop.Amazon);
ProductDTO dto = new ProductDTO(demoProductId, Webshop.AMAZON);
// Set up Mocks
AbstractDataWriter mockWriter = mock(AbstractDataWriter.class);
@@ -86,13 +86,13 @@ class AbstractDataWriterTest {
writer.sendPutRequest(dto, "testApiType");
});
assertEquals("Couldn't fulfill Amazon API request", e.getMessage());
assertEquals("Couldn't fulfill AMAZON API request", e.getMessage());
}
@Test
void sendPutRequest_successfulRequest() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO(demoProductId, Webshop.Amazon);
ProductDTO dto = new ProductDTO(demoProductId, Webshop.AMAZON);
// Set up Mocks
AbstractDataWriter mockWriter = mock(AbstractDataWriter.class);
@@ -102,7 +102,7 @@ class AbstractDataWriterTest {
HttpURLConnection mockConnection = mock(HttpURLConnection.class);
when(mockURL.openConnection()).thenReturn(mockConnection);
when(mockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
when(mockWriter.getDataTarget()).thenReturn(Webshop.Amazon);
when(mockWriter.getDataTarget()).thenReturn(Webshop.AMAZON);
assertDoesNotThrow(() -> {
mockWriter.sendPutRequest(dto, "Purchase");

View File

@@ -21,7 +21,7 @@ class AbstractPurchaserTest {
@Test
void purchaseProduct_CorrectApiTypeInException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO("12345", Webshop.Amazon);
ProductDTO dto = new ProductDTO("12345", Webshop.AMAZON);
// Set up mocks
URL mockURL = mock(URL.class);
@@ -30,7 +30,7 @@ class AbstractPurchaserTest {
HttpURLConnection mockConnection = mock(HttpURLConnection.class);
when(mockURL.openConnection()).thenReturn(mockConnection);
when(mockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
when(mockPurchaser.getDataTarget()).thenReturn(Webshop.Amazon);
when(mockPurchaser.getDataTarget()).thenReturn(Webshop.AMAZON);
assertDoesNotThrow(() -> {
mockPurchaser.purchaseProduct(dto);

View File

@@ -21,7 +21,7 @@ class AbstractSellerTest {
@Test
void purchaseProduct_CorrectApiTypeInException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO("12345", Webshop.Amazon);
ProductDTO dto = new ProductDTO("12345", Webshop.AMAZON);
// Set up mocks
URL mockURL = mock(URL.class);
@@ -30,7 +30,7 @@ class AbstractSellerTest {
HttpURLConnection mockConnection = mock(HttpURLConnection.class);
when(mockURL.openConnection()).thenReturn(mockConnection);
when(mockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
when(mockSeller.getDataTarget()).thenReturn(Webshop.Amazon);
when(mockSeller.getDataTarget()).thenReturn(Webshop.AMAZON);
assertDoesNotThrow(() -> {
mockSeller.sellProduct(dto);

View File

@@ -29,7 +29,7 @@ class AmazonProductDataSourceTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static Webshop demoDataOrigin = Webshop.Amazon;
private static Webshop demoDataOrigin = Webshop.AMAZON;
private static String demoProductId = "whateverId";
@BeforeEach
@@ -139,7 +139,7 @@ class AmazonProductDataSourceTest {
// Verify the product DTO properties
assertEquals(demoProductId, result.getProductId());
assertEquals(Webshop.Amazon, result.getDataOrigin());
assertEquals(Webshop.AMAZON, result.getDataOrigin());
assertEquals(true, result.isAvailable());
assertEquals(10.0, result.getCurrentPrice());
assertEquals(2.5, result.getDeliveryPrice());
@@ -165,7 +165,7 @@ class AmazonProductDataSourceTest {
});
// Verify the exception message
assertEquals("Nothing found: Amazon API responded with error code 404", exception.getMessage());
assertEquals("Nothing found: AMAZON API responded with error code 404", exception.getMessage());
}
@Test
@@ -188,7 +188,7 @@ class AmazonProductDataSourceTest {
});
// Verify the exception message
assertEquals("Couldn't fulfill Amazon API request", exception.getMessage());
assertEquals("Couldn't fulfill AMAZON API request", exception.getMessage());
}
@Test

View File

@@ -18,7 +18,7 @@ class AmazonPurchaserTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static Webshop demoDataTarget = Webshop.Amazon;
private static Webshop demoDataTarget = Webshop.AMAZON;
@BeforeEach
void setup() {

View File

@@ -18,7 +18,7 @@ class AmazonSellerTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static Webshop demoDataTarget = Webshop.Amazon;
private static Webshop demoDataTarget = Webshop.AMAZON;
@BeforeEach
void setup() {

View File

@@ -1,8 +1,6 @@
package de.rwu.easydrop.api.client;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
import javax.naming.ConfigurationException;
@@ -11,10 +9,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sqlite.SQLiteDataSource;
import de.rwu.easydrop.data.connector.SQLiteConnector;
import de.rwu.easydrop.exception.PersistenceException;
import de.rwu.easydrop.util.Config;
class DataSourceFactoryTest {
@@ -50,20 +45,4 @@ class DataSourceFactoryTest {
// Assert
assertEquals("ebay-api-key", DataSource.getApiKey());
}
@Test
void createProductPersistenceDataSource_NullPersistence() {
PersistenceException exception = assertThrows(PersistenceException.class, () -> {
DataSourceFactory.createProductPersistenceDataSource();
});
assertEquals("Persistence is not set", exception.getMessage());
}
@Test
void createProductPersistenceDataSource_WorkingPersistence() {
DataSourceFactory.setPersistence(new SQLiteConnector(new SQLiteDataSource()));
assertDoesNotThrow(() -> DataSourceFactory.createProductPersistenceDataSource());
}
}

View File

@@ -26,7 +26,7 @@ class EbayItemDataSourceTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static Webshop demoDataOrigin = Webshop.eBay;
private static Webshop demoDataOrigin = Webshop.EBAY;
private static String demoQuery = "iPhone";
@BeforeEach
@@ -83,7 +83,7 @@ class EbayItemDataSourceTest {
ProductDTO result = demoDataSource.buildProductDTO(product, json);
assertEquals(Webshop.eBay, result.getDataOrigin());
assertEquals(Webshop.EBAY, result.getDataOrigin());
assertEquals(false, result.isAvailable()); // Default value for boolean
assertEquals(0.0, result.getCurrentPrice()); // Default value for double
assertEquals(0.0, result.getDeliveryPrice()); // Default value for double
@@ -121,6 +121,6 @@ class EbayItemDataSourceTest {
});
// Verify the exception message
assertEquals("Nothing found: eBay API responded with error code 404", exception.getMessage());
assertEquals("Nothing found: EBAY API responded with error code 404", exception.getMessage());
}
}

View File

@@ -18,7 +18,7 @@ class EbayPurchaserTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static Webshop demoDataTarget = Webshop.eBay;
private static Webshop demoDataTarget = Webshop.EBAY;
@BeforeEach
void setup() {

View File

@@ -18,7 +18,7 @@ class EbaySellerTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static Webshop demoDataTarget = Webshop.eBay;
private static Webshop demoDataTarget = Webshop.EBAY;
@BeforeEach
void setup() {

View File

@@ -14,7 +14,7 @@ class ProductDTOTest {
void constructor_SetsProductIdAndDataOrigin() {
// Arrange
String productId = "12345";
Webshop dataOrigin = Webshop.Amazon;
Webshop dataOrigin = Webshop.AMAZON;
// Act
ProductDTO productDTO = new ProductDTO(productId, dataOrigin);
@@ -27,19 +27,19 @@ class ProductDTOTest {
@Test
void gettersAndSetters_WorkAsExpected() {
// Arrange
ProductDTO productDTO = new ProductDTO("12345", Webshop.Amazon);
ProductDTO productDTO = new ProductDTO("12345", Webshop.AMAZON);
// Act and Assert
assertEquals("12345", productDTO.getProductId());
assertEquals(Webshop.Amazon, productDTO.getDataOrigin());
assertEquals(Webshop.AMAZON, productDTO.getDataOrigin());
// Modify fields
productDTO.setProductId("54321");
productDTO.setDataOrigin(Webshop.eBay);
productDTO.setDataOrigin(Webshop.EBAY);
// Assert
assertEquals("54321", productDTO.getProductId());
assertEquals(Webshop.eBay, productDTO.getDataOrigin());
assertEquals(Webshop.EBAY, productDTO.getDataOrigin());
}
@Test

View File

@@ -1,10 +0,0 @@
package de.rwu.easydrop.core;
import org.junit.jupiter.api.Test;
public class OfferIdentifierTest {
@Test
void testRunIdentifier() {
}
}

View File

@@ -1,10 +0,0 @@
package de.rwu.easydrop.core;
import org.junit.jupiter.api.Test;
public class OfferProvisionerTest {
@Test
void testRunProvisioner() {
}
}

View File

@@ -1,10 +0,0 @@
package de.rwu.easydrop.core;
import org.junit.jupiter.api.Test;
public class OfferReviewerTest {
@Test
void testRunReviewer() {
}
}

View File

@@ -1,10 +0,0 @@
package de.rwu.easydrop.core;
import org.junit.jupiter.api.Test;
public class OfferUpdaterTest {
@Test
void testRunUpdater() {
}
}

View File

@@ -11,11 +11,8 @@ import static org.mockito.Mockito.doThrow;
import java.sql.SQLException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sqlite.SQLiteDataSource;
@@ -24,30 +21,24 @@ import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.exception.PersistenceException;
import de.rwu.easydrop.model.Webshop;
@TestInstance(Lifecycle.PER_CLASS)
class SQLiteConnectorTest {
private static final String TEST_PRODUCT_ID = "12345";
private SQLiteConnector sqliteConnector;
private SQLiteConnector sqliteConnector = new SQLiteConnector(new SQLiteDataSource());
@Mock
private SQLiteDataSource mockDataSource;
@BeforeAll
public void setup() {
sqliteConnector = new SQLiteConnector(new SQLiteDataSource());
}
@BeforeEach
public void clearDatabase() {
public void prepare() {
MockitoAnnotations.openMocks(this);
}
@Test
void saveProduct_ValidProduct_SuccessfullySaved() {
void writeProduct_ValidProduct_SuccessfullySaved() {
// Arrange
sqliteConnector.clearData();
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.Amazon);
ProductDTO.setDataOrigin(Webshop.Amazon);
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.AMAZON);
ProductDTO.setDataOrigin(Webshop.AMAZON);
ProductDTO.setProductId(TEST_PRODUCT_ID);
ProductDTO.setCurrentPrice(9.99);
ProductDTO.setMerchant("Sample Merchant");
@@ -55,12 +46,12 @@ class SQLiteConnectorTest {
ProductDTO.setAvailable(true);
// Act
assertDoesNotThrow(() -> sqliteConnector.saveProduct(ProductDTO));
assertDoesNotThrow(() -> sqliteConnector.writeProduct(ProductDTO));
// Assert
ProductDTO savedProductDTO = sqliteConnector.getProductDTOById(TEST_PRODUCT_ID);
assertNotNull(savedProductDTO);
assertEquals(Webshop.Amazon, savedProductDTO.getDataOrigin());
assertEquals(Webshop.AMAZON, savedProductDTO.getDataOrigin());
assertEquals(TEST_PRODUCT_ID, savedProductDTO.getProductId());
assertEquals(9.99, savedProductDTO.getCurrentPrice());
assertEquals("Sample Merchant", savedProductDTO.getMerchant());
@@ -79,7 +70,7 @@ class SQLiteConnectorTest {
// Assert
assertNotNull(ProductDTO);
assertEquals(Webshop.Amazon, ProductDTO.getDataOrigin());
assertEquals(Webshop.AMAZON, ProductDTO.getDataOrigin());
assertEquals(TEST_PRODUCT_ID, ProductDTO.getProductId());
assertEquals(9.99, ProductDTO.getCurrentPrice());
assertEquals("Sample Merchant", ProductDTO.getMerchant());
@@ -112,14 +103,14 @@ class SQLiteConnectorTest {
}
@Test
void saveProduct_ThrowsPersistenceException_OnSQLException() throws SQLException {
void writeProduct_ThrowsPersistenceException_OnSQLException() throws SQLException {
// Arrange
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.Amazon);
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.AMAZON);
sqliteConnector.setDb(mockDataSource);
doThrow(SQLException.class).when(mockDataSource).getConnection();
// Act and Assert
assertThrows(PersistenceException.class, () -> sqliteConnector.saveProduct(ProductDTO));
assertThrows(PersistenceException.class, () -> sqliteConnector.writeProduct(ProductDTO));
}
@Test
@@ -144,41 +135,11 @@ class SQLiteConnectorTest {
}
private void insertSampleProduct() {
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.Amazon);
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.AMAZON);
ProductDTO.setCurrentPrice(9.99);
ProductDTO.setMerchant("Sample Merchant");
ProductDTO.setDeliveryPrice(2.50);
ProductDTO.setAvailable(true);
sqliteConnector.saveProduct(ProductDTO);
}
@Test
void getApiKey_UnsupportedOperationExceptionThrown() {
// Arrange
SQLiteConnector connector = new SQLiteConnector(new SQLiteDataSource());
// Act and Assert
assertThrows(UnsupportedOperationException.class, connector::getApiKey);
}
@Test
void buildProductDTO_UnsupportedOperationExceptionThrown() {
// Arrange
SQLiteConnector connector = new SQLiteConnector(new SQLiteDataSource());
ProductDTO product = new ProductDTO("ASIN123", Webshop.Amazon);
String json = "{\"productId\":\"ASIN123\",\"dataOrigin\":\"Amazon\"}";
// Act and Assert
assertThrows(UnsupportedOperationException.class, () -> connector.buildProductDTO(product, json));
}
@Test
void createApiUrl_UnsupportedOperationExceptionThrown() {
// Arrange
SQLiteConnector connector = new SQLiteConnector(new SQLiteDataSource());
String productIdentifier = "ASIN123";
// Act and Assert
assertThrows(UnsupportedOperationException.class, () -> connector.createApiUrl(productIdentifier));
sqliteConnector.writeProduct(ProductDTO);
}
}

View File

@@ -1,5 +1,7 @@
package de.rwu.easydrop.model;
import static org.mockito.Mockito.description;
import java.util.List;
import org.junit.jupiter.api.Assertions;
@@ -19,7 +21,7 @@ class ProductCatalogueTest {
Product product = new Product();
product.setProductId("12345");
product.setMerchant("AmazonSeller");
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
productCatalogue.addProduct(product);
List<Product> products = productCatalogue.getProducts();
@@ -32,13 +34,13 @@ class ProductCatalogueTest {
Product product1 = new Product();
product1.setProductId("12345");
product1.setMerchant("AmazonSeller");
product1.setDataOrigin(Webshop.Amazon);
product1.setDataOrigin(Webshop.AMAZON);
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("54321");
product2.setMerchant("eBaySeller");
product2.setDataOrigin(Webshop.eBay);
product2.setDataOrigin(Webshop.EBAY);
productCatalogue.addProduct(product2);
productCatalogue.removeProduct(product1);
@@ -53,13 +55,13 @@ class ProductCatalogueTest {
Product product1 = new Product();
product1.setProductId("12345");
product1.setMerchant("AmazonSeller");
product1.setDataOrigin(Webshop.Amazon);
product1.setDataOrigin(Webshop.AMAZON);
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("54321");
product2.setMerchant("ebayMerchant");
product2.setDataOrigin(Webshop.eBay);
product2.setDataOrigin(Webshop.EBAY);
productCatalogue.addProduct(product2);
productCatalogue.clearProducts();
@@ -73,20 +75,23 @@ class ProductCatalogueTest {
Product product1 = new Product();
product1.setProductId("12345");
product1.setMerchant("AmazonSeller");
product1.setDataOrigin(Webshop.Amazon);
product1.setDataOrigin(Webshop.AMAZON);
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("54321");
product2.setMerchant("eBaySeller");
product2.setDataOrigin(Webshop.eBay);
product2.setDataOrigin(Webshop.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 Euro (available: no)]\n" +
"Product: [54321 from eBaySeller (eBay) at 0,00 Euro (available: no)]\n";
StringBuilder sb = new StringBuilder();
sb.append(String.format("Catalogue Name: %s%n", "GPU"));
sb.append(String.format("Description: %s%n", "Graphics Processing Units"));
sb.append("Products:\n");
sb.append(String.format("%s%n", product1.toString()));
sb.append(String.format("%s%n", product2.toString()));
String expectedString = sb.toString();
Assertions.assertEquals(expectedString, productCatalogue.toString());
}

View File

@@ -10,13 +10,13 @@ class ProductTest {
@Test
void testToString1() {
Product product1 = new Product();
product1.setDataOrigin(Webshop.Amazon);
product1.setDataOrigin(Webshop.AMAZON);
product1.setProductId("12345");
product1.setMerchant("Merchant A");
product1.setCurrentPrice(19.99);
product1.setAvailable(true);
String expectedString1 = "Product: [12345 from Merchant A (Amazon) at 19,99 Euro (available: yes)]";
String expectedString1 = "Product: [12345 from Merchant A (AMAZON) at 19,99 Euro (available: yes)]";
String result1 = product1.toString();
assertEquals(expectedString1, result1);
@@ -25,13 +25,13 @@ class ProductTest {
@Test
void testToString2() {
Product product2 = new Product();
product2.setDataOrigin(Webshop.eBay);
product2.setDataOrigin(Webshop.EBAY);
product2.setProductId("67890");
product2.setMerchant("Merchant B");
product2.setCurrentPrice(9.99);
product2.setAvailable(false);
String expectedString2 = "Product: [67890 from Merchant B (eBay) at 9,99 Euro (available: no)]";
String expectedString2 = "Product: [67890 from Merchant B (EBAY) at 9,99 Euro (available: no)]";
String result2 = product2.toString();
assertEquals(expectedString2, result2);
@@ -41,7 +41,7 @@ class ProductTest {
void gettersAndSetters_WorkAsExpected() {
// Arrange
Product product = new Product();
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
product.setProductId("12345");
product.setCurrentPrice(9.99);
product.setMerchant("Example Merchant");
@@ -49,7 +49,7 @@ class ProductTest {
product.setAvailable(true);
// Act and Assert
assertEquals(Webshop.Amazon, product.getDataOrigin());
assertEquals(Webshop.AMAZON, product.getDataOrigin());
assertEquals("12345", product.getProductId());
assertEquals(9.99, product.getCurrentPrice());
assertEquals("Example Merchant", product.getMerchant());
@@ -57,7 +57,7 @@ class ProductTest {
assertTrue(product.isAvailable());
// Modify fields
product.setDataOrigin(Webshop.eBay);
product.setDataOrigin(Webshop.EBAY);
product.setProductId("54321");
product.setCurrentPrice(19.99);
product.setMerchant("New Merchant");
@@ -65,7 +65,7 @@ class ProductTest {
product.setAvailable(false);
// Assert
assertEquals(Webshop.eBay, product.getDataOrigin());
assertEquals(Webshop.EBAY, product.getDataOrigin());
assertEquals("54321", product.getProductId());
assertEquals(19.99, product.getCurrentPrice());
assertEquals("New Merchant", product.getMerchant());

View File

@@ -48,7 +48,7 @@ class ProductMapperTest {
}
private ProductDTO createProductDTO() {
ProductDTO dto = new ProductDTO("12345", Webshop.Amazon);
ProductDTO dto = new ProductDTO("12345", Webshop.AMAZON);
dto.setAvailable(true);
dto.setCurrentPrice(9.99);
dto.setDeliveryPrice(2.50);
@@ -61,7 +61,7 @@ class ProductMapperTest {
// Arrange
Product product = new Product();
product.setProductId("12345");
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
product.setAvailable(true);
product.setCurrentPrice(9.99);
product.setDeliveryPrice(2.50);
@@ -72,7 +72,7 @@ class ProductMapperTest {
// Assert
assertEquals("12345", dto.getProductId());
assertEquals(Webshop.Amazon, dto.getDataOrigin());
assertEquals(Webshop.AMAZON, dto.getDataOrigin());
assertTrue(dto.isAvailable());
assertEquals(9.99, dto.getCurrentPrice());
assertEquals(2.50, dto.getDeliveryPrice());

View File

@@ -1,130 +0,0 @@
package de.rwu.easydrop.service.processing;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import de.rwu.easydrop.exception.InvalidCatalogueException;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.ProductCatalogue;
import de.rwu.easydrop.model.ProductPair;
class OrderManagerTest {
@Test
void testConstructorIsPrivate()
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
// Check for private constructor
Constructor<OrderManager> constructor = OrderManager.class.getDeclaredConstructor();
assertTrue(Modifier.isPrivate(constructor.getModifiers()));
// Make sure exception is thrown when instantiating
constructor.setAccessible(true);
assertThrows(InvocationTargetException.class, () -> {
constructor.newInstance();
});
}
@Test
void testCreateOrders_ValidCatalogues_OrdersCreated() {
// Arrange
List<ProductCatalogue> catalogues = createSampleCatalogues();
// Act
assertDoesNotThrow(() -> {
OrderManager.createOrders(catalogues);
});
}
@Test
void testGetHighestMarginProducts_ValidCatalogue_CheapestAndMostExpensiveProductsReturned() {
// Arrange
ProductCatalogue catalogue = createSampleCatalogue();
// Act
ProductPair pair = OrderManager.getHighestMarginProducts(catalogue);
// Assert
assertNotNull(pair);
assertNotNull(pair.getProduct1());
assertNotNull(pair.getProduct2());
assertEquals("Product2", pair.getProduct1().getProductId());
assertEquals("Product3", pair.getProduct2().getProductId());
}
@Test
void testGetHighestMarginProducts_InvalidCatalogue_ThrowsInvalidCatalogueException() {
// Arrange
ProductCatalogue catalogue = new ProductCatalogue("Catalogue1", "Sample catalogue");
catalogue.addProduct(new Product());
// The catalogue has only one product, which is invalid
// Act & Assert
Exception e = assertThrows(InvalidCatalogueException.class,
() -> OrderManager.getHighestMarginProducts(catalogue));
assertEquals("Product Catalogue holds less than 2 products!", e.getMessage());
}
@Test
void testGetHighestMarginProducts_InvalidCatalogue_NoMargin() {
// Arrange
ProductCatalogue catalogue = new ProductCatalogue("Catalogue1", "Sample catalogue");
catalogue.addProduct(new Product());
catalogue.addProduct(new Product());
// The catalogue has only one product, which is invalid
// Act & Assert
Exception e = assertThrows(InvalidCatalogueException.class,
() -> OrderManager.getHighestMarginProducts(catalogue));
assertEquals("Price margin is zero!", e.getMessage());
}
private List<ProductCatalogue> createSampleCatalogues() {
List<ProductCatalogue> catalogues = new ArrayList<>();
ProductCatalogue catalogue1 = createSampleCatalogue();
catalogues.add(catalogue1);
ProductCatalogue catalogue2 = new ProductCatalogue("Catalogue2", "Sample catalogue 2");
Product product4 = new Product();
product4.setProductId("Product4");
product4.setCurrentPrice(6.78);
catalogue2.addProduct(product4);
Product product5 = new Product();
product5.setProductId("Product5");
product5.setCurrentPrice(7.89);
catalogue2.addProduct(product5);
catalogues.add(catalogue2);
return catalogues;
}
private ProductCatalogue createSampleCatalogue() {
ProductCatalogue catalogue = new ProductCatalogue("Catalogue1", "Sample catalogue");
Product product1 = new Product();
product1.setProductId("Product1");
product1.setCurrentPrice(1.23);
catalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("Product2");
product2.setCurrentPrice(0.89);
catalogue.addProduct(product2);
Product product3 = new Product();
product3.setProductId("Product3");
product3.setCurrentPrice(4.56);
catalogue.addProduct(product3);
return catalogue;
}
}

View File

@@ -38,20 +38,20 @@ class CatalogueRetrieverTest {
// Create a sample product catalogue with two products
ProductCatalogue productCatalogue = new ProductCatalogue("Catalogue 1", "Sample catalogue");
Product product1 = new Product();
product1.setDataOrigin(Webshop.Amazon);
product1.setDataOrigin(Webshop.AMAZON);
product1.setProductId("ASIN1");
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setDataOrigin(Webshop.eBay);
product2.setDataOrigin(Webshop.EBAY);
product2.setProductId("ProductID2");
productCatalogue.addProduct(product2);
productCatalogues.add(productCatalogue);
// Mock the methods
when(productsConfig.getProductCatalogues()).thenReturn(productCatalogues);
when(productRetriever.getProductFromWebshop(Webshop.Amazon, "ASIN1")).thenReturn(product1);
when(productRetriever.getProductFromWebshop(Webshop.eBay, "ProductID2")).thenReturn(product2);
when(productRetriever.getProductFromWebshop(Webshop.AMAZON, "ASIN1")).thenReturn(product1);
when(productRetriever.getProductFromWebshop(Webshop.EBAY, "ProductID2")).thenReturn(product2);
// Act
catalogueRetriever.loadCatalogues();
@@ -70,7 +70,7 @@ class CatalogueRetrieverTest {
// Verify the method invocations
verify(productsConfig).loadConfig();
verify(productRetriever).getProductFromWebshop(Webshop.Amazon, "ASIN1");
verify(productRetriever).getProductFromWebshop(Webshop.eBay, "ProductID2");
verify(productRetriever).getProductFromWebshop(Webshop.AMAZON, "ASIN1");
verify(productRetriever).getProductFromWebshop(Webshop.EBAY, "ProductID2");
}
}

View File

@@ -17,7 +17,7 @@ import de.rwu.easydrop.api.client.AmazonProductDataSource;
import de.rwu.easydrop.api.client.DataSourceFactory;
import de.rwu.easydrop.api.client.EbayItemDataSource;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.data.connector.AbstractProductPersistence;
import de.rwu.easydrop.data.connector.ProductPersistenceInterface;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.Webshop;
import de.rwu.easydrop.util.Config;
@@ -26,7 +26,7 @@ class ProductRetrieverTest {
@Mock
private Config config;
@Mock
private DataSourceFactory DataSourceFactory;
private DataSourceFactory dataSourceFactory;
@Mock
private AmazonProductDataSource amazonDataSource;
@Mock
@@ -36,7 +36,7 @@ class ProductRetrieverTest {
@Mock
private Product product;
@Mock
private AbstractProductPersistence persistence;
private ProductPersistenceInterface persistence;
private ProductRetriever productRetriever;
@@ -45,19 +45,19 @@ class ProductRetrieverTest {
MockitoAnnotations.openMocks(this);
when(config.getProperty("AMAZON_API_URL")).thenReturn("https://api.amazon.com");
when(config.getProperty("AMAZON_API_KEY")).thenReturn("amazon-api-key");
DataSourceFactory.setConfig(config);
productRetriever = new ProductRetriever(DataSourceFactory);
dataSourceFactory.setConfig(config);
productRetriever = new ProductRetriever(dataSourceFactory, persistence);
}
@Test
void getProductFromAmazon_ReturnsProduct() {
// Arrange
String asin = "B01234ABC";
when(DataSourceFactory.createAmazonProductDataSource()).thenReturn(amazonDataSource);
when(dataSourceFactory.createAmazonProductDataSource()).thenReturn(amazonDataSource);
when(amazonDataSource.getProductDTOById(asin)).thenReturn(productDTO);
when(productDTO.getProductId()).thenReturn(asin);
when(productDTO.getCurrentPrice()).thenReturn(9.99);
when(productDTO.getDataOrigin()).thenReturn(Webshop.Amazon);
when(productDTO.getDataOrigin()).thenReturn(Webshop.AMAZON);
// Act
Product result = productRetriever.getProductFromAmazon(asin);
@@ -73,11 +73,11 @@ class ProductRetrieverTest {
void getProductFromEbay_ReturnsProduct() {
// Arrange
String productQuery = "MySearchQuery";
when(DataSourceFactory.createEbayItemDataSource()).thenReturn(ebayDataSource);
when(dataSourceFactory.createEbayItemDataSource()).thenReturn(ebayDataSource);
when(ebayDataSource.getProductDTOById(productQuery)).thenReturn(productDTO);
when(productDTO.getProductId()).thenReturn(productQuery);
when(productDTO.getCurrentPrice()).thenReturn(9.99);
when(productDTO.getDataOrigin()).thenReturn(Webshop.eBay);
when(productDTO.getDataOrigin()).thenReturn(Webshop.EBAY);
// Act
Product result = productRetriever.getProductFromEbay(productQuery);
@@ -93,11 +93,10 @@ class ProductRetrieverTest {
void getProductFromPersistence_ValidProductId_ReturnsProduct() {
// Arrange
String productId = "123";
when(DataSourceFactory.createProductPersistenceDataSource()).thenReturn(persistence);
when(persistence.getProductDTOById(productId)).thenReturn(productDTO);
when(productDTO.getProductId()).thenReturn(productId);
when(productDTO.getCurrentPrice()).thenReturn(9.99);
when(productDTO.getDataOrigin()).thenReturn(Webshop.Amazon);
when(productDTO.getDataOrigin()).thenReturn(Webshop.AMAZON);
// Act
Product result = productRetriever.getProductFromPersistence(productId);

View File

@@ -38,7 +38,7 @@ class ProductValidatorTest {
// Arrange
Product product = new Product();
product.setCurrentPrice(9.99);
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
product.setProductId("12345");
// Act and Assert
@@ -61,7 +61,7 @@ class ProductValidatorTest {
private static Product createProductWithZeroPrice() {
Product product = new Product();
product.setCurrentPrice(0.00);
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
product.setProductId("12345");
return product;
}
@@ -69,7 +69,7 @@ class ProductValidatorTest {
private static Product createProductWithEmptyProductId() {
Product product = new Product();
product.setCurrentPrice(9.99);
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
product.setProductId("");
return product;
}

View File

@@ -13,7 +13,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.data.connector.AbstractProductPersistence;
import de.rwu.easydrop.data.connector.ProductPersistenceInterface;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.ProductCatalogue;
import de.rwu.easydrop.model.Webshop;
@@ -21,7 +21,7 @@ import de.rwu.easydrop.model.Webshop;
class CatalogueWriterTest {
@Mock
private AbstractProductPersistence persistenceMock;
private ProductPersistenceInterface persistenceMock;
private CatalogueWriter catalogueWriter;
@@ -40,19 +40,19 @@ class CatalogueWriterTest {
catalogueWriter.writeCatalogues(catalogues);
// Assert
verify(persistenceMock, times(4)).saveProduct(any(ProductDTO.class));
verify(persistenceMock, times(4)).writeProduct(any(ProductDTO.class));
}
private List<ProductCatalogue> createSampleCatalogues() {
List<ProductCatalogue> catalogues = new ArrayList<>();
ProductCatalogue catalogue1 = new ProductCatalogue("Catalogue 1", "Sample catalogue 1");
catalogue1.addProduct(createSampleProduct(Webshop.Amazon, "ID 1"));
catalogue1.addProduct(createSampleProduct(Webshop.eBay, "ID 2"));
catalogue1.addProduct(createSampleProduct(Webshop.AMAZON, "ID 1"));
catalogue1.addProduct(createSampleProduct(Webshop.EBAY, "ID 2"));
ProductCatalogue catalogue2 = new ProductCatalogue("Catalogue 2", "Sample catalogue 2");
catalogue2.addProduct(createSampleProduct(Webshop.Amazon, "ID 3"));
catalogue2.addProduct(createSampleProduct(Webshop.eBay, "ID 4"));
catalogue2.addProduct(createSampleProduct(Webshop.AMAZON, "ID 3"));
catalogue2.addProduct(createSampleProduct(Webshop.EBAY, "ID 4"));
catalogues.add(catalogue1);
catalogues.add(catalogue2);

View File

@@ -10,22 +10,21 @@ import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.data.connector.AbstractProductPersistence;
import de.rwu.easydrop.data.connector.ProductPersistenceInterface;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.Webshop;
class ProductWriterTest {
@Mock
private AbstractProductPersistence persistence;
private ProductPersistenceInterface persistence;
private ProductWriter productWriter;
@BeforeEach
public void setup() {
MockitoAnnotations.openMocks(this);
productWriter = new ProductWriter();
productWriter.setPersistence(persistence);
productWriter = new ProductWriter(persistence);
}
@Test
@@ -33,14 +32,14 @@ class ProductWriterTest {
// Arrange
Product product = new Product();
product.setProductId("12345");
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
product.setCurrentPrice(9.99);
// Act
productWriter.writeProductToPersistence(product);
// Assert
Mockito.verify(persistence).saveProduct(any(ProductDTO.class));
Mockito.verify(persistence).writeProduct(any(ProductDTO.class));
}
@Test
@@ -48,7 +47,7 @@ class ProductWriterTest {
// Arrange
Product product = new Product();
product.setProductId("");
product.setDataOrigin(Webshop.Amazon);
product.setDataOrigin(Webshop.AMAZON);
// Act and Assert
assertThrows(Exception.class, () -> productWriter.writeProductToPersistence(product));

View File

@@ -5,10 +5,10 @@
description: "Integration Testing Product",
"identifiers": [
{
"Amazon": "DEMO-AMAZON-001"
"AMAZON": "DEMO-AMAZON-001"
},
{
"eBay": "DEMO-EBAY-001"
"EBAY": "DEMO-EBAY-001"
}
]
]

View File

@@ -5,10 +5,10 @@
"description": "Integration Testing Product",
"identifiers": [
{
"Amazon": "DEMO-AMAZON-001"
"AMAZON": "DEMO-AMAZON-001"
},
{
"eBay": "DEMO-EBAY-001"
"EBAY": "DEMO-EBAY-001"
}
]
}