1   /*
2    * Copyright 2004 Carlos Sanchez.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package net.sf.oness.order.webapp.controller.action;
17  
18  import java.math.BigDecimal;
19  import java.util.ArrayList;
20  import java.util.Calendar;
21  import java.util.List;
22  
23  import net.sf.oness.common.model.temporal.Date;
24  import net.sf.oness.common.model.util.CollectionUtils;
25  import net.sf.oness.common.model.util.PaginatedList;
26  import net.sf.oness.common.webapp.controller.action.ActionUtils;
27  import net.sf.oness.common.webapp.controller.testing.JMockStrutsTestCase;
28  import net.sf.oness.order.model.bo.Order;
29  import net.sf.oness.order.model.bo.OrderItem;
30  import net.sf.oness.order.model.facade.OrderFacadeDelegate;
31  import net.sf.oness.order.model.to.OrderWithParty;
32  import net.sf.oness.order.webapp.controller.actionform.MasterActionForm;
33  import net.sf.oness.party.model.party.bo.Person;
34  
35  import org.jmock.Mock;
36  
37  /***
38   * @author Carlos Sanchez
39   * @version $Revision: 1.9 $
40   */
41  public class OrderActionTest extends JMockStrutsTestCase {
42  
43      private Mock mockFacade;
44  
45      private Order order;
46  
47      private OrderItem orderItem;
48  
49      private OrderWithParty orderWithParty;
50  
51      /***
52       * @see junit.framework.TestCase#setUp()
53       */
54      protected void setUp() throws Exception {
55          super.setUp();
56          mockFacade = new Mock(OrderFacadeDelegate.class);
57          getMockWebApplicationContext().expects(atLeastOnce()).method("getBean")
58                  .with(eq("orderFacadeDelegate")).will(
59                          returnValue(mockFacade.proxy()));
60  
61          order = new Order();
62          order.setType(new Integer(1));
63          order.setPartyId(new Long(1));
64          order.setDate(new Date(2004, Calendar.JANUARY, 1));
65          order.setItems(CollectionUtils.newList(new OrderItem()));
66  
67          orderItem = new OrderItem();
68          orderItem.setPrice(new BigDecimal("10"));
69          orderItem.setProductId(new Long(1));
70          orderItem.setQuantity(new BigDecimal("1"));
71  
72          orderWithParty = new OrderWithParty();
73          orderWithParty.setOrder(order);
74          orderWithParty.setParty(new Person());
75          orderWithParty.setItems(CollectionUtils.newList(orderItem));
76          orderWithParty.setAmount(new BigDecimal(0));
77      }
78  
79      final public void testCreate() {
80          /* setup mock object */
81          mockFacade.expects(once()).method("createOrder").with(eq(order)).will(
82                  returnValue(orderWithParty));
83  
84          create("01/01/2004");
85  
86          struts().verifyNoActionErrors();
87  
88          MasterActionForm form = (MasterActionForm) struts().getActionForm();
89          assertNotNull(form.getDateAsString());
90  
91          assertNotNull("request attribute", struts().getRequest().getAttribute(
92                  "order"));
93          assertNotNull("request attribute", struts().getRequest().getAttribute(
94                  "party"));
95          mockFacade.verify();
96      }
97  
98      /*** check with an incorrect date */
99      final public void testCreateWithIncorrectDate() {
100         getMockWebApplicationContext().reset();
101         mockFacade.verify();
102 
103         struts().clearRequestParameters();
104 
105         create("01/01/");
106 
107         struts().verifyActionErrors(new String[] { "errors.invalid" });
108     }
109 
110     final private void create(String dateAsString) {
111         Order returned = (Order) order.clone();
112         returned.setId(new Long(1));
113 
114         struts().setRequestPathInfo("/order/create");
115         struts().addRequestParameter("dateAsString", dateAsString);
116         struts().addRequestParameter("partyId", order.getPartyId().toString());
117         struts().addRequestParameter("type", "1");
118 
119         struts().actionPerform();
120     }
121 
122     final public void testUpdate() {
123         order.setId(new Long(1));
124         /* setup mock object */
125         mockFacade.expects(once()).method("updateOrder").with(eq(order),
126                 eq(CollectionUtils.newList(orderItem))).will(
127                 returnValue(orderWithParty));
128         struts().setRequestPathInfo("/order/update");
129         struts().addRequestParameter("id", order.getId().toString());
130         struts().addRequestParameter("dateAsString", "01/01/2004");
131         struts().addRequestParameter("partyId", order.getPartyId().toString());
132         struts().addRequestParameter("type", "1");
133         struts().addRequestParameter("itemsSize", "1");
134         struts().addRequestParameter("items[0].price", "10");
135         struts().addRequestParameter("items[0].productId", "1");
136         struts().addRequestParameter("items[0].quantity", "1");
137 
138         struts().actionPerform();
139         struts().verifyNoActionErrors();
140         struts().verifyForward("success");
141         mockFacade.verify();
142     }
143 
144     final public void testFind() throws Exception {
145         Order criteria = new Order();
146         criteria.setPartyId(new Long(1));
147         List list = new ArrayList(5);
148         for (int i = 0; i < 5; i++) {
149             list.add(criteria.clone());
150         }
151 
152         /* setup mock object */
153         mockFacade.expects(once()).method("findOrder").with(eq(criteria),
154                 eq(0), eq(5)).will(
155                 returnValue(new PaginatedList(list, 0, 5, 5)));
156         struts().setRequestPathInfo("/order/find");
157         struts().addRequestParameter("firstElement", "0");
158         struts().addRequestParameter("maxElements", "5");
159         struts().addRequestParameter("partyId",
160                 criteria.getPartyId().toString());
161         struts().actionPerform();
162         struts().verifyForward("success");
163         struts().verifyNoActionErrors();
164 
165         PaginatedList results = (PaginatedList) struts().getRequest()
166                 .getAttribute(ActionUtils.RESULTS_ATTRIBUTE_NAME);
167 
168         assertEquals(list.size(), results.size());
169 
170         mockFacade.verify();
171     }
172 
173     final public void testShow() {
174         order.setId(new Long(1));
175 
176         /* setup mock object */
177         mockFacade.expects(once()).method("findOrderWithDetails").with(
178                 eq(new Long(1))).will(returnValue(orderWithParty));
179         struts().setRequestPathInfo("/order/show");
180         struts().addRequestParameter("id", "1");
181         struts().actionPerform();
182         struts().verifyForward("success");
183         struts().verifyNoActionErrors();
184 
185         assertNotNull("request attribute", struts().getRequest().getAttribute(
186                 "order"));
187         assertNotNull("request attribute", struts().getRequest().getAttribute(
188                 "amount"));
189         mockFacade.verify();
190     }
191 
192     final public void testEdit() {
193         mockFacade.expects(once()).method("findOrderWithDetails").with(
194                 eq(new Long(1))).will(returnValue(orderWithParty));
195         struts().setRequestPathInfo("/order/edit");
196         struts().addRequestParameter("id", "1");
197         struts().actionPerform();
198         struts().verifyForward("success");
199         struts().verifyNoActionErrors();
200 
201         MasterActionForm form = (MasterActionForm) struts().getActionForm();
202         assertNotNull(form.getDateAsString());
203 
204         mockFacade.verify();
205     }
206 
207     public void testDelete() {
208         mockFacade.expects(once()).method("deleteOrder").with(eq(new Long(1)));
209         struts().setRequestPathInfo("/order/delete");
210         struts().addRequestParameter("id", "1");
211         struts().actionPerform();
212         struts().verifyForward("success");
213         struts().verifyNoActionErrors();
214         mockFacade.verify();
215     }
216 
217 }