28 lines
1.6 KiB
TypeScript
28 lines
1.6 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import test from "node:test";
|
|
|
|
const migration = readFileSync(new URL(
|
|
"../supabase/migrations/20260731010000_rectification_case_resume_and_scoring_v2.sql",
|
|
import.meta.url,
|
|
), "utf8");
|
|
|
|
test("scoring v2 migration only resumes an answerable or actively processing Case", () => {
|
|
assert.match(migration, /v_case\.algorithm_version = p_algorithm_version/);
|
|
assert.match(migration, /v_case\.status = 'awaiting_answer'[\s\S]*v_case\.current_question is not null/);
|
|
assert.match(migration, /v_case\.status = 'processing'[\s\S]*birth_time_rectification_v4_jobs[\s\S]*status in \('pending', 'processing'\)/);
|
|
assert.doesNotMatch(migration, /v_case\.status = 'paused'/);
|
|
});
|
|
|
|
test("scoring v2 migration retires incompatible unfinished work without touching profile birth time", () => {
|
|
assert.match(migration, /algorithm_version <> 'rectification-v5-matrix-scoring-2'[\s\S]*accepted_range_start is null/);
|
|
assert.match(migration, /set status = 'stale'/);
|
|
assert.match(migration, /set status = 'abandoned', phase = 'complete', current_question = null/);
|
|
assert.doesNotMatch(migration, /profiles\.active_birth_time|update\s+public\.profiles/i);
|
|
});
|
|
|
|
test("scoring v2 migration permits historical snapshots but defaults new artifacts to v2", () => {
|
|
assert.match(migration, /alter column algorithm_version set default 'rectification-v5-matrix-scoring-2'/);
|
|
assert.match(migration, /rectification-v4-range-scoring-1[\s\S]*rectification-v5-matrix-scoring-1[\s\S]*rectification-v5-matrix-scoring-2/);
|
|
});
|