|
|
@@ -3,6 +3,7 @@ package se.citerus.dddsample.tracking.core.domain.model.cargo;
|
|
3
|
3
|
import junit.framework.TestCase;
|
|
4
|
4
|
import static se.citerus.dddsample.tracking.core.application.util.DateTestUtil.toDate;
|
|
5
|
5
|
import static se.citerus.dddsample.tracking.core.domain.model.cargo.RoutingStatus.*;
|
|
|
6
|
+import static se.citerus.dddsample.tracking.core.domain.model.cargo.TransportStatus.IN_PORT;
|
|
6
|
7
|
import static se.citerus.dddsample.tracking.core.domain.model.cargo.TransportStatus.NOT_RECEIVED;
|
|
7
|
8
|
import static se.citerus.dddsample.tracking.core.domain.model.handling.HandlingEvent.Type.*;
|
|
8
|
9
|
import se.citerus.dddsample.tracking.core.domain.model.location.Location;
|
|
|
@@ -78,6 +79,22 @@ public class CargoTest extends TestCase {
|
|
78
|
79
|
assertEquals(ROUTED, cargo.routingStatus());
|
|
79
|
80
|
}
|
|
80
|
81
|
|
|
|
82
|
+ public void testOutOrderHandling() throws Exception {
|
|
|
83
|
+ final Cargo cargo = setUpCargoWithItinerary(STOCKHOLM, HAMBURG, MELBOURNE);
|
|
|
84
|
+
|
|
|
85
|
+ cargo.handled(HandlingActivity.loadedOnto(crazyVoyage).in(STOCKHOLM), toDate("2009-10-01"));
|
|
|
86
|
+ cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage), toDate("2009-10-01"));
|
|
|
87
|
+ cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage), toDate("2009-10-02"));
|
|
|
88
|
+ cargo.handled(new HandlingActivity(UNLOAD, HONGKONG, crazyVoyage), toDate("2009-10-04"));
|
|
|
89
|
+ assertEquals(cargo.transportStatus(), IN_PORT);
|
|
|
90
|
+ assertEquals(cargo.lastKnownLocation(), HONGKONG);
|
|
|
91
|
+
|
|
|
92
|
+ // Out of order handling, does not affect state of cargo
|
|
|
93
|
+ cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage), toDate("2009-10-03"));
|
|
|
94
|
+ assertEquals(IN_PORT, cargo.transportStatus());
|
|
|
95
|
+ assertEquals(HONGKONG, cargo.lastKnownLocation());
|
|
|
96
|
+ }
|
|
|
97
|
+
|
|
81
|
98
|
public void testlastKnownLocationUnknownWhenNoEvents() throws Exception {
|
|
82
|
99
|
Cargo cargo = new Cargo(new TrackingId("XYZ"), new RouteSpecification(STOCKHOLM, MELBOURNE, new Date()));
|
|
83
|
100
|
|
|
|
@@ -127,7 +144,7 @@ public class CargoTest extends TestCase {
|
|
127
|
144
|
assertFalse(cargo.isReadyToClaim());
|
|
128
|
145
|
|
|
129
|
146
|
// Adding an event unrelated to unloading at final destination
|
|
130
|
|
- cargo.handled(new HandlingActivity(RECEIVE, HANGZOU));
|
|
|
147
|
+ cargo.handled(new HandlingActivity(RECEIVE, HANGZOU), new Date());
|
|
131
|
148
|
assertFalse(cargo.isReadyToClaim());
|
|
132
|
149
|
|
|
133
|
150
|
Voyage voyage = new Voyage.Builder(new VoyageNumber("0123"), HANGZOU).
|
|
|
@@ -135,59 +152,59 @@ public class CargoTest extends TestCase {
|
|
135
|
152
|
build();
|
|
136
|
153
|
|
|
137
|
154
|
// Adding an unload event, but not at the final destination
|
|
138
|
|
- cargo.handled(new HandlingActivity(UNLOAD, TOKYO, voyage));
|
|
|
155
|
+ cargo.handled(new HandlingActivity(UNLOAD, TOKYO, voyage), new Date());
|
|
139
|
156
|
assertFalse(cargo.isReadyToClaim());
|
|
140
|
157
|
|
|
141
|
158
|
// Adding an event in the final destination, but not unload
|
|
142
|
|
- cargo.handled(new HandlingActivity(CUSTOMS, NEWYORK));
|
|
|
159
|
+ cargo.handled(new HandlingActivity(CUSTOMS, NEWYORK), new Date());
|
|
143
|
160
|
assertFalse(cargo.isReadyToClaim());
|
|
144
|
161
|
|
|
145
|
162
|
// Finally, cargo is unloaded at final destination
|
|
146
|
|
- cargo.handled(new HandlingActivity(UNLOAD, NEWYORK, voyage));
|
|
|
163
|
+ cargo.handled(new HandlingActivity(UNLOAD, NEWYORK, voyage), new Date());
|
|
147
|
164
|
assertTrue(cargo.isReadyToClaim());
|
|
148
|
165
|
}
|
|
149
|
166
|
|
|
150
|
167
|
private Cargo populateCargoReceivedStockholm() throws Exception {
|
|
151
|
168
|
final Cargo cargo = setUpCargoWithItinerary(STOCKHOLM, HAMBURG, MELBOURNE);
|
|
152
|
|
- cargo.handled(new HandlingActivity(RECEIVE, STOCKHOLM));
|
|
|
169
|
+ cargo.handled(new HandlingActivity(RECEIVE, STOCKHOLM), new Date());
|
|
153
|
170
|
return cargo;
|
|
154
|
171
|
}
|
|
155
|
172
|
|
|
156
|
173
|
private Cargo populateCargoClaimedMelbourne() throws Exception {
|
|
157
|
174
|
final Cargo cargo = populateCargoOffMelbourne();
|
|
158
|
175
|
|
|
159
|
|
- cargo.handled(new HandlingActivity(CLAIM, MELBOURNE));
|
|
|
176
|
+ cargo.handled(new HandlingActivity(CLAIM, MELBOURNE), new Date());
|
|
160
|
177
|
return cargo;
|
|
161
|
178
|
}
|
|
162
|
179
|
|
|
163
|
180
|
private Cargo populateCargoOffHongKong() throws Exception {
|
|
164
|
181
|
final Cargo cargo = setUpCargoWithItinerary(STOCKHOLM, HAMBURG, MELBOURNE);
|
|
165
|
182
|
|
|
166
|
|
- cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage));
|
|
167
|
|
- cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage));
|
|
168
|
|
- cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage));
|
|
169
|
|
- cargo.handled(new HandlingActivity(UNLOAD, HONGKONG, crazyVoyage));
|
|
|
183
|
+ cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage), new Date());
|
|
|
184
|
+ cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage), new Date());
|
|
|
185
|
+ cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage), new Date());
|
|
|
186
|
+ cargo.handled(new HandlingActivity(UNLOAD, HONGKONG, crazyVoyage), new Date());
|
|
170
|
187
|
return cargo;
|
|
171
|
188
|
}
|
|
172
|
189
|
|
|
173
|
190
|
private Cargo populateCargoOnHamburg() throws Exception {
|
|
174
|
191
|
final Cargo cargo = setUpCargoWithItinerary(STOCKHOLM, HAMBURG, MELBOURNE);
|
|
175
|
192
|
|
|
176
|
|
- cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage));
|
|
177
|
|
- cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage));
|
|
178
|
|
- cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage));
|
|
|
193
|
+ cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage), new Date());
|
|
|
194
|
+ cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage), new Date());
|
|
|
195
|
+ cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage), new Date());
|
|
179
|
196
|
return cargo;
|
|
180
|
197
|
}
|
|
181
|
198
|
|
|
182
|
199
|
private Cargo populateCargoOffMelbourne() throws Exception {
|
|
183
|
200
|
final Cargo cargo = setUpCargoWithItinerary(STOCKHOLM, HAMBURG, MELBOURNE);
|
|
184
|
201
|
|
|
185
|
|
- cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage));
|
|
186
|
|
- cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage));
|
|
187
|
|
- cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage));
|
|
188
|
|
- cargo.handled(new HandlingActivity(UNLOAD, HONGKONG, crazyVoyage));
|
|
189
|
|
- cargo.handled(new HandlingActivity(LOAD, HONGKONG, crazyVoyage));
|
|
190
|
|
- cargo.handled(new HandlingActivity(UNLOAD, MELBOURNE, crazyVoyage));
|
|
|
202
|
+ cargo.handled(new HandlingActivity(LOAD, STOCKHOLM, crazyVoyage), new Date());
|
|
|
203
|
+ cargo.handled(new HandlingActivity(UNLOAD, HAMBURG, crazyVoyage), new Date());
|
|
|
204
|
+ cargo.handled(new HandlingActivity(LOAD, HAMBURG, crazyVoyage), new Date());
|
|
|
205
|
+ cargo.handled(new HandlingActivity(UNLOAD, HONGKONG, crazyVoyage), new Date());
|
|
|
206
|
+ cargo.handled(new HandlingActivity(LOAD, HONGKONG, crazyVoyage), new Date());
|
|
|
207
|
+ cargo.handled(new HandlingActivity(UNLOAD, MELBOURNE, crazyVoyage), new Date());
|
|
191
|
208
|
|
|
192
|
209
|
return cargo;
|
|
193
|
210
|
}
|
|
|
@@ -203,30 +220,30 @@ public class CargoTest extends TestCase {
|
|
203
|
220
|
assertFalse(cargo.isMisdirected());
|
|
204
|
221
|
|
|
205
|
222
|
//Happy path
|
|
206
|
|
- cargo.handled(new HandlingActivity(RECEIVE, SHANGHAI));
|
|
207
|
|
- cargo.handled(new HandlingActivity(LOAD, SHANGHAI, crazyVoyage));
|
|
208
|
|
- cargo.handled(new HandlingActivity(UNLOAD, ROTTERDAM, crazyVoyage));
|
|
209
|
|
- cargo.handled(new HandlingActivity(LOAD, ROTTERDAM, crazyVoyage));
|
|
210
|
|
- cargo.handled(new HandlingActivity(UNLOAD, GOTHENBURG, crazyVoyage));
|
|
211
|
|
- cargo.handled(new HandlingActivity(CLAIM, GOTHENBURG));
|
|
212
|
|
- cargo.handled(new HandlingActivity(CUSTOMS, GOTHENBURG));
|
|
|
223
|
+ cargo.handled(new HandlingActivity(RECEIVE, SHANGHAI), new Date());
|
|
|
224
|
+ cargo.handled(new HandlingActivity(LOAD, SHANGHAI, crazyVoyage), new Date());
|
|
|
225
|
+ cargo.handled(new HandlingActivity(UNLOAD, ROTTERDAM, crazyVoyage), new Date());
|
|
|
226
|
+ cargo.handled(new HandlingActivity(LOAD, ROTTERDAM, crazyVoyage), new Date());
|
|
|
227
|
+ cargo.handled(new HandlingActivity(UNLOAD, GOTHENBURG, crazyVoyage), new Date());
|
|
|
228
|
+ cargo.handled(new HandlingActivity(CLAIM, GOTHENBURG), new Date());
|
|
|
229
|
+ cargo.handled(new HandlingActivity(CUSTOMS, GOTHENBURG), new Date());
|
|
213
|
230
|
assertFalse(cargo.isMisdirected());
|
|
214
|
231
|
|
|
215
|
232
|
//Try a couple of failing ones
|
|
216
|
233
|
|
|
217
|
234
|
cargo = setUpCargoWithItinerary(SHANGHAI, ROTTERDAM, GOTHENBURG);
|
|
218
|
235
|
|
|
219
|
|
- cargo.handled(new HandlingActivity(RECEIVE, HANGZOU));
|
|
|
236
|
+ cargo.handled(new HandlingActivity(RECEIVE, HANGZOU), new Date());
|
|
220
|
237
|
assertTrue(cargo.isMisdirected());
|
|
221
|
238
|
|
|
222
|
239
|
|
|
223
|
240
|
|
|
224
|
241
|
cargo = setUpCargoWithItinerary(SHANGHAI, ROTTERDAM, GOTHENBURG);
|
|
225
|
242
|
|
|
226
|
|
- cargo.handled(new HandlingActivity(RECEIVE, SHANGHAI));
|
|
227
|
|
- cargo.handled(new HandlingActivity(LOAD, SHANGHAI, crazyVoyage));
|
|
228
|
|
- cargo.handled(new HandlingActivity(UNLOAD, ROTTERDAM, crazyVoyage));
|
|
229
|
|
- cargo.handled(new HandlingActivity(CLAIM, ROTTERDAM));
|
|
|
243
|
+ cargo.handled(new HandlingActivity(RECEIVE, SHANGHAI), new Date());
|
|
|
244
|
+ cargo.handled(new HandlingActivity(LOAD, SHANGHAI, crazyVoyage), new Date());
|
|
|
245
|
+ cargo.handled(new HandlingActivity(UNLOAD, ROTTERDAM, crazyVoyage), new Date());
|
|
|
246
|
+ cargo.handled(new HandlingActivity(CLAIM, ROTTERDAM), new Date());
|
|
230
|
247
|
|
|
231
|
248
|
assertTrue(cargo.isMisdirected());
|
|
232
|
249
|
}
|