use of org.qi4j.sample.dcicargo.sample_a.data.shipping.location.Location in project qi4j-sdk by Qi4j.
the class BookNewCargoTest method step_2_CreateNewCargo.
@Test
public void step_2_CreateNewCargo() throws Exception {
UnitOfWork uow = module.currentUnitOfWork();
Location HONGKONG = uow.get(Location.class, CNHKG.code().get());
Location STOCKHOLM = uow.get(Location.class, SESTO.code().get());
Cargos CARGOS = uow.get(Cargos.class, CargosEntity.CARGOS_ID);
// Create cargo with valid input from customer
TrackingId trackingId = new BookNewCargo(CARGOS, HONGKONG, STOCKHOLM, day(17)).book();
// Retrieve created cargo from store
Cargo cargo = uow.get(Cargo.class, trackingId.id().get());
// Test cargo data
assertThat(cargo.trackingId().get(), is(equalTo(trackingId)));
assertThat(cargo.origin().get(), is(equalTo(HONGKONG)));
// Test route specification
assertThat(cargo.routeSpecification().get().destination().get(), is(equalTo(STOCKHOLM)));
// day(17) here is calculated a few milliseconds after initial day(17), so it will be later...
assertThat(cargo.routeSpecification().get().arrivalDeadline().get(), equalTo(day(17)));
// (Itinerary is not assigned yet)
// Test derived delivery snapshot
Delivery delivery = cargo.delivery().get();
// TODAY is set first
assertThat(delivery.timestamp().get().after(TODAY), is(equalTo(true)));
assertThat(delivery.routingStatus().get(), is(equalTo(RoutingStatus.NOT_ROUTED)));
assertThat(delivery.transportStatus().get(), is(equalTo(TransportStatus.NOT_RECEIVED)));
assertThat(delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is(equalTo(HandlingEventType.RECEIVE)));
assertThat(delivery.nextExpectedHandlingEvent().get().location().get(), is(equalTo(HONGKONG)));
assertThat(delivery.nextExpectedHandlingEvent().get().voyage().get(), is(equalTo(null)));
assertThat(delivery.lastHandlingEvent().get(), is(equalTo(null)));
assertThat(delivery.lastKnownLocation().get(), is(equalTo(null)));
assertThat(delivery.currentVoyage().get(), is(equalTo(null)));
// Is set when itinerary is assigned
assertThat(delivery.eta().get(), is(equalTo(null)));
assertThat(delivery.isMisdirected().get(), is(equalTo(false)));
assertThat(delivery.isUnloadedAtDestination().get(), is(equalTo(false)));
}
use of org.qi4j.sample.dcicargo.sample_a.data.shipping.location.Location in project qi4j-sdk by Qi4j.
the class BookNewCargoTest method step_3_CalculatePossibleRoutes.
@Test
public void step_3_CalculatePossibleRoutes() throws Exception {
UnitOfWork uow = module.currentUnitOfWork();
Location HONGKONG = uow.get(Location.class, CNHKG.code().get());
Location STOCKHOLM = uow.get(Location.class, SESTO.code().get());
Cargos CARGOS = uow.get(Cargos.class, CargosEntity.CARGOS_ID);
// Create valid cargo
TrackingId trackingId = new BookNewCargo(CARGOS, HONGKONG, STOCKHOLM, day(30)).book();
Cargo cargo = uow.get(Cargo.class, trackingId.id().get());
// Step 3 - Find possible routes
List<Itinerary> routeCandidates = new BookNewCargo(cargo).routeCandidates();
// Check possible routes
for (Itinerary itinerary : routeCandidates) {
assertThat("First load location equals origin location.", itinerary.firstLeg().loadLocation().get(), is(equalTo(cargo.routeSpecification().get().origin().get())));
assertThat("Last unload location equals destination location.", itinerary.lastLeg().unloadLocation().get(), is(equalTo(cargo.routeSpecification().get().destination().get())));
assertThat("Cargo will be delivered in time.", itinerary.finalArrivalDate().before(cargo.routeSpecification().get().arrivalDeadline().get()), is(equalTo(true)));
}
}
use of org.qi4j.sample.dcicargo.sample_a.data.shipping.location.Location in project qi4j-sdk by Qi4j.
the class BookNewCargoTest method step_5_AssignCargoToRoute.
@Test
public void step_5_AssignCargoToRoute() throws Exception {
UnitOfWork uow = module.currentUnitOfWork();
Location HONGKONG = uow.get(Location.class, CNHKG.code().get());
Location STOCKHOLM = uow.get(Location.class, SESTO.code().get());
Cargos CARGOS = uow.get(Cargos.class, CargosEntity.CARGOS_ID);
// Create valid cargo
Date deadline = day(30);
TrackingId trackingId = new BookNewCargo(CARGOS, HONGKONG, STOCKHOLM, deadline).book();
Cargo cargo = uow.get(Cargo.class, trackingId.id().get());
List<Itinerary> routeCandidates = new BookNewCargo(cargo).routeCandidates();
// Get first route found
// Would normally be found with an Itinerary id from customer selection
Itinerary itinerary = routeCandidates.get(0);
// Use case step 5 - System assigns cargo to route
new BookNewCargo(cargo, itinerary).assignCargoToRoute();
assertThat("Itinerary has been assigned to cargo.", itinerary, is(equalTo(cargo.itinerary().get())));
// BuildDeliverySnapshot will check if itinerary is valid. No need to check it here.
// Check values set in new delivery snapshot
Delivery delivery = cargo.delivery().get();
assertThat(delivery.routingStatus().get(), is(equalTo(RoutingStatus.ROUTED)));
// ETA (= Unload time of last Leg) is before Deadline (set in previous test)
assertTrue(delivery.eta().get().before(deadline));
}
use of org.qi4j.sample.dcicargo.sample_a.data.shipping.location.Location in project qi4j-sdk by Qi4j.
the class BookNewCargoTest method deviation_2b_3_DeadlineTomorrowIsOkay.
@Test
public void deviation_2b_3_DeadlineTomorrowIsOkay() throws Exception {
UnitOfWork uow = module.currentUnitOfWork();
Location HONGKONG = uow.get(Location.class, CNHKG.code().get());
Location STOCKHOLM = uow.get(Location.class, SESTO.code().get());
Cargos CARGOS = uow.get(Cargos.class, CargosEntity.CARGOS_ID);
new BookNewCargo(CARGOS, HONGKONG, STOCKHOLM, day(1)).book();
}
use of org.qi4j.sample.dcicargo.sample_a.data.shipping.location.Location in project qi4j-sdk by Qi4j.
the class BookNewCargoTest method deviation2a_OriginAndDestinationSame.
@Test(expected = RouteException.class)
public void deviation2a_OriginAndDestinationSame() throws Exception {
UnitOfWork uow = module.currentUnitOfWork();
Location HONGKONG = uow.get(Location.class, CNHKG.code().get());
Cargos CARGOS = uow.get(Cargos.class, CargosEntity.CARGOS_ID);
new BookNewCargo(CARGOS, HONGKONG, HONGKONG, day(17)).book();
}
Aggregations