From 0e99d9548bcf69f92227515766ce3f7aa1d3357d Mon Sep 17 00:00:00 2001 From: robbond Date: Tue, 17 Mar 2026 14:00:09 +0000 Subject: [PATCH] TASK22104: slice3 add failure-path api contract tests --- tests/phase21/api-contract-slice1.test.cjs | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tests/phase21/api-contract-slice1.test.cjs b/tests/phase21/api-contract-slice1.test.cjs index 4eea123c..406c8187 100644 --- a/tests/phase21/api-contract-slice1.test.cjs +++ b/tests/phase21/api-contract-slice1.test.cjs @@ -371,6 +371,72 @@ test("downloadblob handler success sets attachment header and returns body", asy assert.strictEqual(res.state.sentBody.toString(), "file-content"); }); +test("apiResponse.respondError default contract returns 500 envelope", () => { + const mod = loadModule("pages/api/middleware/apiResponse.js"); + const res = createRes(); + + mod.respondError(res); + + assert.strictEqual(res.state.statusCode, 500); + assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { + success: false, + error: { + code: "INTERNAL_SERVER_ERROR", + message: "Request failed" + } + }); +}); + +test("upload handler dependency failure returns UPLOAD_FAILED", async () => { + const mod = loadModule("pages/api/file/upload.js", { + nextConnect: createNextConnectMock(), + middleware: () => {}, + hashAPIPath: () => "?hash=expected", + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + createBlob: async () => { + throw new Error("storage down"); + }, + 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, 400); + assert.strictEqual(res.state.jsonBody.error.code, "UPLOAD_FAILED"); +}); + +test("setupcontainer dependency failure returns SETUP_CONTAINER_FAILED", async () => { + const mod = loadModule("pages/api/file/setupcontainer.js", { + nextConnect: createNextConnectMock(), + middleware: () => {}, + hashAPIPath: () => "&hash=expected", + consoleLogger: () => {}, + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + createContainer: async () => { + throw new Error("container failed"); + } + }); + + const req = { query: { ident: "cont-1", hash: "expected" } }; + const res = createRes(); + await mod.default.handler(req, res); + + assert.strictEqual(res.state.statusCode, 400); + assert.strictEqual(res.state.jsonBody.error.code, "SETUP_CONTAINER_FAILED"); +}); + const run = async () => { let passed = 0;