From 991cbf73ba2a7d7fe0f8e26c0edb83bfe7e3a0aa Mon Sep 17 00:00:00 2001 From: robbond Date: Tue, 17 Mar 2026 13:57:48 +0000 Subject: [PATCH] TASK22104: slice2 extend api contract success and download tests --- tests/phase21/api-contract-slice1.test.cjs | 113 ++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/tests/phase21/api-contract-slice1.test.cjs b/tests/phase21/api-contract-slice1.test.cjs index 755cf87f..4eea123c 100644 --- a/tests/phase21/api-contract-slice1.test.cjs +++ b/tests/phase21/api-contract-slice1.test.cjs @@ -44,7 +44,9 @@ const loadModule = (relativePath, injected = {}) => { const createRes = () => { const state = { statusCode: null, - jsonBody: undefined + jsonBody: undefined, + sentBody: undefined, + headers: {} }; return { @@ -56,6 +58,13 @@ const createRes = () => { json(payload) { state.jsonBody = payload; return payload; + }, + send(payload) { + state.sentBody = payload; + return payload; + }, + setHeader(key, value) { + state.headers[key.toLowerCase()] = value; } }; }; @@ -260,6 +269,108 @@ test("setupcontainer handler returns MISSING_REQUIRED_QUERY when ident missing", assert.strictEqual(res.state.jsonBody.error.code, "MISSING_REQUIRED_QUERY"); }); +test("upload handler success returns data payload with 200", async () => { + const mod = loadModule("pages/api/file/upload.js", { + nextConnect: createNextConnectMock(), + middleware: () => {}, + hashAPIPath: () => "?hash=expected", + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + createBlob: async () => ({ id: "blob-1" }), + createRepBlob: async () => ({ id: "rep-1" }) + }); + + const req = { + query: { hash: "expected" }, + body: { + appealData: { key: "value" }, + containerID: ["c1"], + casefolderID: ["f1"], + repOrAppeal: false + } + }; + const res = createRes(); + await mod.default.handler(req, res); + + assert.strictEqual(res.state.statusCode, 200); + assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { + data: { id: "blob-1" } + }); +}); + +test("setupcontainer handler success returns expected contract", async () => { + const mod = loadModule("pages/api/file/setupcontainer.js", { + nextConnect: createNextConnectMock(), + middleware: () => {}, + hashAPIPath: () => "&hash=expected", + consoleLogger: () => {}, + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + createContainer: async () => ({ created: true }) + }); + + const req = { query: { ident: "cont-1", hash: "expected" } }; + const res = createRes(); + await mod.default.handler(req, res); + + assert.strictEqual(res.state.statusCode, 200); + assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { + data: "success", + output: { created: true } + }); +}); + +test("getbloblist handler success returns value array contract", async () => { + const mod = loadModule("pages/api/file/getbloblist.js", { + nextConnect: createNextConnectMock(), + middleware: () => {}, + hashAPIPath: () => "&hash=expected", + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + getBlobs: async () => ({ file: "a.pdf" }), + getRepsFilesBlobs: async () => ({ file: "rep.pdf" }) + }); + + const req = { + query: { container: "c1", casefolderID: "f1", hash: "expected" } + }; + const res = createRes(); + await mod.default.handler(req, res); + + assert.strictEqual(res.state.statusCode, 200); + assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { + value: [{ file: "a.pdf" }] + }); +}); + +test("downloadblob handler success sets attachment header and returns body", async () => { + const mod = loadModule("pages/api/file/downloadblob.js", { + nextConnect: createNextConnectMock(), + middleware: () => {}, + hashAPIPath: () => "&hash=expected", + respondError: respondErrorMock, + downloadFile: async () => Buffer.from("file-content") + }); + + const req = { + query: { + container: "c1", + casefolderID: "f1", + blobname: "doc.pdf", + hash: "expected" + } + }; + const res = createRes(); + await mod.default.handler(req, res); + + assert.strictEqual(res.state.statusCode, 200); + assert.strictEqual( + res.state.headers["content-disposition"], + "attachment; filename=doc.pdf" + ); + assert.strictEqual(res.state.sentBody.toString(), "file-content"); +}); + const run = async () => { let passed = 0;