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

104 lines
3.0 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
createPluginPackagePromptCatalogResult,
PLUGIN_PACKAGE_PROMPT_CATALOG_SCHEMA,
} = require('../dist/prompt/pluginPackagePromptCatalog.js');
const {
PostgresPluginPackagePromptCatalogService,
} = require('../dist/prompt/postgresPluginPackagePromptApplication.js');
const {
createInitialPluginPackageAutomationPublication,
} = require('@qinglong/runtime-core/plugin-package-automation-publication');
const {
pluginPackageTaskReconciliationFixture,
} = require('../../../test/contracts/pluginPackageTaskReconciliationRepositoryContract.cjs');
function publication() {
const source = pluginPackageTaskReconciliationFixture('prompt-catalog', {
profile: 'cluster-control',
prompts: [
{
schema: 'qinglong/plugin-package-prompt-resource@v1',
id: 'summary',
name: 'Summary',
description: 'Summarizes input',
template: 'Private template {{subject}}.',
parameters: [
{
name: 'subject',
description: 'Text to summarize',
required: true,
},
],
},
],
});
return createInitialPluginPackageAutomationPublication(
source.revision,
source.registry,
20_000,
);
}
test('catalog projection excludes Prompt template content', () => {
const current = publication();
const result = createPluginPackagePromptCatalogResult(
current.target.projectId,
current.target.packageName,
current,
);
assert.equal(result.schema, PLUGIN_PACKAGE_PROMPT_CATALOG_SCHEMA);
assert.deepEqual(result.prompts, [
{
id: 'summary',
name: 'Summary',
description: 'Summarizes input',
parameters: [
{
name: 'subject',
description: 'Text to summarize',
required: true,
},
],
},
]);
assert.equal(JSON.stringify(result).includes('Private template'), false);
});
test('PostgreSQL catalog reads one current publication and returns empty for absence', async () => {
const current = publication();
const queries = [];
const service = new PostgresPluginPackagePromptCatalogService({
async query(sql, parameters) {
queries.push({ sql, parameters });
return { rows: [{ publicationJson: current }] };
},
});
const result = await service.inspect(
current.target.projectId,
current.target.packageName,
);
assert.equal(result.found, true);
assert.equal(queries.length, 1);
assert.match(queries[0].sql, /LIMIT 2/);
const absent = new PostgresPluginPackagePromptCatalogService({
async query() {
return { rows: [] };
},
});
assert.deepEqual(
await absent.inspect(current.target.projectId, current.target.packageName),
{
schema: PLUGIN_PACKAGE_PROMPT_CATALOG_SCHEMA,
projectId: current.target.projectId,
packageName: current.target.packageName,
found: false,
publicationState: null,
prompts: [],
},
);
});