Skip to content

Commit 3d8dbaf

Browse files
authored
Merge pull request opentripplanner#7293 from entur/add-siri-extra-journey-route-tests
Add module tests for SIRI extra journeys
2 parents 4b23fee + ff7e4a4 commit 3d8dbaf

2 files changed

Lines changed: 149 additions & 7 deletions

File tree

application/src/test/java/org/opentripplanner/updater/trip/siri/SiriEtBuilder.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import uk.org.siri.siri21.StopAssignmentStructure;
2626
import uk.org.siri.siri21.StopPointRefStructure;
2727
import uk.org.siri.siri21.VehicleJourneyRef;
28+
import uk.org.siri.siri21.VehicleModesEnumeration;
2829

2930
/**
3031
* This is a helper class for constucting Siri ET messages to use in tests.
@@ -97,6 +98,25 @@ public SiriEtBuilder withLineRef(String lineRef) {
9798
return this;
9899
}
99100

101+
public SiriEtBuilder withExternalLineRef(String externalLineRef) {
102+
var ref = new LineRef();
103+
ref.setValue(externalLineRef);
104+
evj.setExternalLineRef(ref);
105+
return this;
106+
}
107+
108+
public SiriEtBuilder withPublishedLineName(String lineName) {
109+
var name = new NaturalLanguageStringStructure();
110+
name.setValue(lineName);
111+
evj.getPublishedLineNames().add(name);
112+
return this;
113+
}
114+
115+
public SiriEtBuilder withVehicleMode(VehicleModesEnumeration mode) {
116+
evj.getVehicleModes().add(mode);
117+
return this;
118+
}
119+
100120
public SiriEtBuilder withRecordedCalls(
101121
Function<RecordedCallsBuilder, RecordedCallsBuilder> producer
102122
) {

application/src/test/java/org/opentripplanner/updater/trip/siri/moduletests/extrajourney/ExtraJourneyTest.java

Lines changed: 129 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55
import static org.junit.jupiter.api.Assertions.assertNotNull;
66
import static org.opentripplanner.transit.model._data.FeedScopedIdForTestFactory.id;
77
import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertFailure;
8+
import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertSuccess;
89

910
import org.junit.jupiter.api.Test;
1011
import org.opentripplanner.core.model.id.FeedScopedId;
1112
import org.opentripplanner.transit.model._data.TransitTestEnvironment;
1213
import org.opentripplanner.transit.model._data.TransitTestEnvironmentBuilder;
1314
import org.opentripplanner.transit.model._data.TripInput;
15+
import org.opentripplanner.transit.model.basic.SubMode;
16+
import org.opentripplanner.transit.model.basic.TransitMode;
1417
import org.opentripplanner.transit.model.network.Route;
1518
import org.opentripplanner.transit.model.organization.Operator;
1619
import org.opentripplanner.transit.model.site.RegularStop;
@@ -22,12 +25,14 @@
2225
import org.opentripplanner.updater.trip.RealtimeTestConstants;
2326
import org.opentripplanner.updater.trip.SiriTestHelper;
2427
import org.opentripplanner.updater.trip.siri.SiriEtBuilder;
28+
import uk.org.siri.siri21.VehicleModesEnumeration;
2529

2630
class ExtraJourneyTest implements RealtimeTestConstants {
2731

2832
private static final String ADDED_TRIP_ID = "newJourney";
2933
private static final String OPERATOR_ID = "operatorId";
3034
private static final String ROUTE_ID = "routeId";
35+
private static final String RAIL_ROUTE_ID = "railRouteId";
3136

3237
private final TransitTestEnvironmentBuilder ENV_BUILDER = TransitTestEnvironment.of();
3338
private final RegularStop STOP_A = ENV_BUILDER.stop(STOP_A_ID);
@@ -43,6 +48,15 @@ class ExtraJourneyTest implements RealtimeTestConstants {
4348
.addStop(STOP_A, "0:00:10", "0:00:11")
4449
.addStop(STOP_B, "0:00:20", "0:00:21");
4550

51+
private final Route RAIL_ROUTE = ENV_BUILDER.route(RAIL_ROUTE_ID, r ->
52+
r.withMode(TransitMode.RAIL)
53+
);
54+
55+
private final TripInput RAIL_TRIP_INPUT = TripInput.of("railTrip1")
56+
.withRoute(RAIL_ROUTE)
57+
.addStop(STOP_A, "0:00:10", "0:00:11")
58+
.addStop(STOP_B, "0:00:20", "0:00:21");
59+
4660
@Test
4761
void testAddJourneyWithExistingRoute() {
4862
var env = ENV_BUILDER.addTrip(TRIP_1_INPUT).build();
@@ -134,11 +148,9 @@ void testAddJourneyMultipleTimes() {
134148
var updates = createValidAddedJourney(siri).buildEstimatedTimetableDeliveries();
135149

136150
int numTrips = env.transitService().listTrips().size();
137-
var result1 = siri.applyEstimatedTimetable(updates);
138-
assertEquals(1, result1.successful());
151+
assertSuccess(siri.applyEstimatedTimetable(updates));
139152
assertEquals(numTrips + 1, env.transitService().listTrips().size());
140-
var result2 = siri.applyEstimatedTimetable(updates);
141-
assertEquals(1, result2.successful());
153+
assertSuccess(siri.applyEstimatedTimetable(updates));
142154
assertEquals(numTrips + 1, env.transitService().listTrips().size());
143155

144156
assertThat(env.raptorData().summarizePatterns()).containsExactly(
@@ -193,9 +205,7 @@ void testReplaceJourney() {
193205
.withEstimatedCalls(builder -> builder.call(STOP_C).arriveAimedExpected("00:03", "00:04"))
194206
.buildEstimatedTimetableDeliveries();
195207

196-
var result = siri.applyEstimatedTimetable(updates);
197-
198-
assertEquals(1, result.successful());
208+
assertSuccess(siri.applyEstimatedTimetable(updates));
199209

200210
assertEquals(
201211
"ADDED | A [R] 0:02 0:02 | C 0:04 0:04",
@@ -242,6 +252,118 @@ void testReplaceJourneyWithoutEstimatedVehicleJourneyCode() {
242252
assertFailure(UpdateError.UpdateErrorType.UNKNOWN, result);
243253
}
244254

255+
@Test
256+
void testAddJourneyWithNewRouteAndShortName() {
257+
var env = ENV_BUILDER.addTrip(TRIP_1_INPUT).build();
258+
var siri = SiriTestHelper.of(env);
259+
260+
String newRouteRef = "newRouteForShortName";
261+
var updates = createValidAddedJourney(siri)
262+
.withLineRef(newRouteRef)
263+
.withPublishedLineName("L1")
264+
.buildEstimatedTimetableDeliveries();
265+
266+
assertSuccess(siri.applyEstimatedTimetable(updates));
267+
268+
Route newRoute = env.transitService().getRoute(id(newRouteRef));
269+
assertEquals(
270+
"L1",
271+
newRoute.getShortName(),
272+
"PublishedLineName should be mapped to the new route short name"
273+
);
274+
}
275+
276+
@Test
277+
void testAddJourneyWithNewRouteAndOperator() {
278+
var env = ENV_BUILDER.addTrip(TRIP_1_INPUT).build();
279+
var siri = SiriTestHelper.of(env);
280+
281+
String newRouteRef = "newRouteForOperator";
282+
var updates = createValidAddedJourney(siri)
283+
.withLineRef(newRouteRef)
284+
.buildEstimatedTimetableDeliveries();
285+
286+
assertSuccess(siri.applyEstimatedTimetable(updates));
287+
288+
Trip trip = env.transitService().getTrip(id(ADDED_TRIP_ID));
289+
assertNotNull(trip);
290+
assertEquals(
291+
OPERATOR,
292+
trip.getOperator(),
293+
"The new trip is assigned to the operator specified in OperatorRef"
294+
);
295+
}
296+
297+
@Test
298+
void testAddJourneyWithNewRouteResolvesAgencyFromOperator() {
299+
var env = ENV_BUILDER.addTrip(TRIP_1_INPUT).build();
300+
var siri = SiriTestHelper.of(env);
301+
302+
String newRouteRef = "newRouteForAgency";
303+
var updates = createValidAddedJourney(siri)
304+
.withLineRef(newRouteRef)
305+
.buildEstimatedTimetableDeliveries();
306+
307+
var result = siri.applyEstimatedTimetable(updates);
308+
assertEquals(1, result.successful());
309+
310+
Route newRoute = env.transitService().getRoute(id(newRouteRef));
311+
assertNotNull(newRoute);
312+
assertEquals(
313+
ROUTE.getAgency(),
314+
newRoute.getAgency(),
315+
"The new route agency should be mapped to the agency of any existing route that has the same operator"
316+
);
317+
}
318+
319+
@Test
320+
void testAddJourneyBusReplacingRailHasRailReplacementSubmode() {
321+
var env = ENV_BUILDER.addTrip(TRIP_1_INPUT).addTrip(RAIL_TRIP_INPUT).build();
322+
var siri = SiriTestHelper.of(env);
323+
324+
String newRouteRef = "busReplacementRoute";
325+
var updates = createValidAddedJourney(siri)
326+
.withLineRef(newRouteRef)
327+
.withExternalLineRef(RAIL_ROUTE_ID)
328+
.withVehicleMode(VehicleModesEnumeration.BUS)
329+
.buildEstimatedTimetableDeliveries();
330+
331+
assertSuccess(siri.applyEstimatedTimetable(updates));
332+
333+
Route newRoute = env.transitService().getRoute(id(newRouteRef));
334+
assertNotNull(newRoute);
335+
assertEquals(TransitMode.BUS, newRoute.getMode());
336+
assertEquals(
337+
SubMode.of("railReplacementBus"),
338+
newRoute.getNetexSubmode(),
339+
"When an added bus trip is assigned to an existing rail route, the submode should be 'railReplacementBus'"
340+
);
341+
}
342+
343+
@Test
344+
void testAddJourneyRailReplacingRailHasReplacementRailSubmode() {
345+
var env = ENV_BUILDER.addTrip(TRIP_1_INPUT).addTrip(RAIL_TRIP_INPUT).build();
346+
var siri = SiriTestHelper.of(env);
347+
348+
String newRouteRef = "railReplacementRoute";
349+
var updates = createValidAddedJourney(siri)
350+
.withLineRef(newRouteRef)
351+
.withExternalLineRef(RAIL_ROUTE_ID)
352+
.withVehicleMode(VehicleModesEnumeration.RAIL)
353+
.buildEstimatedTimetableDeliveries();
354+
355+
assertSuccess(siri.applyEstimatedTimetable(updates));
356+
357+
Route newRoute = env.transitService().getRoute(id(newRouteRef));
358+
assertNotNull(newRoute);
359+
assertEquals(TransitMode.RAIL, newRoute.getMode());
360+
assertEquals(
361+
SubMode.of("replacementRailService"),
362+
newRoute.getNetexSubmode(),
363+
"When an added rail trip is assigned to an existing rail route, the submode should be 'replacementRailService'"
364+
);
365+
}
366+
245367
private SiriEtBuilder createValidAddedJourney(SiriTestHelper siri) {
246368
return siri
247369
.etBuilder()

0 commit comments

Comments
 (0)