package com.ibatis.jpetstore.presentation;
import org.apache.struts.beanaction.ActionContext;
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
import com.ibatis.jpetstore.domain.Cart;
import com.ibatis.jpetstore.domain.CartItem;
import com.ibatis.jpetstore.domain.Item;
import com.ibatis.jpetstore.service.CatalogService;
public class CartBeanTest extends MockObjectTestCase {
public void testShouldSuccessfullyReturnFromViewCart() {
Mock catalogServiceMock = mock(CatalogService.class);
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
assertEquals(AbstractBean.SUCCESS, bean.viewCart());
}
public void testShouldSwitchPagesBackAndForth() {
Mock catalogServiceMock = mock(CatalogService.class);
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
assertEquals(AbstractBean.SUCCESS, bean.viewCart());
Cart cart = new Cart();
for (int i = 0; i < cart.getCartItemList().getPageSize() * 2; i++) {
cart.getCartItemList().add(new Item());
}
bean.setCart(cart);
bean.setPageDirection("next");
assertEquals(AbstractBean.SUCCESS, bean.switchCartPage());
assertEquals(1, cart.getCartItemList().getPageIndex());
bean.setPageDirection("previous");
assertEquals(AbstractBean.SUCCESS, bean.switchCartPage());
assertEquals(0, cart.getCartItemList().getPageIndex());
}
public void testShouldClearAllCartData() {
Mock catalogServiceMock = mock(CatalogService.class);
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
Cart cart = new Cart();
bean.setCart(cart);
bean.setWorkingItemId("not null");
bean.setPageDirection("not null");
bean.clear();
assertFalse(cart == bean.getCart());
assertNull(bean.getWorkingItemId());
assertNull(bean.getPageDirection());
}
public void testShouldAddItemToCart() {
Mock catalogServiceMock = mock(CatalogService.class);
catalogServiceMock.expects(atLeastOnce()).method("isItemInStock").with(NOT_NULL).will(returnValue(true));
Item item = new Item();
item.setItemId("AnID");
catalogServiceMock.expects(atLeastOnce()).method("getItem").with(NOT_NULL).will(returnValue(item));
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
bean.setWorkingItemId("SomeItem");
assertEquals(AbstractBean.SUCCESS, bean.addItemToCart());
CartItem cartItem = (CartItem) bean.getCart().getCartItemList().get(0);
assertEquals(1, cartItem.getQuantity());
assertEquals(AbstractBean.SUCCESS, bean.addItemToCart());
assertEquals(2, cartItem.getQuantity());
}
public void testShouldFailToRemoveItemFromCart() {
Mock catalogServiceMock = mock(CatalogService.class);
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
bean.setWorkingItemId("nonexistant");
assertEquals(AbstractBean.FAILURE, bean.removeItemFromCart());
}
public void testShouldRemoveItemFromCart() {
Mock catalogServiceMock = mock(CatalogService.class);
catalogServiceMock.expects(atLeastOnce()).method("isItemInStock").with(NOT_NULL).will(returnValue(true));
Item item = new Item();
item.setItemId("AnID");
catalogServiceMock.expects(atLeastOnce()).method("getItem").with(NOT_NULL).will(returnValue(item));
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
bean.setWorkingItemId("AnID");
bean.addItemToCart();
assertEquals(AbstractBean.SUCCESS, bean.removeItemFromCart());
}
public void testShouldUpdateCartQuantities() {
Mock catalogServiceMock = mock(CatalogService.class);
catalogServiceMock.expects(atLeastOnce()).method("isItemInStock").with(NOT_NULL).will(returnValue(true));
Item item = new Item();
item.setItemId("AnID");
catalogServiceMock.expects(atLeastOnce()).method("getItem").with(NOT_NULL).will(returnValue(item));
CartBean bean = new CartBean((CatalogService) catalogServiceMock.proxy());
bean.setWorkingItemId("AnID");
bean.addItemToCart();
ActionContext.getActionContext().getParameterMap().put("AnID", "5");
assertEquals(AbstractBean.SUCCESS, bean.updateCartQuantities());
CartItem cartItem = (CartItem) bean.getCart().getCartItemList().get(0);
assertEquals(5, cartItem.getQuantity());
}
}