Files
qinglong/packages/ql3-local-sqlite/test/dataDirectoryApplicationCommit.test.cjs

61 lines
1.9 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
LocalDataDirectoryApplicationCommitError,
createLocalDataDirectoryApplicationCommit,
normalizeLocalDataDirectoryApplicationCommit,
} = require('../dist/adoption/data-directory/dataDirectoryAdoptionDatabase.js');
function adoptionRecord() {
return {
mutationId: '00000000-0000-4000-8000-000000000001',
projectId: 'project-edge-1',
profile: 'edge',
sourceStageManifestDigest: '1'.repeat(64),
transformationDigest: '2'.repeat(64),
modelDigest: '3'.repeat(64),
publicationDigest: '4'.repeat(64),
receiptDigest: '5'.repeat(64),
committedAtMs: 1_000,
receipt: {
secretCount: 3,
environmentSecretCount: 2,
sshSecretCount: 1,
},
};
}
test('canonical data application commit is exact and replayable', () => {
const commit = createLocalDataDirectoryApplicationCommit(adoptionRecord());
assert.equal(commit.kind, 'qinglong3-legacy-data-directory-application');
assert.equal(commit.state, 'committed');
assert.equal(commit.profile, 'edge');
assert.equal(commit.receiptDigest, '5'.repeat(64));
assert.equal(commit.commitDigest.length, 64);
assert.deepEqual(
normalizeLocalDataDirectoryApplicationCommit(
JSON.parse(JSON.stringify(commit)),
),
commit,
);
});
test('data application commit rejects shape, count, and digest drift', () => {
const commit = createLocalDataDirectoryApplicationCommit(adoptionRecord());
for (const drift of [
{ ...commit, unexpected: true },
{ ...commit, secretCount: 4 },
{ ...commit, receiptDigest: '0'.repeat(64) },
{
...commit,
reclamation: { ...commit.reclamation, physicalErasureGuaranteed: true },
},
]) {
assert.throws(
() => normalizeLocalDataDirectoryApplicationCommit(drift),
LocalDataDirectoryApplicationCommitError,
);
}
});