Files
Jyotisha/frontend/tests/rectification-case-resume-scoring-v2-migration.test.ts
T

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