Files
memind/mindspace-chat-docx-package.test.mjs

84 lines
2.4 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
DOCX_MIME_TYPE,
registerChatDocxArtifactForConversation,
} from './mindspace-chat-docx-package.mjs';
test('registerChatDocxArtifactForConversation writes docx object and artifact manifest entry', async () => {
const calls = [];
const buffer = Buffer.from('docx-body');
const registry = {
async putObjectForSession(input) {
calls.push(['putObjectForSession', input]);
return {
packageRecord: { id: 'cp_session-1' },
writeResult: {
key: `users/user-1/conversations/session-1/${input.relativePath}`,
},
};
},
async recordArtifact(input) {
calls.push(['recordArtifact', input]);
return input;
},
async writeManifestForSession(input) {
calls.push(['writeManifestForSession', input]);
return input;
},
};
const artifact = await registerChatDocxArtifactForConversation({
registry,
user: { id: 'user-1' },
bundle: { source: { session: { name: 'Docx session' } } },
requestBody: {
session_id: 'session-1',
message_id: 'message-1',
selected_link_index: 2,
},
filename: '研究报告.docx',
buffer,
now: 1000,
});
assert.equal(artifact.artifactKind, 'docx');
assert.equal(artifact.messageId, 'message-1');
assert.equal(artifact.mimeType, DOCX_MIME_TYPE);
assert.equal(artifact.sizeBytes, buffer.length);
assert.match(artifact.id, /^ca_docx_[a-f0-9]{16}$/);
assert.match(
artifact.canonicalUrl,
/^\/api\/mindspace\/v1\/conversation-packages\/session-1\/artifacts\/ca_docx_[a-f0-9]{16}\/download$/,
);
assert.deepEqual(calls[0][1], {
userId: 'user-1',
sessionId: 'session-1',
title: 'Docx session',
relativePath: `artifacts/${artifact.id}/研究报告.docx`,
body: buffer,
});
assert.deepEqual(calls.at(-1), [
'writeManifestForSession',
{ userId: 'user-1', sessionId: 'session-1' },
]);
});
test('registerChatDocxArtifactForConversation skips missing session or message source', async () => {
const registry = {
async putObjectForSession() {
assert.fail('should not write object without source');
},
};
assert.equal(
await registerChatDocxArtifactForConversation({
registry,
user: { id: 'user-1' },
requestBody: { session_id: 'session-1' },
filename: 'report.docx',
buffer: Buffer.from('docx'),
}),
null,
);
});