Files
memind/mindspace-conversation-package-verify.test.mjs

87 lines
2.8 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
conversationPackageVerifyInternals,
verifyConversationPackageManifest,
} from './mindspace-conversation-package-verify.mjs';
test('verifyConversationPackageManifest accepts readable urls and package storage objects', async () => {
const result = await verifyConversationPackageManifest(
{
packageId: 'cp_session-1',
userId: 'user-1',
sessionId: 'session-1',
storagePrefix: 'users/user-1/conversations/session-1',
artifacts: [
{
artifactId: 'ca_page',
kind: 'page',
canonicalUrl: '/api/mindspace/v1/pages/page-1/preview',
},
{
artifactId: 'ca_docx',
kind: 'docx',
storageKey: 'users/user-1/conversations/session-1/artifacts/ca_docx/report.docx',
},
],
},
{
async statObject(key) {
return { key, exists: true };
},
},
);
assert.equal(result.ok, true);
assert.deepEqual(result.issues, []);
});
test('verifyConversationPackageManifest reports missing or unsafe artifact references', async () => {
const result = await verifyConversationPackageManifest(
{
packageId: 'cp_session-1',
userId: 'user-1',
sessionId: 'session-1',
storagePrefix: 'users/user-1/conversations/session-1',
artifacts: [
{ artifactId: 'ca_missing', kind: 'generated_file' },
{ artifactId: 'ca_missing', kind: 'generated_file', canonicalUrl: 'file:///tmp/secret.txt' },
{
artifactId: 'ca_escape',
kind: 'docx',
storageKey: 'users/user-1/other/session-1/report.docx',
},
{
artifactId: 'ca_gone',
kind: 'docx',
storageKey: 'users/user-1/conversations/session-1/report.docx',
},
],
},
{
async statObject(key) {
return { key, exists: key !== 'users/user-1/conversations/session-1/report.docx' };
},
},
);
assert.equal(result.ok, false);
assert.deepEqual(
result.issues.map((item) => item.code),
[
'artifact_without_backing_reference',
'duplicate_artifact_id',
'invalid_canonical_url',
'storage_key_outside_package',
'missing_backing_object',
],
);
});
test('conversation package verify internals classify supported URLs', () => {
assert.equal(conversationPackageVerifyInternals.isReadableUrl('https://m.tkmind.cn/MindSpace/u/public/a.html'), true);
assert.equal(conversationPackageVerifyInternals.isReadableUrl('/api/mindspace/v1/assets/a/download'), true);
assert.equal(conversationPackageVerifyInternals.isReadableUrl('/MindSpace/u/public/a.html'), true);
assert.equal(conversationPackageVerifyInternals.isReadableUrl('file:///tmp/a.html'), false);
});