gtfs 4.12.0 → 4.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +27 -5
  2. package/dist/bin/gtfs-export.d.ts +1 -0
  3. package/dist/bin/gtfs-export.js +3645 -0
  4. package/dist/bin/gtfs-export.js.map +1 -0
  5. package/dist/bin/gtfs-import.d.ts +1 -0
  6. package/dist/bin/gtfs-import.js +4143 -0
  7. package/dist/bin/gtfs-import.js.map +1 -0
  8. package/dist/bin/gtfsrealtime-update.d.ts +1 -0
  9. package/dist/bin/gtfsrealtime-update.js +3800 -0
  10. package/dist/bin/gtfsrealtime-update.js.map +1 -0
  11. package/dist/index.d.ts +172 -0
  12. package/dist/index.js +5202 -0
  13. package/dist/index.js.map +1 -0
  14. package/package.json +26 -12
  15. package/.eslintrc.json +0 -28
  16. package/.github/workflows/nodejs.yml +0 -21
  17. package/.husky/pre-commit +0 -4
  18. package/@types/index.d.ts +0 -606
  19. package/@types/tests.ts +0 -31
  20. package/@types/tsconfig.json +0 -17
  21. package/CHANGELOG.md +0 -905
  22. package/bin/gtfs-export.js +0 -42
  23. package/bin/gtfs-import.js +0 -52
  24. package/bin/gtfsrealtime-update.js +0 -35
  25. package/config-sample-full.json +0 -20
  26. package/config-sample-rtupdates.json +0 -16
  27. package/config-sample.json +0 -8
  28. package/docs/images/node-gtfs-logo.svg +0 -18
  29. package/index.js +0 -1
  30. package/lib/advancedQuery.js +0 -36
  31. package/lib/db.js +0 -92
  32. package/lib/export.js +0 -141
  33. package/lib/file-utils.js +0 -103
  34. package/lib/geojson-utils.js +0 -138
  35. package/lib/gtfs/agencies.js +0 -32
  36. package/lib/gtfs/areas.js +0 -27
  37. package/lib/gtfs/attributions.js +0 -32
  38. package/lib/gtfs/booking-rules.js +0 -32
  39. package/lib/gtfs/calendar-dates.js +0 -32
  40. package/lib/gtfs/calendars.js +0 -32
  41. package/lib/gtfs/fare-attributes.js +0 -32
  42. package/lib/gtfs/fare-leg-rules.js +0 -32
  43. package/lib/gtfs/fare-media.js +0 -32
  44. package/lib/gtfs/fare-products.js +0 -32
  45. package/lib/gtfs/fare-rules.js +0 -32
  46. package/lib/gtfs/fare-transfer-rules.js +0 -32
  47. package/lib/gtfs/feed-info.js +0 -32
  48. package/lib/gtfs/frequencies.js +0 -32
  49. package/lib/gtfs/levels.js +0 -27
  50. package/lib/gtfs/location-group-stops.js +0 -32
  51. package/lib/gtfs/location-groups.js +0 -32
  52. package/lib/gtfs/locations.js +0 -32
  53. package/lib/gtfs/networks.js +0 -32
  54. package/lib/gtfs/pathways.js +0 -32
  55. package/lib/gtfs/route-networks.js +0 -32
  56. package/lib/gtfs/routes.js +0 -72
  57. package/lib/gtfs/shapes.js +0 -119
  58. package/lib/gtfs/stop-areas.js +0 -32
  59. package/lib/gtfs/stop-times.js +0 -32
  60. package/lib/gtfs/stops.js +0 -136
  61. package/lib/gtfs/timeframes.js +0 -32
  62. package/lib/gtfs/transfers.js +0 -32
  63. package/lib/gtfs/translations.js +0 -32
  64. package/lib/gtfs/trips.js +0 -27
  65. package/lib/gtfs-plus/calendar-attributes.js +0 -32
  66. package/lib/gtfs-plus/directions.js +0 -32
  67. package/lib/gtfs-plus/route-attributes.js +0 -32
  68. package/lib/gtfs-plus/stop-attributes.js +0 -32
  69. package/lib/gtfs-realtime/service-alerts.js +0 -34
  70. package/lib/gtfs-realtime/stop-time-updates.js +0 -32
  71. package/lib/gtfs-realtime/trip-updates.js +0 -32
  72. package/lib/gtfs-realtime/vehicle-positions.js +0 -32
  73. package/lib/gtfs-ride/board-alights.js +0 -32
  74. package/lib/gtfs-ride/ride-feed-infos.js +0 -32
  75. package/lib/gtfs-ride/rider-trips.js +0 -32
  76. package/lib/gtfs-ride/riderships.js +0 -32
  77. package/lib/gtfs-ride/trip-capacities.js +0 -32
  78. package/lib/gtfs.js +0 -261
  79. package/lib/import.js +0 -803
  80. package/lib/log-utils.js +0 -73
  81. package/lib/non-standard/timetable-notes-references.js +0 -32
  82. package/lib/non-standard/timetable-notes.js +0 -32
  83. package/lib/non-standard/timetable-pages.js +0 -32
  84. package/lib/non-standard/timetable-stop-order.js +0 -32
  85. package/lib/non-standard/timetables.js +0 -32
  86. package/lib/non-standard/trips-dated-vehicle-journey.js +0 -32
  87. package/lib/ods/deadhead-times.js +0 -32
  88. package/lib/ods/deadheads.js +0 -32
  89. package/lib/ods/ops-locations.js +0 -32
  90. package/lib/ods/run-events.js +0 -32
  91. package/lib/ods/runs-pieces.js +0 -32
  92. package/lib/utils.js +0 -178
  93. package/models/gtfs/agency.js +0 -49
  94. package/models/gtfs/areas.js +0 -19
  95. package/models/gtfs/attributions.js +0 -68
  96. package/models/gtfs/booking-rules.js +0 -92
  97. package/models/gtfs/calendar-dates.js +0 -34
  98. package/models/gtfs/calendar.js +0 -76
  99. package/models/gtfs/fare-attributes.js +0 -48
  100. package/models/gtfs/fare-leg-rules.js +0 -55
  101. package/models/gtfs/fare-media.js +0 -26
  102. package/models/gtfs/fare-products.js +0 -35
  103. package/models/gtfs/fare-rules.js +0 -34
  104. package/models/gtfs/fare-transfer-rules.js +0 -56
  105. package/models/gtfs/feed-info.js +0 -50
  106. package/models/gtfs/frequencies.js +0 -46
  107. package/models/gtfs/levels.js +0 -25
  108. package/models/gtfs/location-group-stops.js +0 -22
  109. package/models/gtfs/location-groups.js +0 -19
  110. package/models/gtfs/locations.js +0 -12
  111. package/models/gtfs/networks.js +0 -20
  112. package/models/gtfs/pathways.js +0 -74
  113. package/models/gtfs/route-networks.js +0 -21
  114. package/models/gtfs/routes.js +0 -79
  115. package/models/gtfs/shapes.js +0 -41
  116. package/models/gtfs/stop-areas.js +0 -20
  117. package/models/gtfs/stop-times.js +0 -120
  118. package/models/gtfs/stops.js +0 -85
  119. package/models/gtfs/timeframes.js +0 -29
  120. package/models/gtfs/transfers.js +0 -56
  121. package/models/gtfs/translations.js +0 -48
  122. package/models/gtfs/trips.js +0 -70
  123. package/models/gtfs-plus/calendar-attributes.js +0 -22
  124. package/models/gtfs-plus/directions.js +0 -29
  125. package/models/gtfs-plus/route-attributes.js +0 -34
  126. package/models/gtfs-plus/stop-attributes.js +0 -35
  127. package/models/gtfs-realtime/service-alert-targets.js +0 -37
  128. package/models/gtfs-realtime/service-alerts.js +0 -60
  129. package/models/gtfs-realtime/stop-time-updates.js +0 -85
  130. package/models/gtfs-realtime/trip-updates.js +0 -75
  131. package/models/gtfs-realtime/vehicle-positions.js +0 -135
  132. package/models/gtfs-ride/board-alight.js +0 -132
  133. package/models/gtfs-ride/ride-feed-info.js +0 -40
  134. package/models/gtfs-ride/rider-trip.js +0 -113
  135. package/models/gtfs-ride/ridership.js +0 -127
  136. package/models/gtfs-ride/trip-capacity.js +0 -51
  137. package/models/models.js +0 -120
  138. package/models/non-standard/timetable-notes-references.js +0 -50
  139. package/models/non-standard/timetable-notes.js +0 -24
  140. package/models/non-standard/timetable-pages.js +0 -23
  141. package/models/non-standard/timetable-stop-order.js +0 -32
  142. package/models/non-standard/timetables.js +0 -144
  143. package/models/non-standard/trips-dated-vehicle-journey.js +0 -34
  144. package/models/ods/deadhead-times.js +0 -65
  145. package/models/ods/deadheads.js +0 -60
  146. package/models/ods/ops-locations.js +0 -46
  147. package/models/ods/run-events.js +0 -70
  148. package/models/ods/runs-pieces.js +0 -59
  149. package/test/fixture/caltrain_20160406.zip +0 -0
  150. package/test/mocha/advanced-query.js +0 -74
  151. package/test/mocha/delete-db.js +0 -62
  152. package/test/mocha/export-gtfs.js +0 -147
  153. package/test/mocha/fare-transfer-rules.js +0 -32
  154. package/test/mocha/get-agencies.js +0 -90
  155. package/test/mocha/get-areas.js +0 -27
  156. package/test/mocha/get-attributions.js +0 -27
  157. package/test/mocha/get-board-alights.js +0 -28
  158. package/test/mocha/get-booking-rules.js +0 -28
  159. package/test/mocha/get-calendar-attributes.js +0 -33
  160. package/test/mocha/get-calendar-dates.js +0 -107
  161. package/test/mocha/get-calendars.js +0 -94
  162. package/test/mocha/get-directions.js +0 -28
  163. package/test/mocha/get-fare-attributes.js +0 -51
  164. package/test/mocha/get-fare-leg-rules.js +0 -27
  165. package/test/mocha/get-fare-media.js +0 -27
  166. package/test/mocha/get-fare-products.js +0 -27
  167. package/test/mocha/get-fare-rules.js +0 -50
  168. package/test/mocha/get-feed-info.js +0 -28
  169. package/test/mocha/get-frequencies.js +0 -28
  170. package/test/mocha/get-levels.js +0 -28
  171. package/test/mocha/get-location-group-stops.js +0 -33
  172. package/test/mocha/get-location-groups.js +0 -28
  173. package/test/mocha/get-locations.js +0 -69
  174. package/test/mocha/get-networks.js +0 -28
  175. package/test/mocha/get-pathways.js +0 -28
  176. package/test/mocha/get-ride-feed-infos.js +0 -24
  177. package/test/mocha/get-rider-trips.js +0 -28
  178. package/test/mocha/get-riderships.js +0 -28
  179. package/test/mocha/get-route-attributes.js +0 -33
  180. package/test/mocha/get-route-networks.js +0 -28
  181. package/test/mocha/get-routes.js +0 -143
  182. package/test/mocha/get-shapes-as-geojson.js +0 -92
  183. package/test/mocha/get-shapes.js +0 -240
  184. package/test/mocha/get-stop-attributes.js +0 -28
  185. package/test/mocha/get-stops-as-geojson.js +0 -87
  186. package/test/mocha/get-stops.js +0 -343
  187. package/test/mocha/get-stoptimes.js +0 -67
  188. package/test/mocha/get-timeframes.js +0 -28
  189. package/test/mocha/get-timetable-pages.js +0 -28
  190. package/test/mocha/get-timetable-stop-orders.js +0 -33
  191. package/test/mocha/get-timetables.js +0 -28
  192. package/test/mocha/get-transfers.js +0 -28
  193. package/test/mocha/get-translations.js +0 -28
  194. package/test/mocha/get-trip-capacities.js +0 -28
  195. package/test/mocha/get-trips.js +0 -53
  196. package/test/mocha/import-gtfs.js +0 -173
  197. package/test/mocha/open-db.js +0 -149
  198. package/test/mocha/raw-query.js +0 -34
  199. package/test/test-config.js +0 -12
