Skip to content

Commit 913239d

Browse files
Add test
1 parent eae78db commit 913239d

File tree

5 files changed

+112
-50
lines changed

5 files changed

+112
-50
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.opentripplanner.ext.vectortiles.layers.stops;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.time.LocalDate;
7+
import java.util.List;
8+
import org.junit.jupiter.api.Test;
9+
import org.opentripplanner.apis.gtfs.PatternTestModel;
10+
import org.opentripplanner.transit.model._data.TransitModelForTest;
11+
import org.opentripplanner.transit.model.network.TripPattern;
12+
import org.opentripplanner.transit.model.site.RegularStop;
13+
14+
class LayerFiltersTest {
15+
16+
private static final RegularStop STOP = TransitModelForTest.of().stop("1").build();
17+
private static final LocalDate DATE = LocalDate.of(2024, 9, 5);
18+
private static final TripPattern PATTERN = PatternTestModel.pattern();
19+
20+
@Test
21+
void includeStopWithinServiceWeek() {
22+
var predicate = LayerFilters.currentServiceWeek(
23+
s -> List.of(PATTERN),
24+
trip -> List.of(DATE),
25+
() -> DATE
26+
);
27+
28+
assertTrue(predicate.test(STOP));
29+
}
30+
31+
@Test
32+
void excludeOutsideServiceWeek() {
33+
var inThreeWeeks = DATE.plusDays(21);
34+
var predicate = LayerFilters.currentServiceWeek(
35+
s -> List.of(PATTERN),
36+
trip -> List.of(inThreeWeeks),
37+
() -> DATE
38+
);
39+
40+
assertFalse(predicate.test(STOP));
41+
}
42+
}

src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/LayerFilters.java

+23-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@
33
import java.time.DayOfWeek;
44
import java.time.LocalDate;
55
import java.time.temporal.TemporalAdjusters;
6+
import java.util.Collection;
7+
import java.util.List;
8+
import java.util.function.Function;
69
import java.util.function.Predicate;
10+
import java.util.function.Supplier;
711
import org.opentripplanner.apis.gtfs.PatternByServiceDatesFilter;
812
import org.opentripplanner.apis.gtfs.model.LocalDateRange;
13+
import org.opentripplanner.transit.model.network.TripPattern;
914
import org.opentripplanner.transit.model.site.RegularStop;
15+
import org.opentripplanner.transit.model.timetable.Trip;
1016
import org.opentripplanner.transit.service.TransitService;
1117

