feat: enhance schedule import functionality with support for day sections and restrictions
This commit is contained in:
@@ -146,6 +146,27 @@ test('PostgreSQL import lifecycle, concurrency, conflicts, rollback and news rev
|
||||
assert.equal(responseBody.trips.some(t => t.departureTime === '05:23:00'), false);
|
||||
assert.equal(Number((await pool.query("SELECT count(*) FROM schedules WHERE day_type='holiday'")).rows[0].count), 2);
|
||||
|
||||
// Route 24 uses separate Mon–Thu and Friday tables; persist their restrictions together.
|
||||
sourceHtml = await fixture('route24');
|
||||
const source24 = parseSchedule(sourceHtml, 'https://ap2polotsk.of.by/ap2/m-24/');
|
||||
const ids24 = [];
|
||||
for (const direction of source24.directions) {
|
||||
const id = (await pool.query("INSERT INTO routes(route_number,name,type) VALUES('24',$1,'bus') RETURNING id", [direction.label])).rows[0].id;
|
||||
ids24.push(id);
|
||||
for (const [index, name] of [direction.stops[0], direction.stops.at(-1)].entries()) {
|
||||
const stop = (await pool.query("INSERT INTO stops(name,location) VALUES($1,ST_GeogFromText('POINT(28.77 55.48)')) RETURNING id", [name])).rows[0].id;
|
||||
await pool.query('INSERT INTO route_stops(route_id,stop_id,sequence) VALUES($1,$2,$3)', [id,stop,index+1]);
|
||||
}
|
||||
}
|
||||
const inspection24 = await service.inspect({ routeIds: ids24, sourceUrl: 'https://ap2polotsk.of.by/ap2/m-24/', userId:1 });
|
||||
const preview24 = await service.preview({ inspectionId:inspection24.id, mappings:inspection24.mappings, validFrom, userId:1 });
|
||||
await service.apply(preview24.id);
|
||||
const saved24 = (await pool.query("SELECT trips FROM schedules WHERE route_id=$1 AND day_type='weekday'", [ids24[0]])).rows[0].trips;
|
||||
assert.equal(saved24.filter(t => t.departureTime === '06:00:00').length, 1);
|
||||
assert.deepEqual(saved24.find(t => t.departureTime === '17:00:00').daysOfWeek, [1,2,3,4]);
|
||||
assert.deepEqual(saved24.find(t => t.departureTime === '15:45:00').daysOfWeek, [5]);
|
||||
assert.equal(Number((await pool.query('SELECT count(*) FROM schedules WHERE route_id=ANY($1::int[])', [ids24])).rows[0].count), 6);
|
||||
|
||||
let news = await service.news(true);
|
||||
assert.equal(news.length, 3);
|
||||
await service.reviewNews({ url: news[0].url, contentHash: news[0].content_hash });
|
||||
|
||||
Reference in New Issue
Block a user