84 lines
2.4 KiB
JavaScript
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,
|
|
);
|
|
});
|