1218
/**
@@ -24,17 +30,24 @@ public class LayerFilters {
2430
* Returns a predicate which only includes stop which are visited by a pattern that is in the current
2531
* TriMet service week, namely from Sunday to Sunday.
2632
*/
27-
public static Predicate<RegularStop> currentServiceWeek(TransitService transitService) {
28-
var serviceDate = LocalDate.now(transitService.getTimeZone());
33+
public static Predicate<RegularStop> currentServiceWeek(
34+
Function<RegularStop, Collection<TripPattern>> getPatternsForStop,
35+
Function<Trip, Collection<LocalDate>> getServiceDatesForTrip,
36+
Supplier<LocalDate> nowSupplier
37+
) {
38+
var serviceDate = nowSupplier.get();
2939
var lastSunday = serviceDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
3040
var nextSunday = serviceDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).plusDays(1);
41+
3142
var filter = new PatternByServiceDatesFilter(
3243
new LocalDateRange(lastSunday, nextSunday),
33-
transitService
44+
// not used
45+
route -> List.of(),
46+
getServiceDatesForTrip
3447
);
3548

3649
return regularStop -> {
37-
var patterns = transitService.getPatternsForStop(regularStop);
50+
var patterns = getPatternsForStop.apply(regularStop);
3851
var patternsInCurrentWeek = filter.filterPatterns(patterns);
3952
return !patternsInCurrentWeek.isEmpty();
4053
};
@@ -43,7 +56,12 @@ public static Predicate<RegularStop> currentServiceWeek(TransitService transitSe
4356
public static Predicate<RegularStop> forType(FilterType type, TransitService transitService) {
4457
return switch (type) {
4558
case NONE -> NO_FILTER;
46-
case CURRENT_TRIMET_SERVICE_WEEK -> currentServiceWeek(transitService);
59+
case CURRENT_TRIMET_SERVICE_WEEK -> currentServiceWeek(
60+
transitService::getPatternsForStop,
61+
trip ->
62+
transitService.getCalendarService().getServiceDatesForServiceId(trip.getServiceId()),
63+
() -> LocalDate.now(transitService.getTimeZone())
64+
);
4765
};
4866
}
4967

src/main/java/org/opentripplanner/apis/gtfs/PatternByServiceDatesFilter.java

+1-9
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class PatternByServiceDatesFilter {
2929
* This method is not private to enable unit testing.
3030
* <p>
3131
*/
32-
PatternByServiceDatesFilter(
32+
public PatternByServiceDatesFilter(
3333
LocalDateRange range,
3434
Function<Route, Collection<TripPattern>> getPatternsForRoute,
3535
Function<Trip, Collection<LocalDate>> getServiceDatesForTrip
@@ -56,14 +56,6 @@ public PatternByServiceDatesFilter(
5656
);
5757
}
5858

59-
public PatternByServiceDatesFilter(LocalDateRange range, TransitService transitService) {
60-
this(
61-
range,
62-
transitService::getPatternsForRoute,
63-
trip -> transitService.getCalendarService().getServiceDatesForServiceId(trip.getServiceId())
64-
);
65-
}
66-
6759
/**
6860
* Filter the patterns by the service dates that it operates on.
6961
*/

src/test/java/org/opentripplanner/apis/gtfs/PatternByServiceDatesFilterTest.java

+2-36
Original file line numberDiff line numberDiff line change
@@ -6,59 +6,25 @@
66
import static org.junit.jupiter.api.Assertions.assertThrows;
77
import static org.opentripplanner.apis.gtfs.PatternByServiceDatesFilterTest.FilterExpectation.NOT_REMOVED;
88
import static org.opentripplanner.apis.gtfs.PatternByServiceDatesFilterTest.FilterExpectation.REMOVED;
9-
import static org.opentripplanner.transit.model._data.TransitModelForTest.id;
9+
import static org.opentripplanner.apis.gtfs.PatternTestModel.ROUTE_1;
1010

1111
import java.time.LocalDate;
1212
import java.util.List;
1313
import org.junit.jupiter.params.ParameterizedTest;
1414
import org.junit.jupiter.params.provider.Arguments;
1515
import org.junit.jupiter.params.provider.MethodSource;
1616
import org.opentripplanner.apis.gtfs.model.LocalDateRange;
17-
import org.opentripplanner.transit.model._data.TransitModelForTest;
18-
import org.opentripplanner.transit.model.framework.FeedScopedId;
19-
import org.opentripplanner.transit.model.network.Route;
20-
import org.opentripplanner.transit.model.network.StopPattern;
2117
import org.opentripplanner.transit.model.network.TripPattern;
22-
import org.opentripplanner.transit.model.site.RegularStop;
23-
import org.opentripplanner.transit.model.timetable.ScheduledTripTimes;
24-
import org.opentripplanner.transit.model.timetable.Trip;
25-
import org.opentripplanner.transit.service.StopModel;
2618

2719
class PatternByServiceDatesFilterTest {
2820

29-
private static final Route ROUTE_1 = TransitModelForTest.route("1").build();
30-
private static final FeedScopedId SERVICE_ID = id("service");
31-
private static final Trip TRIP = TransitModelForTest
32-
.trip("t1")
33-
.withRoute(ROUTE_1)
34-
.withServiceId(SERVICE_ID)
35-
.build();
36-
private static final TransitModelForTest MODEL = new TransitModelForTest(StopModel.of());
37-
private static final RegularStop STOP_1 = MODEL.stop("1").build();
38-
private static final StopPattern STOP_PATTERN = TransitModelForTest.stopPattern(STOP_1, STOP_1);
39-
private static final TripPattern PATTERN_1 = pattern();
21+
private static final TripPattern PATTERN_1 = PatternTestModel.pattern();
4022

4123
enum FilterExpectation {
4224
REMOVED,
4325
NOT_REMOVED,
4426
}
4527

46-
private static TripPattern pattern() {
47-
var pattern = TransitModelForTest
48-
.tripPattern("1", ROUTE_1)
49-
.withStopPattern(STOP_PATTERN)
50-
.build();
51-
52-
var tt = ScheduledTripTimes
53-
.of()
54-
.withTrip(TRIP)
55-
.withArrivalTimes("10:00 10:05")
56-
.withDepartureTimes("10:00 10:05")
57-
.build();
58-
pattern.add(tt);
59-
return pattern;
60-
}
61-
6228
static List<Arguments> invalidRangeCases() {
6329
return List.of(
6430
Arguments.of(null, null),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.opentripplanner.apis.gtfs;
2+
3+
import static org.opentripplanner.transit.model._data.TransitModelForTest.id;
4+
5+
import org.opentripplanner.transit.model._data.TransitModelForTest;
6+
import org.opentripplanner.transit.model.framework.FeedScopedId;
7+
import org.opentripplanner.transit.model.network.Route;
8+
import org.opentripplanner.transit.model.network.StopPattern;
9+
import org.opentripplanner.transit.model.network.TripPattern;
10+
import org.opentripplanner.transit.model.site.RegularStop;
11+
import org.opentripplanner.transit.model.timetable.ScheduledTripTimes;
12+
import org.opentripplanner.transit.model.timetable.Trip;
13+
import org.opentripplanner.transit.service.StopModel;
14+
15+
public class PatternTestModel {
16+
17+
public static final Route ROUTE_1 = TransitModelForTest.route("1").build();
18+
19+
private static final FeedScopedId SERVICE_ID = id("service");
20+
private static final Trip TRIP = TransitModelForTest
21+
.trip("t1")
22+
.withRoute(ROUTE_1)
23+
.withServiceId(SERVICE_ID)
24+
.build();
25+
private static final TransitModelForTest MODEL = new TransitModelForTest(StopModel.of());
26+
private static final RegularStop STOP_1 = MODEL.stop("1").build();
27+
private static final StopPattern STOP_PATTERN = TransitModelForTest.stopPattern(STOP_1, STOP_1);
28+
29+
public static TripPattern pattern() {
30+
var pattern = TransitModelForTest
31+
.tripPattern("1", ROUTE_1)
32+
.withStopPattern(STOP_PATTERN)
33+
.build();
34+
35+
var tt = ScheduledTripTimes
36+
.of()
37+
.withTrip(TRIP)
38+
.withArrivalTimes("10:00 10:05")
39+
.withDepartureTimes("10:00 10:05")
40+
.build();
41+
pattern.add(tt);
42+
return pattern;
43+
}
44+
}

0 commit comments

Comments
 (0)