package org.axway.grapes.server.core; import com.google.common.collect.Lists; import org.axway.grapes.server.GrapesTestUtils; import org.axway.grapes.server.db.RepositoryHandler; import org.axway.grapes.server.db.datamodel.DbProduct; import org.junit.Test; import org.mockito.ArgumentCaptor; import java.util.List; import static junit.framework.TestCase.*; import static org.mockito.Mockito.*; public class ProductHandlerTest { @Test public void storeANewProduct(){ final DbProduct product = new DbProduct(); product.setName("product1"); final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); final ProductHandler productHandler = new ProductHandler(repositoryHandler); Exception exception = null; try { productHandler.create(product); } catch(Exception e){ exception = e; } assertNull(exception); verify(repositoryHandler,times(1)).store(product); } @Test public void storeAProductThatAlreadyExist(){ final DbProduct product = new DbProduct(); product.setName("product1"); final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final ProductHandler productHandler = new ProductHandler(repositoryHandler); Exception exception = null; try { productHandler.create(product); } catch(Exception e){ exception = e; } assertNotNull(exception); verify(repositoryHandler,never()).store(product); } @Test public void getProductNames(){ final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); final ProductHandler productHandler = new ProductHandler(repositoryHandler); productHandler.getProductNames(); verify(repositoryHandler,times(1)).getProductNames(); } @Test public void getAnExistingProduct(){ final DbProduct product = new DbProduct(); product.setName("product1"); final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final ProductHandler productHandler = new ProductHandler(repositoryHandler); final DbProduct gotProduct = productHandler.getProduct(product.getName()); assertNotNull(gotProduct); assertEquals(product, gotProduct); } @Test public void getAProductThatDoesNotExist(){ final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); final ProductHandler productHandler = new ProductHandler(repositoryHandler); Exception exception = null; try { productHandler.getProduct("doesNotExist"); } catch(Exception e){ exception = e; } assertNotNull(exception); } @Test public void deleteAProduct(){ final DbProduct product = new DbProduct(); product.setName("product1"); final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final ProductHandler productHandler = new ProductHandler(repositoryHandler); productHandler.deleteProduct(product.getName()); verify(repositoryHandler, times(1)).deleteProduct(product.getName()); } @Test public void deleteAProductThatDoesNotExist(){ final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); final ProductHandler productHandler = new ProductHandler(repositoryHandler); Exception exception = null; try { productHandler.deleteProduct("doesNotExist"); } catch(Exception e){ exception = e; } assertNotNull(exception); } @Test public void setProductModules(){ final DbProduct product = new DbProduct(); product.setName("product1"); final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final ProductHandler productHandler = new ProductHandler(repositoryHandler); final List<String> moduleNames = Lists.newArrayList("module1", "module2", "module3"); productHandler.setProductModules(product.getName(), moduleNames); final ArgumentCaptor<DbProduct> captor = ArgumentCaptor.forClass(DbProduct.class); verify(repositoryHandler, times(1)).store(captor.capture()); assertEquals(moduleNames, captor.getValue().getModules()); } @Test public void setProductModulesForAProductThatDoesNotExist(){ final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); final ProductHandler productHandler = new ProductHandler(repositoryHandler); Exception exception = null; try { final List<String> moduleNames = Lists.newArrayList("module1", "module2", "module3"); productHandler.setProductModules("doesNotExist", moduleNames); } catch(Exception e){ exception = e; } assertNotNull(exception); } }