@@ -1,34 +0,0 @@
1
- const model = {
2
- filenameBase: 'trips_dated_vehicle_journeys',
3
- filenameExtension: 'txt',
4
- nonstandard: true,
5
- schema: [
6
- {
7
- name: 'trip_id',
8
- type: 'text',
9
- required: true,
10
- index: true,
11
- prefix: true,
12
- },
13
- {
14
- name: 'operating_day_date',
15
- type: 'text',
16
- index: true,
17
- required: true,
18
- },
19
- {
20
- name: 'dated_vehicle_journey_gid',
21
- type: 'text',
22
- required: true,
23
- },
24
- {
25
- name: 'journey_number',
26
- type: 'integer',
27
- min: 0,
28
- max: 65535,
29
- index: true,
30
- },
31
- ],
32
- };
33
-
34
- export default model;
@@ -1,65 +0,0 @@
1
- const model = {
2
- filenameBase: 'deadhead_times',
3
- filenameExtension: 'txt',
4
- nonstandard: true,
5
- extension: 'ods',
6
- schema: [
7
- {
8
- name: 'id',
9
- type: 'integer',
10
- primary: true,
11
- prefix: true,
12
- },
13
- {
14
- name: 'deadhead_id',
15
- type: 'text',
16
- required: true,
17
- index: true,
18
- prefix: true,
19
- },
20
- {
21
- name: 'arrival_time',
22
- type: 'text',
23
- required: true,
24
- },
25
- {
26
- name: 'arrival_timestamp',
27
- type: 'integer',
28
- index: true,
29
- },
30
- {
31
- name: 'departure_time',
32
- type: 'text',
33
- required: true,
34
- },
35
- {
36
- name: 'departure_timestamp',
37
- type: 'integer',
38
- index: true,
39
- },
40
- {
41
- name: 'ops_location_id',
42
- type: 'text',
43
- prefix: true,
44
- },
45
- {
46
- name: 'stop_id',
47
- type: 'text',
48
- prefix: true,
49
- },
50
- {
51
- name: 'location_sequence',
52
- type: 'integer',
53
- required: true,
54
- min: 0,
55
- index: true,
56
- },
57
- {
58
- name: 'shape_dist_traveled',
59
- type: 'real',
60
- min: 0,
61
- },
62
- ],
63
- };
64
-
65
- export default model;
@@ -1,60 +0,0 @@
1
- const model = {
2
- filenameBase: 'deadheads',
3
- filenameExtension: 'txt',
4
- nonstandard: true,
5
- extension: 'ods',
6
- schema: [
7
- {
8
- name: 'deadhead_id',
9
- type: 'text',
10
- primary: true,
11
- required: true,
12
- prefix: true,
13
- },
14
- {
15
- name: 'service_id',
16
- type: 'text',
17
- required: true,
18
- prefix: true,
19
- },
20
- {
21
- name: 'block_id',
22
- type: 'text',
23
- required: true,
24
- index: true,
25
- prefix: true,
26
- },
27
- {
28
- name: 'shape_id',
29
- type: 'text',
30
- index: true,
31
- prefix: true,
32
- },
33
- {
34
- name: 'to_trip_id',
35
- type: 'text',
36
- index: true,
37
- prefix: true,
38
- },
39
- {
40
- name: 'from_trip_id',
41
- type: 'text',
42
- index: true,
43
- prefix: true,
44
- },
45
- {
46
- name: 'to_deadhead_id',
47
- type: 'text',
48
- index: true,
49
- prefix: true,
50
- },
51
- {
52
- name: 'from_deadhead_id',
53
- type: 'text',
54
- index: true,
55
- prefix: true,
56
- },
57
- ],
58
- };
59
-
60
- export default model;
@@ -1,46 +0,0 @@
1
- const model = {
2
- filenameBase: 'ops_locations',
3
- filenameExtension: 'txt',
4
- nonstandard: true,
5
- extension: 'ods',
6
- schema: [
7
- {
8
- name: 'ops_location_id',
9
- type: 'text',
10
- primary: true,
11
- required: true,
12
- prefix: true,
13
- },
14
- {
15
- name: 'ops_location_code',
16
- type: 'text',
17
- },
18
- {
19
- name: 'ops_location_name',
20
- type: 'text',
21
- required: true,
22
- nocase: true,
23
- },
24
- {
25
- name: 'ops_location_desc',
26
- type: 'text',
27
- nocase: true,
28
- },
29
- {
30
- name: 'ops_location_lat',
31
- type: 'real',
32
- required: true,
33
- min: -90,
34
- max: 90,
35
- },
36
- {
37
- name: 'ops_location_lon',
38
- type: 'real',
39
- required: true,
40
- min: -180,
41
- max: 180,
42
- },
43
- ],
44
- };
45
-
46
- export default model;
@@ -1,70 +0,0 @@
1
- const model = {
2
- filenameBase: 'run_event',
3
- filenameExtension: 'txt',
4
- nonstandard: true,
5
- extension: 'ods',
6
- schema: [
7
- {
8
- name: 'run_event_id',
9
- type: 'text',
10
- primary: true,
11
- required: true,
12
- prefix: true,
13
- },
14
- {
15
- name: 'piece_id',
16
- type: 'text',
17
- required: true,
18
- prefix: true,
19
- },
20
- {
21
- name: 'event_type',
22
- type: 'integer',
23
- required: true,
24
- min: 0,
25
- index: true,
26
- },
27
- {
28
- name: 'event_name',
29
- type: 'text',
30
- nocase: true,
31
- },
32
- {
33
- name: 'event_time',
34
- type: 'text',
35
- required: true,
36
- },
37
- {
38
- name: 'event_duration',
39
- type: 'integer',
40
- required: true,
41
- min: 0,
42
- },
43
- {
44
- name: 'event_from_location_type',
45
- type: 'integer',
46
- min: 0,
47
- max: 1,
48
- index: true,
49
- },
50
- {
51
- name: 'event_from_location_id',
52
- type: 'text',
53
- prefix: true,
54
- },
55
- {
56
- name: 'event_to_location_type',
57
- type: 'integer',
58
- min: 0,
59
- max: 1,
60
- index: true,
61
- },
62
- {
63
- name: 'event_to_location_id',
64
- type: 'text',
65
- prefix: true,
66
- },
67
- ],
68
- };
69
-
70
- export default model;
@@ -1,59 +0,0 @@
1
- const model = {
2
- filenameBase: 'runs_pieces',
3
- filenameExtension: 'txt',
4
- nonstandard: true,
5
- extension: 'ods',
6
- schema: [
7
- {
8
- name: 'run_id',
9
- type: 'text',
10
- required: true,
11
- },
12
- {
13
- name: 'piece_id',
14
- type: 'text',
15
- primary: true,
16
- required: true,
17
- },
18
- {
19
- name: 'start_type',
20
- type: 'integer',
21
- required: true,
22
- min: 0,
23
- max: 2,
24
- index: true,
25
- },
26
- {
27
- name: 'start_trip_id',
28
- type: 'text',
29
- required: true,
30
- index: true,
31
- },
32
- {
33
- name: 'start_trip_position',
34
- type: 'integer',
35
- min: 0,
36
- },
37
- {
38
- name: 'end_type',
39
- type: 'integer',
40
- required: true,
41
- min: 0,
42
- max: 2,
43
- index: true,
44
- },
45
- {
46
- name: 'end_trip_id',
47
- type: 'text',
48
- required: true,
49
- index: true,
50
- },
51
- {
52
- name: 'end_trip_position',
53
- type: 'integer',
54
- min: 0,
55
- },
56
- ],
57
- };
58
-
59
- export default model;
Binary file
@@ -1,74 +0,0 @@
1
- /* eslint-env mocha */
2
-
3
- import should from 'should';
4
-
5
- import config from '../test-config.js';
6
- import { openDb, closeDb, importGtfs, advancedQuery } from '../../index.js';
7
-
8
- describe('advancedQuery():', () => {
9
- before(async () => {
10
- openDb(config);
11
- await importGtfs(config);
12
- });
13
-
14
- after(() => {
15
- const db = openDb(config);
16
- closeDb(db);
17
- });
18
-
19
- it('should return empty array if no trips', () => {
20
- const routeId = 'fake-route-id';
21
-
22
- const advancedQueryOptions = {
23
- query: {
24
- route_id: routeId,
25
- },
26
- fields: ['stop_times.trip_id', 'arrival_time'],
27
- join: [
28
- {
29
- type: 'INNER',
30
- table: 'trips',
31
- on: 'stop_times.trip_id=trips.trip_id',
32
- },
33
- ],
34
- };
35
- const results = advancedQuery('stop_times', advancedQueryOptions);
36
-
37
- should.exists(results);
38
- results.should.have.length(0);
39
- });
40
-
41
- it('should return expected trips with joined trip', () => {
42
- const tripId = '329';
43
-
44
- const advancedQueryOptions = {
45
- query: {
46
- 'stop_times.trip_id': tripId,
47
- },
48
- fields: ['stop_times.trip_id', 'arrival_time'],
49
- join: [
50
- {
51
- type: 'INNER',
52
- table: 'trips',
53
- on: 'stop_times.trip_id=trips.trip_id',
54
- },
55
- ],
56
- };
57
- const results = advancedQuery('stop_times', advancedQueryOptions);
58
-
59
- const expectedResults = [
60
- { trip_id: '329', arrival_time: '07:56:00' },
61
- { trip_id: '329', arrival_time: '08:03:00' },
62
- { trip_id: '329', arrival_time: '08:16:00' },
63
- { trip_id: '329', arrival_time: '08:27:00' },
64
- { trip_id: '329', arrival_time: '08:35:00' },
65
- { trip_id: '329', arrival_time: '08:44:00' },
66
- { trip_id: '329', arrival_time: '08:52:00' },
67
- { trip_id: '329', arrival_time: '09:09:00' },
68
- ];
69
-
70
- should.exist(results);
71
- results.length.should.equal(8);
72
- expectedResults.should.match(results);
73
- });
74
- });
@@ -1,62 +0,0 @@
1
- /* eslint-env mocha */
2
-
3
- import fs from 'fs';
4
-
5
- import config from '../test-config.js';
6
- import { deleteDb, openDb, importGtfs } from '../../index.js';
7
-
8
- const db2Config = {
9
- agencies: [
10
- {
11
- ...config.agencies[0],
12
- exclude: ['shapes'],
13
- },
14
- ],
15
- verbose: false,
16
- sqlitePath: './tmpdb2',
17
- };
18
-
19
- const db3Config = {
20
- agencies: [
21
- {
22
- ...config.agencies[0],
23
- exclude: ['shapes'],
24
- },
25
- ],
26
- verbose: false,
27
- sqlitePath: './tmpdb3',
28
- };
29
-
30
- describe('openDb():', () => {
31
- before(async () => {});
32
-
33
- after(() => {
34
- // Delete extra databases
35
- fs.rmSync(db2Config.sqlitePath, { force: true });
36
- fs.rmSync(db3Config.sqlitePath, { force: true });
37
- });
38
-
39
- it('should allow deleting a database', async () => {
40
- const db2 = openDb(db2Config);
41
- await importGtfs(db2Config);
42
-
43
- const db3 = openDb(db3Config);
44
- await importGtfs(db3Config);
45
-
46
- db2.name.should.equal('./tmpdb2');
47
- db3.name.should.equal('./tmpdb3');
48
-
49
- fs.existsSync(db2Config.sqlitePath).should.equal(true);
50
- fs.existsSync(db3Config.sqlitePath).should.equal(true);
51
-
52
- deleteDb(db2);
53
-
54
- fs.existsSync(db2Config.sqlitePath).should.equal(false);
55
- fs.existsSync(db3Config.sqlitePath).should.equal(true);
56
-
57
- deleteDb(db3);
58
-
59
- fs.existsSync(db2Config.sqlitePath).should.equal(false);
60
- fs.existsSync(db3Config.sqlitePath).should.equal(false);
61
- });
62
- });
@@ -1,147 +0,0 @@
1
- /* eslint-env mocha */
2
- /* eslint-disable max-nested-callbacks */
3
-
4
- import path from 'node:path';
5
- import { createReadStream, existsSync } from 'node:fs';
6
- import { rm } from 'node:fs/promises';
7
- import { parse } from 'csv-parse';
8
- import should from 'should';
9
-
10
- import {
11
- unzip,
12
- generateFolderName,
13
- prepDirectory,
14
- } from '../../lib/file-utils.js';
15
- import config from '../test-config.js';
16
- import {
17
- openDb,
18
- closeDb,
19
- importGtfs,
20
- exportGtfs,
21
- getAgencies,
22
- } from '../../index.js';
23
- import models from '../../models/models.js';
24
-
25
- describe('exportGtfs():', function () {
26
- before(async () => {
27
- openDb(config);
28
- await importGtfs(config);
29
- });
30
-
31
- after(async () => {
32
- const db = openDb(config);
33
- closeDb(db);
34
- });
35
-
36
- this.timeout(10000);
37
- describe('Export GTFS', () => {
38
- it('should be able to export GTFS', async () => {
39
- await exportGtfs(config);
40
- });
41
- });
42
-
43
- describe('Verify data exported', () => {
44
- const countData = {};
45
- const temporaryDir = path.join(import.meta.dirname, '../fixture/tmp/');
46
-
47
- before(async () => {
48
- await prepDirectory(temporaryDir);
49
- await unzip(config.agencies[0].path, temporaryDir);
50
-
51
- await Promise.all(
52
- models.map((model) => {
53
- const filePath = path.join(
54
- temporaryDir,
55
- `${model.filenameBase}.${model.filenameExtension}`,
56
- );
57
-
58
- // GTFS has optional files
59
- if (!existsSync(filePath)) {
60
- countData[model.filenameBase] = 0;
61
- return false;
62
- }
63
-
64
- const parser = parse(
65
- {
66
- columns: true,
67
- relax_quotes: true,
68
- trim: true,
69
- skip_empty_lines: true,
70
- },
71
- (error, data) => {
72
- if (error) {
73
- throw new Error(error);
74
- }
75
-
76
- countData[model.filenameBase] = data.length;
77
- },
78
- );
79
-
80
- return createReadStream(filePath)
81
- .pipe(parser)
82
- .on('error', (error) => {
83
- countData[model.collection] = 0;
84
- throw new Error(error);
85
- });
86
- }),
87
- );
88
-
89
- await importGtfs(config);
90
- });
91
-
92
- after(async () => {
93
- const agencies = getAgencies({}, ['agency_name']);
94
- await rm(
95
- path.join(
96
- process.cwd(),
97
- 'gtfs-export',
98
- generateFolderName(agencies[0].agency_name),
99
- ),
100
- { recursive: true, force: true },
101
- );
102
- });
103
-
104
- for (const model of models) {
105
- it(`should import the same number of ${model.filenameBase}`, async () => {
106
- const agencies = getAgencies({}, ['agency_name']);
107
- const filePath = path.join(
108
- process.cwd(),
109
- 'gtfs-export',
110
- generateFolderName(agencies[0].agency_name),
111
- `${model.filenameBase}.${model.filenameExtension}`,
112
- );
113
-
114
- // GTFS has optional files
115
- if (!existsSync(filePath)) {
116
- const result = 0;
117
- result.should.equal(countData[model.filenameBase]);
118
- return;
119
- }
120
-
121
- const parser = parse(
122
- {
123
- columns: true,
124
- relax_quotes: true,
125
- trim: true,
126
- skip_empty_lines: true,
127
- },
128
- (error, data) => {
129
- if (error) {
130
- throw new Error(error);
131
- }
132
-
133
- should.not.exist(error);
134
-
135
- data.length.should.equal(countData[model.filenameBase]);
136
- },
137
- );
138
-
139
- return createReadStream(filePath)
140
- .pipe(parser)
141
- .on('error', (error) => {
142
- should.not.exist(error);
143
- });
144
- });
145
- }
146
- });
147
- });
@@ -1,32 +0,0 @@
1
- /* eslint-env mocha */
2
-
3
- import should from 'should';
4
-
5
- import config from '../test-config.js';
6
- import {
7
- openDb,
8
- closeDb,
9
- importGtfs,
10
- getFareTransferRules,
11
- } from '../../index.js';
12
-
13
- describe('getFareTransferRules():', () => {
14
- before(async () => {
15
- openDb(config);
16
- await importGtfs(config);
17
- });
18
-
19
- after(() => {
20
- const db = openDb(config);
21
- closeDb(db);
22
- });
23
-
24
- it('should return empty array if no fare_transfer_rules exist', () => {
25
- const transferId = 'fake-transfer-id';
26
- const results = getFareTransferRules({
27
- transfer_id: transferId,
28
- });
29
- should.exists(results);
30
- results.should.have.length(0);
31
- });
32
- });