import assert from "node:assert/strict";
import { knowledgeDocumentTextFromFile } from "../apps/api/dist/knowledge-document-text.js";
assert.equal(
await knowledgeDocumentTextFromFile("notes.md", "text/markdown", Buffer.from("# hi\n", "utf8")),
"# hi\n",
);
assert.equal(
await knowledgeDocumentTextFromFile("rows.csv", "text/csv", Buffer.from("a,b\n1,2\n", "utf8")),
"a,b\n1,2\n",
);
assert.equal(
await knowledgeDocumentTextFromFile("notes.txt", "application/octet-stream", Buffer.from("plain\n", "utf8")),
"plain\n",
);
let invalidPdfError;
try {
await knowledgeDocumentTextFromFile("doc.pdf", "application/pdf", Buffer.from("%PDF-1.4", "utf8"));
} catch (error) {
invalidPdfError = error;
}
assert(invalidPdfError instanceof Error, "invalid PDF must fail parse/empty checks");
assert.match(invalidPdfError.message, /KNOWLEDGE_PDF_(EMPTY|PARSE_FAILED)/);
let forgedMimeError;
try {
await knowledgeDocumentTextFromFile("doc.pdf", "text/plain", Buffer.from("not really a pdf", "utf8"));
} catch (error) {
forgedMimeError = error;
}
assert(forgedMimeError instanceof Error, "forged text/plain PDF must fail PDF extraction");
assert.match(forgedMimeError.message, /KNOWLEDGE_PDF_(EMPTY|PARSE_FAILED)/);
let docxError;
try {
await knowledgeDocumentTextFromFile(
"report.docx",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
Buffer.from("PK", "utf8"),
);
} catch (error) {
docxError = error;
}
assert(docxError instanceof Error, "DOCX must be rejected");
assert.match(docxError.message, /KNOWLEDGE_FILE_TYPE_UNSUPPORTED/);
assert.match(docxError.message, /PDF \(\.pdf\) are supported/);
let binaryError;
try {
await knowledgeDocumentTextFromFile("fake.txt", "text/plain", Buffer.from([0x00, 0x01, 0x02]));
} catch (error) {
binaryError = error;
}
assert(binaryError instanceof Error, "null-byte body must be rejected");
assert.match(binaryError.message, /null bytes/);
console.log("knowledge-document-text smoke OK");