gongxiangp2/scripts/detail-generator-migration.test.mjs

20 lines
1.4 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { assertDetailGeneratorEvidence } from './safe-production-migrate.mjs'
test('release refuses a missing generator schema instead of enabling a broken feature', () => {
assert.throws(() => assertDetailGeneratorEvidence({ columns: [] }), /detail_generator_projects.id/)
})
test('release refuses incorrectly typed private state/lease fields', () => {
const columns = []
for (const [table, names] of Object.entries({
detail_generator_projects: ['id', 'owner_id', 'document', 'revision'],
detail_generator_assets: ['id', 'project_id', 'owner_id', 'storage_key', 'byte_size', 'mime_type'],
detail_generator_jobs: ['id', 'project_id', 'owner_id', 'status', 'idempotency_key', 'checkpoint', 'project_revision', 'lease_token', 'lease_expires_at'],
detail_generator_brand_profiles: ['id', 'name', 'profile', 'revision'],
})) for (const name of names) columns.push({ table_name: table, column_name: name, data_type: ['document','checkpoint','profile'].includes(name) ? 'jsonb' : ['revision','project_revision','byte_size'].includes(name) ? 'integer' : name === 'lease_expires_at' ? 'timestamp with time zone' : 'text' })
assert.doesNotThrow(() => assertDetailGeneratorEvidence({ columns }))
columns.find(row => row.column_name === 'lease_expires_at').data_type = 'text'
assert.throws(() => assertDetailGeneratorEvidence({ columns }), /lease_expires_at/)
})