36 lines
1.9 KiB
JavaScript
36 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
// IMP-CODE-02: the migration arrays were extracted from db/database.js into
|
|
// factory modules. These guard the invariants db/database.js relies on:
|
|
// - both modules load and build their arrays (run/check bodies aren't invoked
|
|
// at construction, so empty deps are fine);
|
|
// - the versioned list has no duplicate versions;
|
|
// - every legacy-reconcile version exists in the versioned list (reconcile only
|
|
// marks known migrations as applied — a reconcile version with no versioned
|
|
// counterpart is the drift the in-app assertion warns about).
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const buildVersioned = require('../db/migrations/versionedMigrations');
|
|
const buildReconcile = require('../db/migrations/legacyReconcileMigrations');
|
|
|
|
test('both migration modules build their arrays with no deps needed at construction', () => {
|
|
const versioned = buildVersioned({});
|
|
const reconcile = buildReconcile({});
|
|
assert.ok(Array.isArray(versioned) && versioned.length > 0, 'versioned array non-empty');
|
|
assert.ok(Array.isArray(reconcile) && reconcile.length > 0, 'reconcile array non-empty');
|
|
for (const m of versioned) assert.equal(typeof m.run, 'function', `${m.version} has a run()`);
|
|
for (const m of reconcile) assert.equal(typeof m.check, 'function', `${m.version} has a check()`);
|
|
});
|
|
|
|
test('versioned migration versions are unique', () => {
|
|
const versions = buildVersioned({}).map(m => m.version);
|
|
assert.equal(new Set(versions).size, versions.length, 'no duplicate versions');
|
|
});
|
|
|
|
test('every legacy-reconcile version exists in the versioned list (no drift)', () => {
|
|
const versionedSet = new Set(buildVersioned({}).map(m => m.version));
|
|
const orphans = buildReconcile({}).map(m => m.version).filter(v => !versionedSet.has(v));
|
|
assert.deepEqual(orphans, [], `reconcile versions with no versioned counterpart: ${orphans.join(', ')}`);
|
|
});
|