mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-23 07:26:30 +00:00
46 lines
2.3 KiB
TypeScript
46 lines
2.3 KiB
TypeScript
/**
|
|
* `Migration20200101046150_a_ski_tour_keeps_its_piste_router_options` gives a
|
|
* tour one more column, `ski_options`: the JSON text of the piste router's
|
|
* options and the build its legs ran on. Every tour that was there keeps its
|
|
* columns and reads NULL in the new one; the column takes the server's JSON.
|
|
* A tour kept in a collection gets the same column.
|
|
*/
|
|
import { createMigrationOrm, migrateTo, pendingNames, rawExec, rawQuery } from '../../helpers/migration-step';
|
|
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
const TARGET = 'Migration20200101046150_a_ski_tour_keeps_its_piste_router_options';
|
|
|
|
describe('the ski options column', () => {
|
|
it('TOURSKIOPT-001: adds a nullable column, leaves every tour as it was and takes the JSON the server writes', async () => {
|
|
const orm = await createMigrationOrm();
|
|
try {
|
|
const names = await pendingNames(orm);
|
|
const idx = names.indexOf(TARGET);
|
|
expect(idx).toBeGreaterThan(0);
|
|
await migrateTo(orm, names[idx - 1] as string);
|
|
await rawExec(
|
|
orm,
|
|
"INSERT INTO users (id, username, email, password_hash) VALUES (1, 'owner', 'owner@test', 'x')",
|
|
);
|
|
await rawExec(orm, "INSERT INTO trips (id, user_id, title) VALUES (10, 1, 'Alps')");
|
|
await rawExec(orm, "INSERT INTO places (id, trip_id, name) VALUES (100, 10, 'Valley run')");
|
|
await rawExec(orm, "INSERT INTO tours (place_id, tour_type, ski_discipline) VALUES (100, 'ski', 'alpine')");
|
|
|
|
await migrateTo(orm, TARGET);
|
|
|
|
expect(await rawQuery(orm, 'SELECT tour_type, ski_discipline, ski_options FROM tours')).toEqual([
|
|
{ tour_type: 'ski', ski_discipline: 'alpine', ski_options: null },
|
|
]);
|
|
const stored = JSON.stringify({ options: { max_difficulty: 'advanced' }, build: '2026-11-02' });
|
|
await rawExec(orm, 'UPDATE tours SET ski_options = ? WHERE place_id = 100', [stored]);
|
|
expect(await rawQuery(orm, 'SELECT ski_options FROM tours')).toEqual([{ ski_options: stored }]);
|
|
// A tour kept in a collection keeps the same column, so its copies keep the options.
|
|
const kept = "SELECT name FROM pragma_table_info('collection_tours') WHERE name = 'ski_options'";
|
|
expect(await rawQuery(orm, kept)).toEqual([{ name: 'ski_options' }]);
|
|
} finally {
|
|
await orm.close(true);
|
|
}
|
|
}, 30000);
|
|
});
|