Files
TREK/server/tests/unit/db/tour-ski-options-column.test.ts
T

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);
});