@Test public void testAddProduct() throws Exception { ProductBagApi bags = new ProductBagApi(new MockContext()); String bagString = bags.toString(); // make sure error conditions don't mutate the bags boolean result = bags.addProduct(null, new Product.Builder("product name", "product sku", 1).build()); assertFalse(result); assertEquals(bagString, bags.toString()); assertEquals(0, bags.getBags().size()); result = bags.addProduct("bag name", null); // add an empty bag assertTrue(result); assertNotEquals(bagString, bags.toString()); assertEquals(1, bags.getBags().size()); // now test a simple add of a bag that doesn't exist result = bags.addProduct( "some bag name", new Product.Builder("product name", "product sku", 1).build()); assertTrue(result); assertEquals(2, bags.getBags().size()); assertEquals("some bag name", bags.findBag("some bag name").getName()); assertNotEquals(bagString, bags.toString()); bagString = bags.toString(); // adding with an existing bag shouldn't create a whole new bag bags.addProduct( "some bag name", new Product.Builder("product name 2", "product sku 2", 1).build()); assertEquals(2, bags.getBags().size()); assertEquals("product name 2", bags.getBags().get(1).getProducts().get(1).getName()); assertNotEquals(bagString, bags.toString()); }
@Test public void testRemoveProduct() throws Exception { ProductBagApi bags = new ProductBagApi(new MockContext()); // error scenarios assertFalse(bags.removeProduct(null, new Product.Builder("name", "sku", 1.0).build())); assertFalse(bags.removeProduct("whatever", new Product.Builder("name", "sku", 1.0).build())); assertFalse(bags.removeProduct("whatever", null)); // remove a product that doesn't exist Product product = new Product.Builder("product name", "product sku", 1).build(); Product product2 = new Product.Builder("product name 2", "product sku 2", 1).build(); bags.addProduct("some bag name", product); ProductBag bag = bags.findBag("some bag name"); assertEquals("some bag name", bag.getName()); assertEquals(1, bag.getProducts().size()); String bagString = bags.toString(); assertFalse(bags.removeProduct("some bag name 2", product)); assertFalse(bags.removeProduct("some bag name", product2)); assertEquals(bagString, bags.toString()); assertTrue(bags.removeProduct("some bag name", product)); assertEquals(1, bags.getBags().size()); assertEquals(0, bag.getProducts().size()); assertNotEquals(bagString, bags.toString()); }