1   package org.paneris.jammyjoes;
2   
3   import net.sourceforge.jwebunit.WebTestCase;
4   
5   import org.melati.LogicalDatabase;
6   import org.melati.poem.AccessToken;
7   import org.melati.poem.PoemTask;
8   import org.paneris.jammyjoes.model.JammyjoesDatabase;
9   import org.paneris.jammyjoes.model.ShopOrder;
10  import org.paneris.jammyjoes.model.ShopOrderItem;
11  import org.paneris.jammyjoes.shopping.ShoppingTrolley;
12  
13  import com.meterware.httpunit.PostMethodWebRequest;
14  import com.meterware.httpunit.WebRequest;
15  import com.meterware.httpunit.WebResponse;
16  
17  public class TestCaseFunctionalShopping extends WebTestCase {
18  
19    public void setUp() {
20      getTestContext().setBaseUrl("http://localhost");
21    }
22  
23    public void testEndToEndTelesalesOrder() throws Exception {
24      beginAt("/telesales/toys");
25      assertTextPresent("Keeping it Real");
26      submit();
27      assertTextPresent("Search for Toys");
28      submit();
29      assertTextPresent("Login");
30      setFormElement("field_login","telesales");
31      setFormElement("field_password","greece");
32      submit();
33      assertTextPresent("Transferring you ");
34      clickLinkWithText("here");
35      assertTextPresent("Step 2 - Check the ordered items");
36      clickLinkWithText("Proceed to Stage 3");
37      assertTextPresent("Step 3 - Enter Customer's Details");
38      setFormElement("trolley_name", "test name");
39      setFormElement("trolley_email", "test");
40      setFormElement("trolley_tel", "test");
41      setFormElement("trolley_deliveryName", "test");
42      setFormElement("trolley_deliveryaddress", "test");
43      setFormElement("trolley_town", "test");
44      setFormElement("trolley_postcode", "test");
45      setFormElement("trolley_country", "test");
46      setFormElement("field_zone", "0");
47      setFormElement("trolley_country", "test");
48      setFormElement("trolley_message", "test");
49      setFormElement("field_wrapping", "2");
50      submit();
51      assertTextPresent("Step 4 - Confirm The Order");
52      
53      final JammyjoesDatabase database = (JammyjoesDatabase) LogicalDatabase.getDatabase("jammyjoes");
54      database.inSession(AccessToken.root, new PoemTask() {
55  
56        public void run() {
57          ShopOrder order = (ShopOrder)database.getShopOrderTable().selection().nextElement();
58          assertEquals("test name", order.getName());
59          String amount = ShoppingTrolley.getValuePence(order.getAmount().doubleValue());
60          WebRequest request = new PostMethodWebRequest("http://localhost/jammyjoes/Trolley/jammyjoes/Paid?few90kjnr32908908kjfdsa98432kjlfds9009432lk90lk43209");
61          request.setParameter("amount",amount);
62          request.setParameter("orderref",order.getTroid()+"");
63          try {
64            WebResponse response = getTestContext().getWebClient().sendRequest(request);
65            assertTrue(response.getText().indexOf("Thanks for buying from Jammy Joes") > -1);
66          } catch (Exception e) {
67            throw new RuntimeException(e);
68          }
69          ShopOrderItem item = (ShopOrderItem)order.getItems().nextElement();
70          assertEquals(database.getStockTransactionTypeTable().getTelephoneSale(),item.getStocktransaction().getType());
71        }
72      });
73      
74    }
75  
76    public void testEndToEndOnlineOrder() throws Exception {
77      beginAt("/");
78      assertTextPresent("Find toys by using these search");
79      submit();
80      assertTextPresent("Search for Toys");
81      submit();
82      String url = getTestContext().getWebClient().getCurrentPage().getURL().toString();
83      String id = url.substring(url.lastIndexOf("/")+1,url.length());
84      assertTextPresent("Step 1 - Load up Your Shopping Basket");
85      setFormElement("trolleyitem_"+id+"_quantity", "9999");
86      submit();
87      assertTextNotPresent("Proceed to Step 2");
88      assertTextPresent("not currently have enough stock to fufill your order");
89      assertTextNotPresent("Your Details"); 
90      setFormElement("trolleyitem_"+id+"_quantity", "1");
91      submit();
92      clickLinkWithText("Proceed to Step 2");
93      assertTextPresent("Step 2 - Enter Your Details");
94      final String randomName = "" + Math.random();
95      setFormElement("trolley_name", randomName);
96      setFormElement("trolley_email", "test");
97      setFormElement("trolley_tel", "test");
98      setFormElement("trolley_deliveryName", "test");
99      setFormElement("trolley_deliveryaddress", "test");
100     setFormElement("trolley_town", "test");
101     setFormElement("trolley_postcode", "test");
102     setFormElement("trolley_country", "test");
103     setFormElement("field_zone", "0");
104     setFormElement("trolley_country", "test");
105     setFormElement("trolley_message", "test");
106     setFormElement("field_wrapping", "2");
107     submit();
108     assertTextPresent("Step 3 - Confirm Your Order");
109     
110     final JammyjoesDatabase database = (JammyjoesDatabase) LogicalDatabase.getDatabase("jammyjoes");
111     database.inSession(AccessToken.root, new PoemTask() {
112 
113       public void run() {
114         ShopOrder order = (ShopOrder)database.getShopOrderTable().selection().nextElement();
115         assertEquals(randomName, order.getName());
116         String amount = ShoppingTrolley.getValuePence(order.getAmount().doubleValue());
117         WebRequest request = new PostMethodWebRequest("http://localhost/jammyjoes/Trolley/jammyjoes/Paid?few90kjnr32908908kjfdsa98432kjlfds9009432lk90lk43209");
118         request.setParameter("amount",amount);
119         request.setParameter("orderref",order.getTroid()+"");
120         try {
121           WebResponse response = getTestContext().getWebClient().sendRequest(request);
122           assertTrue(response.getText().indexOf("Thanks for buying from Jammy Joes") > -1);
123         } catch (Exception e) {
124           throw new RuntimeException(e);
125         }
126         ShopOrderItem item = (ShopOrderItem)order.getItems().nextElement();
127         assertEquals(database.getStockTransactionTypeTable().getInternetSale(),item.getStocktransaction().getType());
128         beginAt("/");
129         assertTextPresent("Find toys by using these search options");
130         submit();
131         assertTextPresent("Search for Toys");
132         submit();
133         assertTextPresent("Step 1 - Load up Your Shopping Basket");
134         clickLinkWithText("Proceed to Step 2");
135         assertTextPresent("Step 2 - Enter Your Details");
136         String newRandomName = "" + Math.random();
137         setFormElement("trolley_name", randomName);
138         setFormElement("trolley_email", "test2");
139         setFormElement("trolley_tel", "test2");
140         setFormElement("trolley_deliveryName", "test2");
141         setFormElement("trolley_deliveryaddress", "test2");
142         setFormElement("trolley_town", "test2");
143         setFormElement("trolley_postcode", "test2");
144         setFormElement("trolley_country", "test2");
145         setFormElement("field_zone", "0");
146         setFormElement("trolley_country", "test2");
147         setFormElement("trolley_message", "test2");
148         setFormElement("field_wrapping", "2");
149         submit();
150         assertTextPresent("Step 3 - Confirm Your Order");
151         ShopOrder newOrder = (ShopOrder)database.getShopOrderTable().selection().nextElement();
152         assertEquals(randomName, newOrder.getName());
153         assertTrue(newOrder.getTroid().intValue() > order.getTroid().intValue());
154       }
155     });
156     
157   }
158 
159 }