1 package org.paneris.jammyjoes.mvp;
2
3 import java.sql.Timestamp;
4 import java.util.Date;
5 import java.util.HashMap;
6 import java.util.LinkedList;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.Vector;
10
11 import junit.framework.TestCase;
12
13 import org.melati.poem.Selectable;
14 import org.paneris.jammyjoes.controller.MonthlyTimesliceFactory;
15 import org.paneris.jammyjoes.model.Graphable;
16 import org.paneris.jammyjoes.model.OrderStatus;
17
18 import com.mockobjects.dynamic.C;
19 import com.mockobjects.dynamic.Mock;
20
21 public class FufilledOrdersByMonthTest extends TestCase {
22
23 private static final Date SOMETIME_IN_AUGUST = new Date(1061525758061L);
24
25 private static final Date SOME_OTHERTIME_IN_SEPTEMBER = new Date(1062525658062L);
26
27 private static final Date SOMETIME_IN_SEPTEMBER = new Date(1064525758061L);
28
29 public void testPresenter() {
30
31 Mock contextControl = makeContext();
32 Context context = (Context) contextControl.proxy();
33
34 Presenter unit = new OrdersByMonthPresenter(null, context, null);
35 assertEquals(OrderSelection.class, unit.createSelection().getClass());
36 assertEquals(CollectingCommand.class, unit.createCommand().getClass());
37
38 contextControl.verify();
39
40 }
41
42 private Mock makeContext() {
43 Mock contextControl = new Mock(Context.class);
44 contextControl.expect("put", C.args(C.eq("months"), C.isA(Map.class)));
45 contextControl.expect("put", C.args(C.eq("max"), C.isA(TimesliceValue.class)));
46 contextControl.expect("put", C.args(C.eq("sorter"), C.isA(CollectionSorter.class)));
47 contextControl.expect("put", C
48 .args(C.eq("reversesorter"), C.isA(ReverseCollectionSorter.class)));
49 return contextControl;
50 }
51
52 public void testAllOrdersSelection() {
53
54 OrderStatus matchingOrderStatus = new OrderStatus();
55 List matchingOrderStatusList = new LinkedList();
56 matchingOrderStatusList.add(matchingOrderStatus);
57
58 Mock orderControllerOne = new Mock(Graphable.class);
59 orderControllerOne.expectAndReturn("hasStatus", C.isA(List.class), true);
60 Mock orderControllerTwo = new Mock(Graphable.class);
61 orderControllerTwo.expectAndReturn("hasStatus", C.isA(List.class), false);
62
63 Graphable expected = (Graphable) orderControllerOne.proxy();
64
65 Vector orders = new Vector();
66 orders.add(expected);
67 orders.add(orderControllerTwo.proxy());
68
69 Mock commandController = new Mock(Command.class);
70 commandController.expect("visit", expected);
71
72 Mock ordersTableController = new Mock(Selectable.class);
73 ordersTableController.expectAndReturn("selection", orders.elements());
74
75 Selection unit = new OrderSelection((Selectable) ordersTableController.proxy(),
76 matchingOrderStatusList, null, null, null);
77 unit.visitEach((Command) commandController.proxy());
78
79 ordersTableController.verify();
80 orderControllerOne.verify();
81 orderControllerTwo.verify();
82 commandController.verify();
83
84 }
85
86 public void testMonthAdaptor() {
87
88 EquatableComparable unit = new MonthAdaptor(SOMETIME_IN_SEPTEMBER);
89 EquatableComparable same = new MonthAdaptor(SOME_OTHERTIME_IN_SEPTEMBER);
90 EquatableComparable different = new MonthAdaptor(SOMETIME_IN_AUGUST);
91 EquatableComparable isNull = new MonthAdaptor(null);
92 assertTrue(unit.equals(same));
93 assertTrue(!unit.equals(different));
94 assertTrue(!unit.equals(isNull));
95 assertTrue(!unit.equals(null));
96 assertTrue(!unit.equals(new Object()));
97 assertTrue(!isNull.equals(unit));
98 assertEquals("", isNull.toString());
99 assertEquals(0, isNull.hashCode());
100 assertEquals(-1, different.compareTo(unit));
101 assertEquals(1, unit.compareTo(different));
102 assertEquals(0, unit.compareTo(same));
103 }
104
105 public void testCollectingCommand() {
106 Double expectedValue = new Double(12);
107 TimesliceValue expectedSeptember = new TimesliceValue(new MonthAdaptor(SOMETIME_IN_SEPTEMBER),
108 new Double(expectedValue.doubleValue() * 2));
109 TimesliceValue expectedAugust = new TimesliceValue(new MonthAdaptor(SOMETIME_IN_AUGUST),
110 expectedValue);
111
112 Map bucket = new HashMap();
113 TimesliceValue max = new TimesliceValue(null, 0);
114
115 Command unit = new CollectingCommand(bucket, max, new MonthlyTimesliceFactory(null), new AffiliateTotals());
116
117 Mock orderControlOne = new Mock(Graphable.class);
118 orderControlOne.expectAndReturn("getDate", new Timestamp(SOMETIME_IN_SEPTEMBER.getTime()));
119 orderControlOne.expectAndReturn("getAmountUK", expectedValue);
120 unit.visit(orderControlOne.proxy());
121
122 Mock orderControlTwo = new Mock(Graphable.class);
123 orderControlTwo
124 .expectAndReturn("getDate", new Timestamp(SOME_OTHERTIME_IN_SEPTEMBER.getTime()));
125 orderControlTwo.expectAndReturn("getAmountUK", expectedValue);
126 unit.visit(orderControlTwo.proxy());
127
128 Mock orderControlThree = new Mock(Graphable.class);
129 orderControlThree.expectAndReturn("getDate", new Timestamp(SOMETIME_IN_AUGUST.getTime()));
130 orderControlThree.expectAndReturn("getAmountUK", expectedValue);
131 unit.visit(orderControlThree.proxy());
132
133 assertEquals(expectedSeptember, bucket.get(new MonthAdaptor(SOMETIME_IN_SEPTEMBER)));
134 assertEquals(expectedAugust, bucket.get(new MonthAdaptor(SOMETIME_IN_AUGUST)));
135 assertEquals(expectedSeptember, max);
136 orderControlOne.verify();
137 }
138
139 public void testMonthValue() {
140 TimesliceValue value = new TimesliceValue(new MonthAdaptor(SOMETIME_IN_AUGUST), 12);
141 TimesliceValue unit = new TimesliceValue(new MonthAdaptor(SOMETIME_IN_SEPTEMBER), 23);
142 unit.copyInto(value);
143 assertEquals(unit, value);
144 assertEquals("09/2003", unit.getDisplayMonth());
145 assertEquals(new Double(23), unit.getDisplayValue());
146 }
147
148 public void testMonthValueCompare() {
149
150 }
151
152 public void testHandleInteraction() {
153 Mock contextControl = makeContext();
154 Mock selectionController = new Mock(Selection.class);
155 Mock commandController = new Mock(Command.class);
156 Command command = (Command) commandController.proxy();
157 selectionController.expect("visitEach", command);
158 Presenter unit = new OrdersByMonthPresenter(null, (Context) contextControl.proxy(), null);
159 unit.handleInteraction((Selection) selectionController.proxy(), command);
160 selectionController.verify();
161 }
162
163 }