Skip to content

Commit e021b97

Browse files
committed
Add module test for SIRI routable pickup/dropoff
1 parent 3948e00 commit e021b97

1 file changed

Lines changed: 83 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package org.opentripplanner.updater.trip.siri.moduletests.update;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertSuccess;
5+
6+
import org.junit.jupiter.api.Test;
7+
import org.opentripplanner.model.PickDrop;
8+
import org.opentripplanner.transit.model._data.TransitTestEnvironment;
9+
import org.opentripplanner.transit.model._data.TransitTestEnvironmentBuilder;
10+
import org.opentripplanner.transit.model._data.TripInput;
11+
import org.opentripplanner.transit.model.site.RegularStop;
12+
import org.opentripplanner.updater.trip.RealtimeTestConstants;
13+
import org.opentripplanner.updater.trip.SiriTestHelper;
14+
import uk.org.siri.siri21.ArrivalBoardingActivityEnumeration;
15+
import uk.org.siri.siri21.DepartureBoardingActivityEnumeration;
16+
17+
class BoardingActivityWithCoordinateWithDriverTest implements RealtimeTestConstants {
18+
19+
private final TransitTestEnvironmentBuilder ENV_BUILDER = TransitTestEnvironment.of();
20+
private final RegularStop STOP_A = ENV_BUILDER.stop(STOP_A_ID);
21+
private final RegularStop STOP_B = ENV_BUILDER.stop(STOP_B_ID);
22+
private final RegularStop STOP_C = ENV_BUILDER.stop(STOP_C_ID);
23+
24+
/**
25+
* When a stop has COORDINATE_WITH_DRIVER pickup/dropoff and SIRI sends
26+
* BOARDING/ALIGHTING boarding activities, the trip should stay UPDATED
27+
* (not MODIFIED), because both are routable — SIRI boarding activities
28+
* are less specific than the planned PickDrop value.
29+
*/
30+
@Test
31+
void boardingActivityShouldNotOverrideCoordinateWithDriver() {
32+
var tripInput = TripInput.of(TRIP_1_ID)
33+
.withWithTripOnServiceDate(TRIP_1_ID)
34+
.addStop(STOP_A, "0:00:10", "0:00:11")
35+
.addStop(
36+
STOP_B,
37+
"0:00:20",
38+
"0:00:21",
39+
PickDrop.COORDINATE_WITH_DRIVER,
40+
PickDrop.COORDINATE_WITH_DRIVER
41+
)
42+
.addStop(STOP_C, "0:00:30", "0:00:31");
43+
44+
var env = ENV_BUILDER.addTrip(tripInput).build();
45+
var siri = SiriTestHelper.of(env);
46+
47+
// Verify scheduled pattern has COORDINATE_WITH_DRIVER at stop B
48+
var scheduledPattern = env.tripData(TRIP_1_ID).scheduledTripPattern();
49+
assertEquals(PickDrop.COORDINATE_WITH_DRIVER, scheduledPattern.getBoardType(1));
50+
assertEquals(PickDrop.COORDINATE_WITH_DRIVER, scheduledPattern.getAlightType(1));
51+
52+
var updates = siri
53+
.etBuilder()
54+
.withDatedVehicleJourneyRef(TRIP_1_ID)
55+
.withEstimatedCalls(builder ->
56+
builder
57+
.call(STOP_A)
58+
.departAimedExpected("00:00:11", "00:00:11")
59+
.call(STOP_B)
60+
.arriveAimedExpected("00:00:20", "00:00:20")
61+
.withArrivalBoardingActivity(ArrivalBoardingActivityEnumeration.ALIGHTING)
62+
.departAimedExpected("00:00:21", "00:00:21")
63+
.withDepartureBoardingActivity(DepartureBoardingActivityEnumeration.BOARDING)
64+
.call(STOP_C)
65+
.arriveAimedExpected("00:00:30", "00:00:30")
66+
)
67+
.buildEstimatedTimetableDeliveries();
68+
69+
var result = siri.applyEstimatedTimetable(updates);
70+
assertSuccess(result);
71+
72+
// Trip should stay UPDATED — BOARDING/ALIGHTING should not override COORDINATE_WITH_DRIVER
73+
assertEquals(
74+
"UPDATED | A 0:00:11 0:00:11 | B 0:00:20 0:00:21 | C 0:00:30 0:00:30",
75+
env.tripData(TRIP_1_ID).showTimetable()
76+
);
77+
78+
// Verify the pattern's pickup/dropoff at stop B is still COORDINATE_WITH_DRIVER
79+
var realtimePattern = env.tripData(TRIP_1_ID).tripPattern();
80+
assertEquals(PickDrop.COORDINATE_WITH_DRIVER, realtimePattern.getBoardType(1));
81+
assertEquals(PickDrop.COORDINATE_WITH_DRIVER, realtimePattern.getAlightType(1));
82+
}
83+
}

0 commit comments

Comments
 (0)