package com.ibatis.jpetstore.presentation;
import java.util.List;
import java.util.Map;
import org.apache.struts.beanaction.ActionContext;
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
import com.ibatis.common.util.PaginatedArrayList;
import com.ibatis.jpetstore.domain.Account;
import com.ibatis.jpetstore.domain.DomainFixture;
import com.ibatis.jpetstore.domain.Order;
import com.ibatis.jpetstore.service.AccountService;
import com.ibatis.jpetstore.service.CatalogService;
import com.ibatis.jpetstore.service.OrderService;
public class OrderBeanTest extends MockObjectTestCase {
@Override
protected void setUp() throws Exception {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
sessionMap.clear();
}
@Override
protected void tearDown() throws Exception {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
sessionMap.clear();
}
public void testShouldGetCardTypes() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
List cardList = bean.getCreditCardTypes();
assertEquals(3, cardList.size());
}
public void testListListOrdersByUsername() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
PaginatedArrayList orderList = new PaginatedArrayList(5);
orderList.add(new Order());
orderList.add(new Order());
orderList.add(new Order());
orderServiceMock.expects(once()).method("getOrdersByUsername").with(NOT_NULL).will(returnValue(orderList));
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = new AccountBean();
accountBean.setUsername("not null");
sessionMap.put("accountBean", accountBean);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
assertEquals(AbstractBean.SUCCESS, bean.listOrders());
assertEquals(3, bean.getOrderList().size());
}
public void testShouldSwitchOrderListPagesBackAndForth() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
PaginatedArrayList orderList = new PaginatedArrayList(2);
orderList.add(new Order());
orderList.add(new Order());
orderList.add(new Order());
orderServiceMock.expects(once()).method("getOrdersByUsername").with(NOT_NULL).will(returnValue(orderList));
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = new AccountBean();
accountBean.setUsername("not null");
sessionMap.put("accountBean", accountBean);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
bean.listOrders();
bean.setPageDirection("next");
bean.switchOrderPage();
assertEquals(1, bean.getOrderList().getPageIndex());
bean.setPageDirection("previous");
bean.switchOrderPage();
assertEquals(0, bean.getOrderList().getPageIndex());
}
public void testShouldResetShippingAddressRequirement() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
bean.setShippingAddressRequired(true);
bean.reset();
assertFalse(bean.isShippingAddressRequired());
}
public void testShouldClearAllFields() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
Order order = new Order();
bean.setOrder(order);
bean.setShippingAddressRequired(true);
bean.setOrderId(4);
bean.setConfirmed(true);
bean.setPageDirection("not null");
bean.clear();
assertFalse(bean.getOrder() == order);
assertFalse(bean.isShippingAddressRequired());
assertEquals(0, bean.getOrderId());
assertFalse(bean.isConfirmed());
assertNull(bean.getPageDirection());
}
public void testShouldSuccessfullyViewOrder() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = new AccountBean();
accountBean.setUsername("user");
sessionMap.put("accountBean", accountBean);
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
Order order = new Order();
order.setUsername("user");
orderServiceMock.expects(once()).method("getOrder").with(NOT_NULL).will(returnValue(order));
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
assertEquals(AbstractBean.SUCCESS, bean.viewOrder());
assertEquals(order, bean.getOrder());
}
public void testShouldFailToViewOrderDueToMismatchedUsername() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = new AccountBean();
accountBean.setUsername("not proper user");
sessionMap.put("accountBean", accountBean);
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
Order order = new Order();
order.setUsername("user");
orderServiceMock.expects(once()).method("getOrder").with(NOT_NULL).will(returnValue(order));
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
assertEquals(AbstractBean.FAILURE, bean.viewOrder());
assertNull(bean.getOrder());
}
public void testShouldForceSignonWhenAttemptingToCreateANewOrderWithoutBeingSignedIn() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
assertEquals(AbstractBean.SIGNON, bean.newOrderForm());
}
public void testShouldFailDueToAMissingCart() {
Account account = DomainFixture.newTestAccount();
Mock accountServiceMock = mock(AccountService.class);
accountServiceMock.expects(once()).method("getAccount").with(NOT_NULL, NOT_NULL).will(returnValue(account));
Mock catalogServiceMock = mock(CatalogService.class);
catalogServiceMock.expects(once()).method("getProductListByCategory").with(NOT_NULL)
.will(returnValue(new PaginatedArrayList(5)));
AccountBean accountBean = new AccountBean((AccountService) accountServiceMock.proxy(),
(CatalogService) catalogServiceMock.proxy());
accountBean.setAccount(account);
accountBean.signon();
Map sessionMap = ActionContext.getActionContext().getSessionMap();
sessionMap.put("accountBean", accountBean);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
assertEquals(AbstractBean.FAILURE, bean.newOrderForm());
}
public void testSuccessfullyViewCart() {
Account account = DomainFixture.newTestAccount();
Mock accountServiceMock = mock(AccountService.class);
accountServiceMock.expects(once()).method("getAccount").with(NOT_NULL, NOT_NULL).will(returnValue(account));
Mock catalogServiceMock = mock(CatalogService.class);
catalogServiceMock.expects(once()).method("getProductListByCategory").with(NOT_NULL)
.will(returnValue(new PaginatedArrayList(5)));
AccountBean accountBean = new AccountBean((AccountService) accountServiceMock.proxy(),
(CatalogService) catalogServiceMock.proxy());
accountBean.setAccount(account);
accountBean.signon();
Map sessionMap = ActionContext.getActionContext().getSessionMap();
sessionMap.put("accountBean", accountBean);
sessionMap.put("cartBean", new CartBean());
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
assertEquals(AbstractBean.SUCCESS, bean.newOrderForm());
}
public void testShouldRequireShippingAddressBeforeNewOrder() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
bean.setShippingAddressRequired(true);
assertEquals(AbstractBean.SHIPPING, bean.newOrder());
}
public void testShouldConfirmationBeforeNewOrder() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
bean.setConfirmed(false);
assertEquals(AbstractBean.CONFIRM, bean.newOrder());
}
public void testShouldFaileDueToMissingNewOrder() {
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
bean.setConfirmed(true);
bean.setOrder(null);
assertEquals(AbstractBean.FAILURE, bean.newOrder());
}
public void testShouldSuccessfullyCreateNewOrder() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
sessionMap.put("cartBean", new CartBean());
Mock accountServiceMock = mock(AccountService.class);
Mock orderServiceMock = mock(OrderService.class);
orderServiceMock.expects(once()).method("insertOrder").with(NOT_NULL);
OrderBean bean = new OrderBean((AccountService) accountServiceMock.proxy(), (OrderService) orderServiceMock.proxy());
bean.setConfirmed(true);
assertEquals(AbstractBean.SUCCESS, bean.newOrder());
}
}