import assert from "node:assert/strict"; import { access } from "node:fs/promises"; import test from "node:test"; import { createApp } from "../../src/app.js"; const logicalSourceRef = "Errores Junio 2026 - OCR verificado.md"; test("multipart upload separates logical source identity from physical filenames", async (context) => { const inputs: Array> = []; const identities = new Map(); const activeVersionId = "active-before-upload"; const ingestService = { async ingest(input: Record) { inputs.push(input); const identity = `${input.sourceId}:${input.sourceRef}`; const versionId = identities.get(identity) ?? `version-${identities.size + 1}`; identities.set(identity, versionId); return { accepted: true, sourceId: input.sourceId, versionId, versionNumber: 2, state: "indexing", phase: "ocr_queued", statusUrl: `/ingestions/${versionId}`, reviewUrl: null, activated: false }; }, async cleanup() { return { deleted: 0 }; } }; const server = createApp({ ingestService: ingestService as never, startReconciler: false }).listen(0); context.after(() => server.close()); const address = server.address(); assert.ok(address && typeof address === "object"); const upload = async (filename: string, sourceRef?: string) => { const form = new FormData(); form.set("file", new Blob(["%PDF-1.4\n%%EOF"], { type: "application/pdf" }), filename); form.set("sourceId", "facturatech:agente-whatsapp-central:errores-junio-2026:v1"); form.set("activate", "false"); if (sourceRef !== undefined) form.set("sourceRef", sourceRef); return fetch(`http://127.0.0.1:${address.port}/ingest/upload`, { method: "POST", body: form }); }; const first = await upload("factura-fisica.pdf", ` ${logicalSourceRef} `); const second = await upload("otra-copia.pdf", logicalSourceRef); const fallback = await upload("fallback.pdf"); const invalid = await upload("invalid.pdf", " "); const [firstBody, secondBody] = await Promise.all([first.json(), second.json()]) as Array<{ versionId: string; activated: boolean }>; assert.equal(first.status, 202); assert.equal(second.status, 202); assert.equal(fallback.status, 202); assert.equal(invalid.status, 400); assert.equal(firstBody.versionId, secondBody.versionId); assert.equal(firstBody.activated, false); assert.deepEqual(inputs.map(({ sourceRef }) => sourceRef), [logicalSourceRef, logicalSourceRef, "fallback.pdf"]); assert.deepEqual(inputs.map(({ activate }) => activate), [false, false, false]); assert.equal(activeVersionId, "active-before-upload"); for (const input of inputs) { assert.notEqual(input.readPath, input.sourceRef); await assert.rejects(access(String(input.readPath))); } });