Files
qinglong/packages/ql3-ai/test/pluginPackagePromptOutputRetention.test.cjs
T

82 lines
2.5 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
InvalidPluginPackagePromptOutputRetentionPolicyCatalogError,
createPluginPackagePromptOutputRetentionPolicyCatalogResolver,
} = require('../dist/prompt-output/pluginPackagePromptOutputRetention');
const {
pluginPackagePromptOutputArtifactRetentionPolicyDigest,
} = require('../dist/prompt-output/pluginPackagePromptOutputArtifact');
function entry(projectId, revision, retentionMs) {
const policy = { revision, retentionMs };
return {
projectId,
policy,
policyDigest:
pluginPackagePromptOutputArtifactRetentionPolicyDigest(policy),
};
}
test('resolves one exact digest-bound Project retention policy', async () => {
const expected = entry('project-a', 'retention-v1', 3_600_000);
const resolver =
createPluginPackagePromptOutputRetentionPolicyCatalogResolver({
schemaVersion: 1,
policies: [expected, entry('project-b', 'retention-v2', 7_200_000)],
});
assert.deepEqual(
await resolver.resolve({
projectId: expected.projectId,
revision: expected.policy.revision,
}),
expected.policy,
);
assert.equal(
await resolver.resolve({
projectId: expected.projectId,
revision: 'retention-v2',
}),
null,
);
});
test('rejects rewritten, duplicate, widened and unbounded policy catalogs', () => {
const expected = entry('project-a', 'retention-v1', 3_600_000);
assert.throws(
() =>
createPluginPackagePromptOutputRetentionPolicyCatalogResolver({
schemaVersion: 1,
policies: [{ ...expected, policyDigest: '0'.repeat(64) }],
}),
InvalidPluginPackagePromptOutputRetentionPolicyCatalogError,
);
assert.throws(
() =>
createPluginPackagePromptOutputRetentionPolicyCatalogResolver({
schemaVersion: 1,
policies: [expected, expected],
}),
InvalidPluginPackagePromptOutputRetentionPolicyCatalogError,
);
assert.throws(
() =>
createPluginPackagePromptOutputRetentionPolicyCatalogResolver({
schemaVersion: 1,
policies: [{ ...expected, enabled: true }],
}),
InvalidPluginPackagePromptOutputRetentionPolicyCatalogError,
);
assert.throws(
() =>
createPluginPackagePromptOutputRetentionPolicyCatalogResolver({
schemaVersion: 1,
policies: Array.from({ length: 129 }, (_, index) =>
entry(`project-${index}`, 'retention-v1', 3_600_000),
),
}),
InvalidPluginPackagePromptOutputRetentionPolicyCatalogError,
);
});