|
2 | 2 |
|
3 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
4 | 4 | import static org.junit.jupiter.api.Assertions.assertFalse; |
| 5 | +import static org.junit.jupiter.api.Assertions.assertNull; |
5 | 6 | import static org.junit.jupiter.api.Assertions.assertTrue; |
6 | 7 |
|
| 8 | +import java.time.Instant; |
| 9 | +import java.time.LocalDate; |
7 | 10 | import java.time.LocalTime; |
8 | 11 | import org.junit.jupiter.api.Test; |
| 12 | +import org.opentripplanner._support.time.ZoneIds; |
9 | 13 | import org.opentripplanner.model.plan.PlanTestConstants; |
10 | 14 | import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; |
11 | 15 | import org.opentripplanner.transit.model.basic.TransitMode; |
12 | 16 | import org.opentripplanner.transit.model.framework.Deduplicator; |
| 17 | +import org.opentripplanner.transit.model.timetable.ScheduledTripTimes; |
13 | 18 | import org.opentripplanner.transit.model.timetable.TripTimesFactory; |
| 19 | +import org.opentripplanner.transit.service.DefaultTransitService; |
| 20 | +import org.opentripplanner.transit.service.TimetableRepository; |
| 21 | +import org.opentripplanner.utils.time.ServiceDateUtils; |
14 | 22 |
|
15 | 23 | class TripTimeOnDateTest implements PlanTestConstants { |
16 | 24 |
|
@@ -50,4 +58,45 @@ void isRecordedStop() { |
50 | 58 |
|
51 | 59 | assertTrue(subject.isRecordedStop()); |
52 | 60 | } |
| 61 | + |
| 62 | + @Test |
| 63 | + void testFromTripTimesWithScheduleFallback() { |
| 64 | + var testModel = TimetableRepositoryForTest.of(); |
| 65 | + var trip = TimetableRepositoryForTest.trip("123").build(); |
| 66 | + var siteRepository = testModel.siteRepositoryBuilder().build(); |
| 67 | + var timetableRepository = new TimetableRepository(siteRepository, new Deduplicator()); |
| 68 | + var tripTimes = ScheduledTripTimes.of() |
| 69 | + .withTrip(trip) |
| 70 | + .withDepartureTimes(new int [] { 0, 1 }) |
| 71 | + .build(); |
| 72 | + var tripPattern = testModel.pattern(TransitMode.BUS) |
| 73 | + .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) |
| 74 | + .build(); |
| 75 | + timetableRepository.addTripPattern(tripPattern.getId(), tripPattern); |
| 76 | + timetableRepository.index(); |
| 77 | + var timetableSnapshot = new TimetableSnapshot(); |
| 78 | + timetableSnapshot.commit(); |
| 79 | + var transitService = new DefaultTransitService(timetableRepository, timetableSnapshot); |
| 80 | + var serviceDate = LocalDate.of(2025, 1, 1); |
| 81 | + // Construct a timetable which definitely does not contain this trip, because it is empty. |
| 82 | + Timetable timetable = Timetable.of() |
| 83 | + .withTripPattern(tripPattern) |
| 84 | + .withServiceDate(serviceDate) |
| 85 | + .build(); |
| 86 | + Instant midnight = ServiceDateUtils.asStartOfService( |
| 87 | + serviceDate, |
| 88 | + ZoneIds.HELSINKI |
| 89 | + ).toInstant(); |
| 90 | + var tripTimeOnDates = TripTimeOnDate.fromTripTimesWithScheduleFallback( |
| 91 | + timetable, |
| 92 | + trip, |
| 93 | + serviceDate, |
| 94 | + midnight, |
| 95 | + transitService |
| 96 | + ); |
| 97 | + for (var tripTimeOnDate : tripTimeOnDates) { |
| 98 | + assertNull(tripTimeOnDate.getServiceDay()); |
| 99 | + assertEquals(tripTimeOnDate.getServiceDayMidnight(), TripTimeOnDate.UNDEFINED); |
| 100 | + } |
| 101 | + } |
53 | 102 | } |
0 commit comments