28 lines
1.5 KiB
JavaScript
28 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const os = require('node:os');
|
|
const path = require('node:path');
|
|
const test = require('node:test');
|
|
const database = require('../../src/database');
|
|
const { createSqliteTrophyProgressionPlanRepository } = require('../../src/services/trophy-progression-planner-service');
|
|
|
|
test('production database stores immutable synthetic progression plans', async t => {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'chimera-progression-'));
|
|
t.after(() => { database.close(); fs.rmSync(root, { recursive: true, force: true }); });
|
|
database.configure({ dataDir: root, logger: { info() {}, warn() {}, error() {} } });
|
|
await database.initialize();
|
|
const repository = createSqliteTrophyProgressionPlanRepository({ db: database });
|
|
const plan = {
|
|
id: `trophy-progression-${'a'.repeat(64)}`, planSha256: 'a'.repeat(64), schemaVersion: 1,
|
|
mode: 'synthetic_unlock', synthetic: true, catalog: { key: 'np:11111111111111111111111111111111', revision: 'one', sha256: 'b'.repeat(64), title: 'Fixture' },
|
|
createdAt: 1_800_000_000_000, items: [{ trophyId: 1, proposedEarnedDateTime: '2026-01-01T00:00:00.000Z' }],
|
|
};
|
|
const saved = repository.save(plan);
|
|
assert.equal(saved.id, plan.id);
|
|
assert.equal(repository.get(plan.id).catalog.title, 'Fixture');
|
|
assert.equal(repository.list({ limit: 10 }).length, 1);
|
|
assert.throws(() => database.runMutatingSqlWithParams('UPDATE trophy_progression_plans SET mode=@mode', { mode: 'timestamp_edit' }), /immutable/);
|
|
});
|