package net.java.cargotracker.domain.model.cargo;
import static org.junit.Assert.*;
import net.java.cargotracker.domain.model.cargo.RouteSpecification;
import net.java.cargotracker.domain.model.cargo.Itinerary;
import net.java.cargotracker.domain.model.cargo.Leg;
import java.util.Arrays;
import net.java.cargotracker.application.util.DateUtil;
import net.java.cargotracker.domain.model.location.SampleLocations;
import net.java.cargotracker.domain.model.voyage.Voyage;
import net.java.cargotracker.domain.model.voyage.VoyageNumber;
import org.junit.Test;
public class RouteSpecificationTest {
Voyage hongKongTokyoNewYork = new Voyage.Builder(new VoyageNumber("V001"),
SampleLocations.HONGKONG)
.addMovement(SampleLocations.TOKYO, DateUtil.toDate("2009-02-01"),
DateUtil.toDate("2009-02-05"))
.addMovement(SampleLocations.NEWYORK,
DateUtil.toDate("2009-02-06"),
DateUtil.toDate("2009-02-10"))
.addMovement(SampleLocations.HONGKONG,
DateUtil.toDate("2009-02-11"),
DateUtil.toDate("2009-02-14")).build();
Voyage dallasNewYorkChicago = new Voyage.Builder(new VoyageNumber("V002"),
SampleLocations.DALLAS)
.addMovement(SampleLocations.NEWYORK,
DateUtil.toDate("2009-02-06"),
DateUtil.toDate("2009-02-07"))
.addMovement(SampleLocations.CHICAGO,
DateUtil.toDate("2009-02-12"),
DateUtil.toDate("2009-02-20")).build();
// TODO:
// It shouldn't be possible to create Legs that have load/unload locations
// and/or dates that don't match the voyage's carrier movements.
Itinerary itinerary = new Itinerary(Arrays.asList(
new Leg(hongKongTokyoNewYork, SampleLocations.HONGKONG,
SampleLocations.NEWYORK, DateUtil.toDate("2009-02-01"),
DateUtil.toDate("2009-02-10")), new Leg(
dallasNewYorkChicago, SampleLocations.NEWYORK,
SampleLocations.CHICAGO, DateUtil.toDate("2009-02-12"),
DateUtil.toDate("2009-02-20"))));
@Test
public void testIsSatisfiedBySuccess() {
RouteSpecification routeSpecification = new RouteSpecification(
SampleLocations.HONGKONG, SampleLocations.CHICAGO,
DateUtil.toDate("2009-03-01"));
assertTrue(routeSpecification.isSatisfiedBy(itinerary));
}
@Test
public void testIsNotSatisfiedByWrongOrigin() {
RouteSpecification routeSpecification = new RouteSpecification(
SampleLocations.HANGZOU, SampleLocations.CHICAGO,
DateUtil.toDate("2009-03-01"));
assertFalse(routeSpecification.isSatisfiedBy(itinerary));
}
@Test
public void testIsNotSatisfiedByWrongDestination() {
RouteSpecification routeSpecification = new RouteSpecification(
SampleLocations.HONGKONG, SampleLocations.DALLAS,
DateUtil.toDate("2009-03-01"));
assertFalse(routeSpecification.isSatisfiedBy(itinerary));
}
@Test
public void testIsNotSatisfiedByMissedDeadline() {
RouteSpecification routeSpecification = new RouteSpecification(
SampleLocations.HONGKONG, SampleLocations.CHICAGO,
DateUtil.toDate("2009-02-15"));
assertFalse(routeSpecification.isSatisfiedBy(itinerary));
}
}