ExternalRoutingServiceTest.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package se.citerus.dddsample.infrastructure.routing;
  2. import static org.assertj.core.api.Assertions.assertThat;
  3. import static org.easymock.EasyMock.createMock;
  4. import static org.easymock.EasyMock.expect;
  5. import static org.easymock.EasyMock.isA;
  6. import static org.easymock.EasyMock.replay;
  7. import static org.easymock.EasyMock.verify;
  8. import static se.citerus.dddsample.domain.model.location.SampleLocations.GOTHENBURG;
  9. import static se.citerus.dddsample.domain.model.location.SampleLocations.HELSINKI;
  10. import static se.citerus.dddsample.domain.model.location.SampleLocations.HONGKONG;
  11. import static se.citerus.dddsample.domain.model.location.SampleLocations.STOCKHOLM;
  12. import static se.citerus.dddsample.domain.model.location.SampleLocations.TOKYO;
  13. import java.util.Arrays;
  14. import java.util.Date;
  15. import java.util.List;
  16. import org.junit.Before;
  17. import org.junit.Test;
  18. import com.pathfinder.api.GraphTraversalService;
  19. import com.pathfinder.internal.GraphDAOStub;
  20. import com.pathfinder.internal.GraphTraversalServiceImpl;
  21. import se.citerus.dddsample.domain.model.cargo.Cargo;
  22. import se.citerus.dddsample.domain.model.cargo.Itinerary;
  23. import se.citerus.dddsample.domain.model.cargo.Leg;
  24. import se.citerus.dddsample.domain.model.cargo.RouteSpecification;
  25. import se.citerus.dddsample.domain.model.cargo.TrackingId;
  26. import se.citerus.dddsample.domain.model.location.Location;
  27. import se.citerus.dddsample.domain.model.location.LocationRepository;
  28. import se.citerus.dddsample.domain.model.voyage.SampleVoyages;
  29. import se.citerus.dddsample.domain.model.voyage.VoyageNumber;
  30. import se.citerus.dddsample.domain.model.voyage.VoyageRepository;
  31. import se.citerus.dddsample.infrastructure.persistence.inmemory.LocationRepositoryInMem;
  32. public class ExternalRoutingServiceTest {
  33. private ExternalRoutingService externalRoutingService;
  34. private VoyageRepository voyageRepository;
  35. @Before
  36. public void setUp() {
  37. externalRoutingService = new ExternalRoutingService();
  38. LocationRepository locationRepository = new LocationRepositoryInMem();
  39. externalRoutingService.setLocationRepository(locationRepository);
  40. voyageRepository = createMock(VoyageRepository.class);
  41. externalRoutingService.setVoyageRepository(voyageRepository);
  42. GraphTraversalService graphTraversalService = new GraphTraversalServiceImpl(new GraphDAOStub() {
  43. public List<String> listLocations() {
  44. return Arrays.asList(TOKYO.unLocode().idString(), STOCKHOLM.unLocode().idString(), GOTHENBURG.unLocode().idString());
  45. }
  46. public void storeCarrierMovementId(String cmId, String from, String to) {
  47. }
  48. });
  49. externalRoutingService.setGraphTraversalService(graphTraversalService);
  50. }
  51. // TODO this test belongs in com.pathfinder
  52. @Test
  53. public void testCalculatePossibleRoutes() {
  54. TrackingId trackingId = new TrackingId("ABC");
  55. RouteSpecification routeSpecification = new RouteSpecification(HONGKONG, HELSINKI, new Date());
  56. Cargo cargo = new Cargo(trackingId, routeSpecification);
  57. expect(voyageRepository.find(isA(VoyageNumber.class))).andStubReturn(SampleVoyages.CM002);
  58. replay(voyageRepository);
  59. List<Itinerary> candidates = externalRoutingService.fetchRoutesForSpecification(routeSpecification);
  60. assertThat(candidates).isNotNull();
  61. for (Itinerary itinerary : candidates) {
  62. List<Leg> legs = itinerary.legs();
  63. assertThat(legs).isNotNull();
  64. assertThat(legs.isEmpty()).isFalse();
  65. // Cargo origin and start of first leg should match
  66. assertThat(legs.get(0).loadLocation()).isEqualTo(cargo.origin());
  67. // Cargo final destination and last leg stop should match
  68. Location lastLegStop = legs.get(legs.size() - 1).unloadLocation();
  69. assertThat(lastLegStop).isEqualTo(cargo.routeSpecification().destination());
  70. for (int i = 0; i < legs.size() - 1; i++) {
  71. // Assert that all legs are connected
  72. assertThat(legs.get(i + 1).loadLocation()).isEqualTo(legs.get(i).unloadLocation());
  73. }
  74. }
  75. verify(voyageRepository);
  76. }
  77. }