Skip to content

Commit 8cdbfa5

Browse files
authored
Merge 6488f77 into eb0d40a
2 parents eb0d40a + 6488f77 commit 8cdbfa5

File tree

3 files changed

+109
-7
lines changed

3 files changed

+109
-7
lines changed

main/src/main/java/org/mobilitydata/gtfsvalidator/table/GtfsFeedInfoSchema.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,11 @@
1717
package org.mobilitydata.gtfsvalidator.table;
1818

1919
import java.util.Locale;
20-
import org.mobilitydata.gtfsvalidator.annotation.EndRange;
21-
import org.mobilitydata.gtfsvalidator.annotation.FieldType;
22-
import org.mobilitydata.gtfsvalidator.annotation.FieldTypeEnum;
23-
import org.mobilitydata.gtfsvalidator.annotation.GtfsTable;
24-
import org.mobilitydata.gtfsvalidator.annotation.Recommended;
25-
import org.mobilitydata.gtfsvalidator.annotation.Required;
20+
import org.mobilitydata.gtfsvalidator.annotation.*;
2621
import org.mobilitydata.gtfsvalidator.type.GtfsDate;
2722

2823
@GtfsTable(value = "feed_info.txt", singleRow = true)
29-
@Recommended
24+
@ConditionallyRequired
3025
public interface GtfsFeedInfoSchema extends GtfsEntity {
3126
@Required
3227
String feedPublisherName();
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.mobilitydata.gtfsvalidator.validator;
2+
3+
import javax.inject.Inject;
4+
import org.mobilitydata.gtfsvalidator.annotation.GtfsValidator;
5+
import org.mobilitydata.gtfsvalidator.notice.MissingRecommendedFileNotice;
6+
import org.mobilitydata.gtfsvalidator.notice.MissingRequiredFileNotice;
7+
import org.mobilitydata.gtfsvalidator.notice.NoticeContainer;
8+
import org.mobilitydata.gtfsvalidator.table.GtfsFeedInfo;
9+
import org.mobilitydata.gtfsvalidator.table.GtfsFeedInfoTableContainer;
10+
import org.mobilitydata.gtfsvalidator.table.GtfsTranslationTableContainer;
11+
12+
/**
13+
* The `MissingFeedInfoValidator` class is responsible for validating the presence of the
14+
* `feed_info.txt` file in a GTFS feed. If the `feed_info.txt` file is missing, it generates
15+
* appropriate validation notices.
16+
*
17+
* <p>The validation logic is as follows: - If the `feed_info.txt` file is missing and the
18+
* `translations.txt` file is also missing, a `MissingRecommendedFileNotice` is generated. - If the
19+
* `feed_info.txt` file is missing but the `translations.txt` file is present, a
20+
* `MissingRequiredFileNotice` is generated.
21+
*
22+
* <p>This validator is part of the GTFS validation framework and is annotated with `@GtfsValidator`
23+
* to indicate its role.
24+
*
25+
* <p>Dependencies: - `GtfsFeedInfoTableContainer`: Provides access to the `feed_info.txt` file
26+
* data. - `GtfsTranslationTableContainer`: Provides access to the `translations.txt` file data. -
27+
* `NoticeContainer`: Collects validation notices generated during the validation process.
28+
*/
29+
@GtfsValidator
30+
public class MissingFeedInfoValidator extends FileValidator {
31+
32+
private final GtfsFeedInfoTableContainer feedInfoTable;
33+
private final GtfsTranslationTableContainer translationTable;
34+
35+
@Inject
36+
public MissingFeedInfoValidator(
37+
GtfsFeedInfoTableContainer feedInfoTable, GtfsTranslationTableContainer translationTable) {
38+
this.feedInfoTable = feedInfoTable;
39+
this.translationTable = translationTable;
40+
}
41+
42+
@Override
43+
public void validate(NoticeContainer noticeContainer) {
44+
if (feedInfoTable.isMissingFile()) {
45+
if (translationTable.isMissingFile()) {
46+
noticeContainer.addValidationNotice(
47+
new MissingRecommendedFileNotice(GtfsFeedInfo.FILENAME));
48+
} else {
49+
noticeContainer.addValidationNotice(new MissingRequiredFileNotice(GtfsFeedInfo.FILENAME));
50+
}
51+
}
52+
}
53+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.mobilitydata.gtfsvalidator.validator;
2+
3+
import static com.google.common.truth.Truth.assertThat;
4+
5+
import java.util.List;
6+
import org.junit.Test;
7+
import org.mobilitydata.gtfsvalidator.notice.MissingRecommendedFileNotice;
8+
import org.mobilitydata.gtfsvalidator.notice.MissingRequiredFileNotice;
9+
import org.mobilitydata.gtfsvalidator.notice.NoticeContainer;
10+
import org.mobilitydata.gtfsvalidator.notice.ValidationNotice;
11+
import org.mobilitydata.gtfsvalidator.table.*;
12+
13+
public class MissingFeedInfoValidatorTest {
14+
15+
private static List<ValidationNotice> generateNotices(
16+
GtfsFeedInfoTableContainer feedInfoTableContainer,
17+
GtfsTranslationTableContainer translationTableContainer) {
18+
NoticeContainer noticeContainer = new NoticeContainer();
19+
new MissingFeedInfoValidator(feedInfoTableContainer, translationTableContainer)
20+
.validate(noticeContainer);
21+
return noticeContainer.getValidationNotices();
22+
}
23+
24+
@Test
25+
public void missingFeedInfoTranslationTableNotPresent() {
26+
assertThat(
27+
generateNotices(
28+
GtfsFeedInfoTableContainer.forStatus(GtfsTableContainer.TableStatus.MISSING_FILE),
29+
GtfsTranslationTableContainer.forStatus(
30+
GtfsTableContainer.TableStatus.MISSING_FILE)))
31+
.containsExactly(new MissingRecommendedFileNotice(GtfsFeedInfo.FILENAME));
32+
}
33+
34+
@Test
35+
public void missingFeedInfoWhenTranslationTableIsPresent() {
36+
assertThat(
37+
generateNotices(
38+
GtfsFeedInfoTableContainer.forStatus(GtfsTableContainer.TableStatus.MISSING_FILE),
39+
GtfsTranslationTableContainer.forStatus(
40+
GtfsTableContainer.TableStatus.PARSABLE_HEADERS_AND_ROWS)))
41+
.contains(new MissingRequiredFileNotice(GtfsFeedInfo.FILENAME));
42+
}
43+
44+
@Test
45+
public void feedInfoPresentShouldGenerateNoNotice() {
46+
assertThat(
47+
generateNotices(
48+
GtfsFeedInfoTableContainer.forStatus(
49+
GtfsTableContainer.TableStatus.PARSABLE_HEADERS_AND_ROWS),
50+
GtfsTranslationTableContainer.forStatus(
51+
GtfsTableContainer.TableStatus.PARSABLE_HEADERS_AND_ROWS)))
52+
.isEmpty();
53+
}
54+
}

0 commit comments

Comments
 (0)