Updated tests accordingly

This commit is contained in:
Leonie Eitze
2023-06-27 02:56:48 +02:00
parent 463932f8e9
commit 956223bea7
21 changed files with 126 additions and 220 deletions

View File

@@ -21,6 +21,7 @@ import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.exception.DataWriterException;
import de.rwu.easydrop.model.Webshop;
class AbstractDataWriterTest {
private static String demoProductId = "whateverId";
@@ -42,8 +43,8 @@ class AbstractDataWriterTest {
}
@Override
protected String getDataTarget() {
return "Test";
protected Webshop getDataTarget() {
return Webshop.Amazon;
}
@Override
@@ -53,21 +54,10 @@ class AbstractDataWriterTest {
};
}
@Test
void sendPutRequest_wrongDataSource_throwsException() {
ProductDTO dto = new ProductDTO(demoProductId, "Amazon");
DataWriterException e = assertThrows(DataWriterException.class, () -> {
writer.sendPutRequest(dto, "testApiType");
});
assertEquals("Product data source and target testApiType API are incompatible.", e.getMessage());
}
@Test
void sendPutRequest_badResponseCode_throwsException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO(demoProductId, "Test");
ProductDTO dto = new ProductDTO(demoProductId, Webshop.Amazon);
// Set up Mocks
AbstractDataWriter mockWriter = mock(AbstractDataWriter.class);
@@ -79,13 +69,13 @@ class AbstractDataWriterTest {
writer.sendPutRequest(dto, "Sales");
});
assertEquals("Test 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, "Test");
ProductDTO dto = new ProductDTO(demoProductId, Webshop.Amazon);
// Set up Mocks
AbstractDataWriter mockWriter = mock(AbstractDataWriter.class);
@@ -96,13 +86,13 @@ class AbstractDataWriterTest {
writer.sendPutRequest(dto, "testApiType");
});
assertEquals("Couldn't fulfill Test 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, "test");
ProductDTO dto = new ProductDTO(demoProductId, Webshop.Amazon);
// Set up Mocks
AbstractDataWriter mockWriter = mock(AbstractDataWriter.class);
@@ -112,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("test");
when(mockWriter.getDataTarget()).thenReturn(Webshop.Amazon);
assertDoesNotThrow(() -> {
mockWriter.sendPutRequest(dto, "Purchase");

View File

@@ -13,6 +13,7 @@ import java.net.URL;
import org.junit.jupiter.api.Test;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.model.Webshop;
class AbstractPurchaserTest {
private AbstractPurchaser mockPurchaser = mock(AbstractPurchaser.class);
@@ -20,7 +21,7 @@ class AbstractPurchaserTest {
@Test
void purchaseProduct_CorrectApiTypeInException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO("12345", "test");
ProductDTO dto = new ProductDTO("12345", Webshop.Amazon);
// Set up mocks
URL mockURL = mock(URL.class);
@@ -29,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("test");
when(mockPurchaser.getDataTarget()).thenReturn(Webshop.Amazon);
assertDoesNotThrow(() -> {
mockPurchaser.purchaseProduct(dto);

View File

@@ -13,6 +13,7 @@ import java.net.URL;
import org.junit.jupiter.api.Test;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.model.Webshop;
class AbstractSellerTest {
private AbstractSeller mockSeller = mock(AbstractSeller.class);
@@ -20,7 +21,7 @@ class AbstractSellerTest {
@Test
void purchaseProduct_CorrectApiTypeInException() throws IOException {
// Set up DTO
ProductDTO dto = new ProductDTO("12345", "test");
ProductDTO dto = new ProductDTO("12345", Webshop.Amazon);
// Set up mocks
URL mockURL = mock(URL.class);
@@ -29,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("test");
when(mockSeller.getDataTarget()).thenReturn(Webshop.Amazon);
assertDoesNotThrow(() -> {
mockSeller.sellProduct(dto);

View File

@@ -21,6 +21,7 @@ import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.exception.DataSourceException;
import de.rwu.easydrop.model.Webshop;
class AmazonProductDataSourceTest {
@@ -28,7 +29,7 @@ class AmazonProductDataSourceTest {
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static String demoDataOrigin = "Amazon";
private static Webshop demoDataOrigin = Webshop.Amazon;
private static String demoProductId = "whateverId";
@BeforeEach
@@ -138,7 +139,7 @@ class AmazonProductDataSourceTest {
// Verify the product DTO properties
assertEquals(demoProductId, result.getProductId());
assertEquals("Amazon", result.getDataOrigin());
assertEquals(Webshop.Amazon, result.getDataOrigin());
assertEquals(true, result.isAvailable());
assertEquals(10.0, result.getCurrentPrice());
assertEquals(2.5, result.getDeliveryPrice());
@@ -149,18 +150,18 @@ class AmazonProductDataSourceTest {
void testGetProductDTOById_failedRequest() throws IOException {
// Set up the test environment
AmazonProductDataSource dataSource = mock(AmazonProductDataSource.class);
AmazonProductDataSource DataSource = mock(AmazonProductDataSource.class);
URL mockURL = mock(URL.class);
when(dataSource.getDataOrigin()).thenReturn(demoDataOrigin);
when(dataSource.createApiUrl(demoProductId)).thenReturn(mockURL);
when(dataSource.getProductDTOById(demoProductId)).thenCallRealMethod();
when(DataSource.getDataOrigin()).thenReturn(demoDataOrigin);
when(DataSource.createApiUrl(demoProductId)).thenReturn(mockURL);
when(DataSource.getProductDTOById(demoProductId)).thenCallRealMethod();
HttpURLConnection mockConnection = mock(HttpURLConnection.class);
when(mockURL.openConnection()).thenReturn(mockConnection);
when(mockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NOT_FOUND);
// Invoke the method and verify the exception
DataSourceException exception = assertThrows(DataSourceException.class, () -> {
dataSource.getProductDTOById(demoProductId);
DataSource.getProductDTOById(demoProductId);
});
// Verify the exception message
@@ -170,12 +171,12 @@ class AmazonProductDataSourceTest {
@Test
void testGetProductDTOById_ioException() throws IOException {
// Set up the test environment
AmazonProductDataSource dataSource = mock(AmazonProductDataSource.class);
AmazonProductDataSource DataSource = mock(AmazonProductDataSource.class);
URL mockURL = mock(URL.class);
when(dataSource.getDataOrigin()).thenReturn(demoDataOrigin);
when(dataSource.createApiUrl(demoProductId)).thenReturn(mockURL);
when(dataSource.getProductDTOById(demoProductId)).thenCallRealMethod();
when(dataSource.buildProductDTO(any(), anyString())).thenCallRealMethod();
when(DataSource.getDataOrigin()).thenReturn(demoDataOrigin);
when(DataSource.createApiUrl(demoProductId)).thenReturn(mockURL);
when(DataSource.getProductDTOById(demoProductId)).thenCallRealMethod();
when(DataSource.buildProductDTO(any(), anyString())).thenCallRealMethod();
HttpURLConnection mockConnection = mock(HttpURLConnection.class);
when(mockURL.openConnection()).thenReturn(mockConnection);
when(mockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
@@ -183,7 +184,7 @@ class AmazonProductDataSourceTest {
// Invoke the method and verify the exception
DataSourceException exception = assertThrows(DataSourceException.class, () -> {
dataSource.getProductDTOById(demoProductId);
DataSource.getProductDTOById(demoProductId);
});
// Verify the exception message
@@ -192,7 +193,7 @@ class AmazonProductDataSourceTest {
@Test
void getDataOrigin_ReturnsExpectedDataOrigin() {
String dataOrigin = demoDataSource.getDataOrigin();
Webshop dataOrigin = demoDataSource.getDataOrigin();
assertEquals(demoDataOrigin, dataOrigin);
}

View File

@@ -1,7 +1,6 @@
package de.rwu.easydrop.api.client;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
@@ -12,15 +11,14 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.exception.DataWriterException;
import de.rwu.easydrop.model.Webshop;
class AmazonPurchaserTest {
private AmazonPurchaser demoPurchaser;
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static String demoDataTarget = "Amazon";
private static Webshop demoDataTarget = Webshop.Amazon;
@BeforeEach
void setup() {
@@ -72,7 +70,7 @@ class AmazonPurchaserTest {
@Test
void getDataTarget_ReturnsExpectedDataOrigin() {
String dataTarget = demoPurchaser.getDataTarget();
Webshop dataTarget = demoPurchaser.getDataTarget();
assertEquals(demoDataTarget, dataTarget);
}

View File

@@ -11,12 +11,14 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.model.Webshop;
class AmazonSellerTest {
private AmazonSeller demoSeller;
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static String demoDataTarget = "Amazon";
private static Webshop demoDataTarget = Webshop.Amazon;
@BeforeEach
void setup() {
@@ -68,7 +70,7 @@ class AmazonSellerTest {
@Test
void getDataTarget_ReturnsExpectedDataOrigin() {
String dataTarget = demoSeller.getDataTarget();
Webshop dataTarget = demoSeller.getDataTarget();
assertEquals(demoDataTarget, dataTarget);
}

View File

@@ -21,7 +21,7 @@ class DataSourceFactoryTest {
@Mock
private Config config;
private DataSourceFactory dataSourceFactory;
private DataSourceFactory DataSourceFactory;
@BeforeEach
void setUp() throws ConfigurationException {
@@ -30,31 +30,31 @@ class DataSourceFactoryTest {
when(config.getProperty("AMAZON_API_KEY")).thenReturn("amazon-api-key");
when(config.getProperty("EBAY_API_URL")).thenReturn("https://api.ebay.com");
when(config.getProperty("EBAY_API_KEY")).thenReturn("ebay-api-key");
dataSourceFactory = new DataSourceFactory(config);
DataSourceFactory = new DataSourceFactory(config);
}
@Test
void createAmazonProductDataSource_ReturnsAmazonProductDataSource() {
// Act
AmazonProductDataSource dataSource = dataSourceFactory.createAmazonProductDataSource();
AmazonProductDataSource DataSource = DataSourceFactory.createAmazonProductDataSource();
// Assert
assertEquals("amazon-api-key", dataSource.getApiKey());
assertEquals("amazon-api-key", DataSource.getApiKey());
}
@Test
void createEbayItemDataSource_ReturnsEbayItemDataSource() {
// Act
EbayItemDataSource dataSource = dataSourceFactory.createEbayItemDataSource();
EbayItemDataSource DataSource = DataSourceFactory.createEbayItemDataSource();
// Assert
assertEquals("ebay-api-key", dataSource.getApiKey());
assertEquals("ebay-api-key", DataSource.getApiKey());
}
@Test
void createProductPersistenceDataSource_NullPersistence() {
PersistenceException exception = assertThrows(PersistenceException.class, () -> {
dataSourceFactory.createProductPersistenceDataSource();
DataSourceFactory.createProductPersistenceDataSource();
});
assertEquals("Persistence is not set", exception.getMessage());
@@ -62,8 +62,8 @@ class DataSourceFactoryTest {
@Test
void createProductPersistenceDataSource_WorkingPersistence() {
dataSourceFactory.setPersistence(new SQLiteConnector(new SQLiteDataSource()));
DataSourceFactory.setPersistence(new SQLiteConnector(new SQLiteDataSource()));
assertDoesNotThrow(() -> dataSourceFactory.createProductPersistenceDataSource());
assertDoesNotThrow(() -> DataSourceFactory.createProductPersistenceDataSource());
}
}

View File

@@ -19,13 +19,14 @@ import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.exception.DataSourceException;
import de.rwu.easydrop.model.Webshop;
class EbayItemDataSourceTest {
private EbayItemDataSource demoDataSource;
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static String demoDataOrigin = "eBay";
private static Webshop demoDataOrigin = Webshop.eBay;
private static String demoQuery = "iPhone";
@BeforeEach
@@ -82,7 +83,7 @@ class EbayItemDataSourceTest {
ProductDTO result = demoDataSource.buildProductDTO(product, json);
assertEquals("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
@@ -91,7 +92,7 @@ class EbayItemDataSourceTest {
@Test
void getDataOrigin_ReturnsExpectedDataOrigin() {
String dataOrigin = demoDataSource.getDataOrigin();
Webshop dataOrigin = demoDataSource.getDataOrigin();
assertEquals(demoDataOrigin, dataOrigin);
}
@@ -105,18 +106,18 @@ class EbayItemDataSourceTest {
void testGetProductDTOById_failedRequest() throws IOException {
// Set up the test environment
EbayItemDataSource dataSource = mock(EbayItemDataSource.class);
EbayItemDataSource DataSource = mock(EbayItemDataSource.class);
URL mockURL = mock(URL.class);
when(dataSource.getDataOrigin()).thenReturn(demoDataOrigin);
when(dataSource.createApiUrl(demoQuery)).thenReturn(mockURL);
when(dataSource.getProductDTOById(demoQuery)).thenCallRealMethod();
when(DataSource.getDataOrigin()).thenReturn(demoDataOrigin);
when(DataSource.createApiUrl(demoQuery)).thenReturn(mockURL);
when(DataSource.getProductDTOById(demoQuery)).thenCallRealMethod();
HttpURLConnection mockConnection = mock(HttpURLConnection.class);
when(mockURL.openConnection()).thenReturn(mockConnection);
when(mockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NOT_FOUND);
// Invoke the method and verify the exception
DataSourceException exception = assertThrows(DataSourceException.class, () -> {
dataSource.getProductDTOById(demoQuery);
DataSource.getProductDTOById(demoQuery);
});
// Verify the exception message

View File

@@ -11,12 +11,14 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.model.Webshop;
class EbayPurchaserTest {
private EbayPurchaser demoPurchaser;
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static String demoDataTarget = "eBay";
private static Webshop demoDataTarget = Webshop.eBay;
@BeforeEach
void setup() {
@@ -65,7 +67,7 @@ class EbayPurchaserTest {
@Test
void getDataTarget_ReturnsExpectedDataOrigin() {
String dataTarget = demoPurchaser.getDataTarget();
Webshop dataTarget = demoPurchaser.getDataTarget();
assertEquals(demoDataTarget, dataTarget);
}

View File

@@ -11,12 +11,14 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.model.Webshop;
class EbaySellerTest {
private EbaySeller demoSeller;
private static String demoApiKey = "my-api-key";
private static String demoApiUrl = "https://www.example.com/api";
private static String demoDataTarget = "eBay";
private static Webshop demoDataTarget = Webshop.eBay;
@BeforeEach
void setup() {
@@ -65,7 +67,7 @@ class EbaySellerTest {
@Test
void getDataTarget_ReturnsExpectedDataOrigin() {
String dataTarget = demoSeller.getDataTarget();
Webshop dataTarget = demoSeller.getDataTarget();
assertEquals(demoDataTarget, dataTarget);
}

View File

@@ -6,13 +6,15 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import org.junit.jupiter.api.Test;
import de.rwu.easydrop.model.Webshop;
class ProductDTOTest {
@Test
void constructor_SetsProductIdAndDataOrigin() {
// Arrange
String productId = "12345";
String dataOrigin = "Amazon";
Webshop dataOrigin = Webshop.Amazon;
// Act
ProductDTO productDTO = new ProductDTO(productId, dataOrigin);
@@ -25,19 +27,19 @@ class ProductDTOTest {
@Test
void gettersAndSetters_WorkAsExpected() {
// Arrange
ProductDTO productDTO = new ProductDTO("12345", "Amazon");
ProductDTO productDTO = new ProductDTO("12345", Webshop.Amazon);
// Act and Assert
assertEquals("12345", productDTO.getProductId());
assertEquals("Amazon", productDTO.getDataOrigin());
assertEquals(Webshop.Amazon, productDTO.getDataOrigin());
// Modify fields
productDTO.setProductId("54321");
productDTO.setDataOrigin("eBay");
productDTO.setDataOrigin(Webshop.eBay);
// Assert
assertEquals("54321", productDTO.getProductId());
assertEquals("eBay", productDTO.getDataOrigin());
assertEquals(Webshop.eBay, productDTO.getDataOrigin());
}
@Test

View File

@@ -1,31 +1,4 @@
package de.rwu.easydrop.core;
import java.util.List;
import javax.naming.ConfigurationException;
import org.junit.jupiter.api.Test;
import de.rwu.easydrop.api.client.DataSourceFactory;
import de.rwu.easydrop.model.ProductCatalogue;
import de.rwu.easydrop.service.retriever.CatalogueRetriever;
import de.rwu.easydrop.service.retriever.ProductRetriever;
import de.rwu.easydrop.util.Config;
import de.rwu.easydrop.util.ProductsConfig;
public class CoreTest {
@Test
void testRunCore() throws ConfigurationException{
Config config = Config.getInstance();
ProductsConfig pConfig = ProductsConfig.getInstance();
DataSourceFactory dataSourceFactory = new DataSourceFactory(config);
ProductRetriever retriever = new ProductRetriever(dataSourceFactory);
CatalogueRetriever catRetriever = new CatalogueRetriever(pConfig, retriever);
catRetriever.loadCatalogues();
List<ProductCatalogue> pCats = catRetriever.getProductCatalogues();
Core core1=new Core();
core1.runCore(pCats);
}
}

View File

@@ -22,6 +22,7 @@ import org.sqlite.SQLiteDataSource;
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 {
@@ -45,8 +46,8 @@ class SQLiteConnectorTest {
void saveProduct_ValidProduct_SuccessfullySaved() {
// Arrange
sqliteConnector.clearData();
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, "Amazon");
ProductDTO.setDataOrigin("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");
@@ -59,7 +60,7 @@ class SQLiteConnectorTest {
// Assert
ProductDTO savedProductDTO = sqliteConnector.getProductDTOById(TEST_PRODUCT_ID);
assertNotNull(savedProductDTO);
assertEquals("Amazon", savedProductDTO.getDataOrigin());
assertEquals(Webshop.Amazon, savedProductDTO.getDataOrigin());
assertEquals(TEST_PRODUCT_ID, savedProductDTO.getProductId());
assertEquals(9.99, savedProductDTO.getCurrentPrice());
assertEquals("Sample Merchant", savedProductDTO.getMerchant());
@@ -78,7 +79,7 @@ class SQLiteConnectorTest {
// Assert
assertNotNull(ProductDTO);
assertEquals("Amazon", ProductDTO.getDataOrigin());
assertEquals(Webshop.Amazon, ProductDTO.getDataOrigin());
assertEquals(TEST_PRODUCT_ID, ProductDTO.getProductId());
assertEquals(9.99, ProductDTO.getCurrentPrice());
assertEquals("Sample Merchant", ProductDTO.getMerchant());
@@ -113,7 +114,7 @@ class SQLiteConnectorTest {
@Test
void saveProduct_ThrowsPersistenceException_OnSQLException() throws SQLException {
// Arrange
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, "Amazon");
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.Amazon);
sqliteConnector.setDb(mockDataSource);
doThrow(SQLException.class).when(mockDataSource).getConnection();
@@ -143,7 +144,7 @@ class SQLiteConnectorTest {
}
private void insertSampleProduct() {
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, "Amazon");
ProductDTO ProductDTO = new ProductDTO(TEST_PRODUCT_ID, Webshop.Amazon);
ProductDTO.setCurrentPrice(9.99);
ProductDTO.setMerchant("Sample Merchant");
ProductDTO.setDeliveryPrice(2.50);
@@ -151,18 +152,6 @@ class SQLiteConnectorTest {
sqliteConnector.saveProduct(ProductDTO);
}
@Test
void getDataOrigin_ReturnsCorrectDataOrigin() {
// Arrange
SQLiteConnector connector = new SQLiteConnector(new SQLiteDataSource());
// Act
String dataOrigin = connector.getDataOrigin();
// Assert
assertEquals("SQLite", dataOrigin);
}
@Test
void getApiKey_UnsupportedOperationExceptionThrown() {
// Arrange
@@ -176,7 +165,7 @@ class SQLiteConnectorTest {
void buildProductDTO_UnsupportedOperationExceptionThrown() {
// Arrange
SQLiteConnector connector = new SQLiteConnector(new SQLiteDataSource());
ProductDTO product = new ProductDTO("ASIN123", "Amazon");
ProductDTO product = new ProductDTO("ASIN123", Webshop.Amazon);
String json = "{\"productId\":\"ASIN123\",\"dataOrigin\":\"Amazon\"}";
// Act and Assert

View File

@@ -19,7 +19,7 @@ class ProductCatalogueTest {
Product product = new Product();
product.setProductId("12345");
product.setMerchant("AmazonSeller");
product.setDataOrigin("Amazon");
product.setDataOrigin(Webshop.Amazon);
productCatalogue.addProduct(product);
List<Product> products = productCatalogue.getProducts();
@@ -32,13 +32,13 @@ class ProductCatalogueTest {
Product product1 = new Product();
product1.setProductId("12345");
product1.setMerchant("AmazonSeller");
product1.setDataOrigin("Amazon");
product1.setDataOrigin(Webshop.Amazon);
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("54321");
product2.setMerchant("eBaySeller");
product2.setDataOrigin("eBay");
product2.setDataOrigin(Webshop.eBay);
productCatalogue.addProduct(product2);
productCatalogue.removeProduct(product1);
@@ -53,13 +53,13 @@ class ProductCatalogueTest {
Product product1 = new Product();
product1.setProductId("12345");
product1.setMerchant("AmazonSeller");
product1.setDataOrigin("Amazon");
product1.setDataOrigin(Webshop.Amazon);
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("54321");
product2.setMerchant("eBay");
product2.setDataOrigin("eBay");
product2.setMerchant("ebayMerchant");
product2.setDataOrigin(Webshop.eBay);
productCatalogue.addProduct(product2);
productCatalogue.clearProducts();
@@ -73,13 +73,13 @@ class ProductCatalogueTest {
Product product1 = new Product();
product1.setProductId("12345");
product1.setMerchant("AmazonSeller");
product1.setDataOrigin("Amazon");
product1.setDataOrigin(Webshop.Amazon);
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setProductId("54321");
product2.setMerchant("eBaySeller");
product2.setDataOrigin("eBay");
product2.setDataOrigin(Webshop.eBay);
productCatalogue.addProduct(product2);
String expectedString = "Product Catalogue: GPU\n" +

View File

@@ -10,7 +10,7 @@ class ProductTest {
@Test
void testToString1() {
Product product1 = new Product();
product1.setDataOrigin("Amazon");
product1.setDataOrigin(Webshop.Amazon);
product1.setProductId("12345");
product1.setMerchant("Merchant A");
product1.setCurrentPrice(19.99);
@@ -25,7 +25,7 @@ class ProductTest {
@Test
void testToString2() {
Product product2 = new Product();
product2.setDataOrigin("eBay");
product2.setDataOrigin(Webshop.eBay);
product2.setProductId("67890");
product2.setMerchant("Merchant B");
product2.setCurrentPrice(9.99);
@@ -41,7 +41,7 @@ class ProductTest {
void gettersAndSetters_WorkAsExpected() {
// Arrange
Product product = new Product();
product.setDataOrigin("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("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("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("eBay", product.getDataOrigin());
assertEquals(Webshop.eBay, product.getDataOrigin());
assertEquals("54321", product.getProductId());
assertEquals(19.99, product.getCurrentPrice());
assertEquals("New Merchant", product.getMerchant());

View File

@@ -13,6 +13,7 @@ import org.junit.jupiter.api.Test;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.Webshop;
class ProductMapperTest {
@Test
@@ -47,7 +48,7 @@ class ProductMapperTest {
}
private ProductDTO createProductDTO() {
ProductDTO dto = new ProductDTO("12345", "Amazon");
ProductDTO dto = new ProductDTO("12345", Webshop.Amazon);
dto.setAvailable(true);
dto.setCurrentPrice(9.99);
dto.setDeliveryPrice(2.50);
@@ -60,7 +61,7 @@ class ProductMapperTest {
// Arrange
Product product = new Product();
product.setProductId("12345");
product.setDataOrigin("Amazon");
product.setDataOrigin(Webshop.Amazon);
product.setAvailable(true);
product.setCurrentPrice(9.99);
product.setDeliveryPrice(2.50);
@@ -71,7 +72,7 @@ class ProductMapperTest {
// Assert
assertEquals("12345", dto.getProductId());
assertEquals("Amazon", dto.getDataOrigin());
assertEquals(Webshop.Amazon, dto.getDataOrigin());
assertTrue(dto.isAvailable());
assertEquals(9.99, dto.getCurrentPrice());
assertEquals(2.50, dto.getDeliveryPrice());

View File

@@ -1,7 +1,6 @@
package de.rwu.easydrop.service.retriever;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -14,9 +13,9 @@ import javax.naming.ConfigurationException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import de.rwu.easydrop.exception.InvalidProductException;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.ProductCatalogue;
import de.rwu.easydrop.model.Webshop;
import de.rwu.easydrop.util.ProductsConfig;
class CatalogueRetrieverTest {
@@ -39,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("Amazon");
product1.setDataOrigin(Webshop.Amazon);
product1.setProductId("ASIN1");
productCatalogue.addProduct(product1);
Product product2 = new Product();
product2.setDataOrigin("eBay");
product2.setDataOrigin(Webshop.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);
when(productRetriever.getProductFromWebshop(Webshop.Amazon, "ASIN1")).thenReturn(product1);
when(productRetriever.getProductFromWebshop(Webshop.eBay, "ProductID2")).thenReturn(product2);
// Act
catalogueRetriever.loadCatalogues();
@@ -71,33 +70,7 @@ class CatalogueRetrieverTest {
// Verify the method invocations
verify(productsConfig).loadConfig();
verify(productRetriever).getProductFromAmazon("ASIN1");
verify(productRetriever).getProductFromEbay("ProductID2");
}
@Test
void loadCatalogues_ValidConfig_CataloguesLoaded_InvalidProduct() throws ConfigurationException {
// Arrange
List<ProductCatalogue> productCatalogues = new ArrayList<>();
// Create a sample product catalogue
ProductCatalogue productCatalogue = new ProductCatalogue("Catalogue 1", "Sample catalogue");
Product product = new Product();
product.setDataOrigin("");
product.setProductId("ProductID1");
productCatalogue.addProduct(product);
productCatalogues.add(productCatalogue);
// Mock the methods
when(productsConfig.getProductCatalogues()).thenReturn(productCatalogues);
when(productRetriever.getProductFromAmazon("ProductID1")).thenReturn(product);
// Act and Assert
InvalidProductException exception = assertThrows(InvalidProductException.class, () -> {
catalogueRetriever.loadCatalogues();
});
assertEquals("Product data origin is invalid", exception.getMessage());
verify(productRetriever).getProductFromWebshop(Webshop.Amazon, "ASIN1");
verify(productRetriever).getProductFromWebshop(Webshop.eBay, "ProductID2");
}
}

View File

@@ -19,13 +19,14 @@ 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.model.Product;
import de.rwu.easydrop.model.Webshop;
import de.rwu.easydrop.util.Config;
class ProductRetrieverTest {
@Mock
private Config config;
@Mock
private DataSourceFactory dataSourceFactory;
private DataSourceFactory DataSourceFactory;
@Mock
private AmazonProductDataSource amazonDataSource;
@Mock
@@ -44,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);
}
@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("Amazon");
when(productDTO.getDataOrigin()).thenReturn(Webshop.Amazon);
// Act
Product result = productRetriever.getProductFromAmazon(asin);
@@ -72,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("eBay");
when(productDTO.getDataOrigin()).thenReturn(Webshop.eBay);
// Act
Product result = productRetriever.getProductFromEbay(productQuery);
@@ -92,11 +93,11 @@ class ProductRetrieverTest {
void getProductFromPersistence_ValidProductId_ReturnsProduct() {
// Arrange
String productId = "123";
when(dataSourceFactory.createProductPersistenceDataSource()).thenReturn(persistence);
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("Amazon");
when(productDTO.getDataOrigin()).thenReturn(Webshop.Amazon);
// Act
Product result = productRetriever.getProductFromPersistence(productId);

View File

@@ -1,7 +1,6 @@
package de.rwu.easydrop.service.validation;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -16,6 +15,7 @@ import org.junit.jupiter.params.provider.MethodSource;
import de.rwu.easydrop.exception.InvalidProductException;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.Webshop;
class ProductValidatorTest {
@@ -38,37 +38,13 @@ class ProductValidatorTest {
// Arrange
Product product = new Product();
product.setCurrentPrice(9.99);
product.setDataOrigin("Amazon");
product.setDataOrigin(Webshop.Amazon);
product.setProductId("12345");
// Act and Assert
assertDoesNotThrow(() -> ProductValidator.validate(product));
}
@Test
void isInValidDataOrigins_ValidDataOrigin_ReturnsTrue() {
// Arrange
String dataOrigin = "Amazon";
// Act
boolean result = ProductValidator.isInValidDataOrigins(dataOrigin);
// Assert
assertTrue(result);
}
@Test
void isInValidDataOrigins_InvalidDataOrigin_ReturnsFalse() {
// Arrange
String dataOrigin = "UnknownOrigin";
// Act
boolean result = ProductValidator.isInValidDataOrigins(dataOrigin);
// Assert
assertFalse(result);
}
@ParameterizedTest
@MethodSource("invalidProductProvider")
void validate_InvalidProduct_ThrowsInvalidProductException(Product product) {
@@ -79,22 +55,13 @@ class ProductValidatorTest {
static Stream<Product> invalidProductProvider() {
return Stream.of(
createProductWithZeroPrice(),
createProductWithUnknownDataOrigin(),
createProductWithEmptyProductId());
}
private static Product createProductWithZeroPrice() {
Product product = new Product();
product.setCurrentPrice(0.00);
product.setDataOrigin("Amazon");
product.setProductId("12345");
return product;
}
private static Product createProductWithUnknownDataOrigin() {
Product product = new Product();
product.setCurrentPrice(9.99);
product.setDataOrigin("UnknownOrigin");
product.setDataOrigin(Webshop.Amazon);
product.setProductId("12345");
return product;
}
@@ -102,7 +69,7 @@ class ProductValidatorTest {
private static Product createProductWithEmptyProductId() {
Product product = new Product();
product.setCurrentPrice(9.99);
product.setDataOrigin("Amazon");
product.setDataOrigin(Webshop.Amazon);
product.setProductId("");
return product;
}

View File

@@ -16,6 +16,7 @@ import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.data.connector.AbstractProductPersistence;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.ProductCatalogue;
import de.rwu.easydrop.model.Webshop;
class CatalogueWriterTest {
@@ -46,12 +47,12 @@ class CatalogueWriterTest {
List<ProductCatalogue> catalogues = new ArrayList<>();
ProductCatalogue catalogue1 = new ProductCatalogue("Catalogue 1", "Sample catalogue 1");
catalogue1.addProduct(createSampleProduct("Amazon", "ID 1"));
catalogue1.addProduct(createSampleProduct("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("Amazon", "ID 3"));
catalogue2.addProduct(createSampleProduct("eBay", "ID 4"));
catalogue2.addProduct(createSampleProduct(Webshop.Amazon, "ID 3"));
catalogue2.addProduct(createSampleProduct(Webshop.eBay, "ID 4"));
catalogues.add(catalogue1);
catalogues.add(catalogue2);
@@ -59,7 +60,7 @@ class CatalogueWriterTest {
return catalogues;
}
private Product createSampleProduct(String dataOrigin, String productId) {
private Product createSampleProduct(Webshop dataOrigin, String productId) {
Product product = new Product();
product.setDataOrigin(dataOrigin);
product.setProductId(productId);

View File

@@ -12,6 +12,7 @@ import org.mockito.MockitoAnnotations;
import de.rwu.easydrop.api.dto.ProductDTO;
import de.rwu.easydrop.data.connector.AbstractProductPersistence;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.Webshop;
class ProductWriterTest {
@@ -32,7 +33,7 @@ class ProductWriterTest {
// Arrange
Product product = new Product();
product.setProductId("12345");
product.setDataOrigin("Amazon");
product.setDataOrigin(Webshop.Amazon);
product.setCurrentPrice(9.99);
// Act
@@ -47,7 +48,7 @@ class ProductWriterTest {
// Arrange
Product product = new Product();
product.setProductId("");
product.setDataOrigin("Amazon");
product.setDataOrigin(Webshop.Amazon);
// Act and Assert
assertThrows(Exception.class, () -> productWriter.writeProductToPersistence(product));