ExternalRoutingServiceTest.java 3.1KB

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