Skip to content

Commit 577c2ce

Browse files
authored
fix: sort expired_calendar notices by row number (#1968)
1 parent 183bcfd commit 577c2ce

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ExpiredCalendarValidator.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ public void validate(NoticeContainer noticeContainer) {
5454
CalendarUtil.servicePeriodToServiceDatesMap(
5555
CalendarUtil.buildServicePeriodMap(calendarTable, calendarDateTable));
5656
boolean isCalendarTableEmpty = calendarTable.getEntities().isEmpty();
57+
List<ExpiredCalendarNotice> noticesToReturn = new ArrayList<>();
58+
// Notices to return only if there are no calendars in `calendar.txt` and
59+
// all calendar dates are in the past.
5760
List<ExpiredCalendarNotice> expiredCalendarDatesNotices = new ArrayList<>();
5861
boolean allCalendarAreExpired = true;
5962
for (var serviceId : servicePeriodMap.keySet()) {
@@ -63,7 +66,7 @@ public void validate(NoticeContainer noticeContainer) {
6366
}
6467
if (serviceDates.last().isBefore(dateForValidation.getDate())) {
6568
if (calendarTable.byServiceId(serviceId).isPresent()) {
66-
noticeContainer.addValidationNotice(
69+
noticesToReturn.add(
6770
new ExpiredCalendarNotice(
6871
calendarTable.byServiceId(serviceId).get().csvRowNumber(), serviceId));
6972
} else if (isCalendarTableEmpty && allCalendarAreExpired) {
@@ -82,8 +85,11 @@ public void validate(NoticeContainer noticeContainer) {
8285
}
8386
}
8487
if (isCalendarTableEmpty && allCalendarAreExpired) {
85-
noticeContainer.addValidationNotices(expiredCalendarDatesNotices);
88+
noticesToReturn.addAll(expiredCalendarDatesNotices);
8689
}
90+
91+
noticesToReturn.sort(Comparator.comparing(ExpiredCalendarNotice::getCsvRowNumber));
92+
noticeContainer.addValidationNotices(noticesToReturn);
8793
}
8894

8995
/**
@@ -111,5 +117,9 @@ static class ExpiredCalendarNotice extends ValidationNotice {
111117
this.csvRowNumber = csvRowNumber;
112118
this.serviceId = serviceId;
113119
}
120+
121+
public int getCsvRowNumber() {
122+
return csvRowNumber;
123+
}
114124
}
115125
}

main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ExpiredCalendarValidatorTest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,12 @@ public void calendarDateWithAllCalendarDatesExpiredShouldGenerateNotice() {
316316
.setDate(GtfsDate.fromLocalDate(TEST_NOW.minusDays(3)))
317317
.setExceptionType(GtfsCalendarDateExceptionType.SERVICE_ADDED)
318318
.build(),
319+
new GtfsCalendarDate.Builder()
320+
.setCsvRowNumber(4)
321+
.setServiceId("SERVICE_ID_4")
322+
.setDate(GtfsDate.fromLocalDate(TEST_NOW.minusDays(7)))
323+
.setExceptionType(GtfsCalendarDateExceptionType.SERVICE_ADDED)
324+
.build(),
319325
new GtfsCalendarDate.Builder()
320326
.setCsvRowNumber(1)
321327
.setServiceId("SERVICE_ID_1")
@@ -326,9 +332,12 @@ public void calendarDateWithAllCalendarDatesExpiredShouldGenerateNotice() {
326332
new ExpiredCalendarValidator(new DateForValidation(TEST_NOW), calendarTable, calendarDateTable)
327333
.validate(container);
328334
assertThat(container.getValidationNotices())
335+
// We verify that entries are sorted by row number.
329336
.containsExactly(
330-
new ExpiredCalendarValidator.ExpiredCalendarNotice(3, "SERVICE_ID_3"),
337+
new ExpiredCalendarValidator.ExpiredCalendarNotice(1, "SERVICE_ID_1"),
331338
new ExpiredCalendarValidator.ExpiredCalendarNotice(2, "SERVICE_ID_2"),
332-
new ExpiredCalendarValidator.ExpiredCalendarNotice(1, "SERVICE_ID_1"));
339+
new ExpiredCalendarValidator.ExpiredCalendarNotice(3, "SERVICE_ID_3"),
340+
new ExpiredCalendarValidator.ExpiredCalendarNotice(4, "SERVICE_ID_4"))
341+
.inOrder();
333342
}
334343
}

0 commit comments

Comments
 (0)