const assert = require("assert"); const { loadModule, createRes } = require("./_shared.cjs"); const tests = []; const test = (name, fn) => tests.push({ name, fn }); test("apiResponse.respondSuccess returns data with default 200", () => { const mod = loadModule("pages/api/middleware/apiResponse.js"); const res = createRes(); mod.respondSuccess(res, { ok: true }); assert.strictEqual(res.state.statusCode, 200); assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { ok: true }); }); test("apiResponse.respondError includes details outside production", () => { const original = process.env.NODE_ENV; process.env.NODE_ENV = "development"; const mod = loadModule("pages/api/middleware/apiResponse.js"); const res = createRes(); mod.respondError(res, { status: 400, code: "INVALID_HASH", message: "Invalid hash", details: { expected: "x", actual: "y" } }); assert.strictEqual(res.state.statusCode, 400); assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { success: false, error: { code: "INVALID_HASH", message: "Invalid hash", details: { expected: "x", actual: "y" } } }); process.env.NODE_ENV = original; }); test("apiResponse.respondError suppresses details in production", () => { const original = process.env.NODE_ENV; process.env.NODE_ENV = "production"; const mod = loadModule("pages/api/middleware/apiResponse.js"); const res = createRes(); mod.respondError(res, { status: 500, code: "X", message: "Y", details: { shouldNot: "appear" } }); assert.strictEqual(res.state.statusCode, 500); assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { success: false, error: { code: "X", message: "Y" } }); process.env.NODE_ENV = original; }); 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" } }); }); const run = async () => { let passed = 0; for (const currentTest of tests) { await currentTest.fn(); passed += 1; } console.log(`Phase 21 helper tests passed (${passed}/${tests.length}).`); }; module.exports = run; if (require.main === module) { run().catch((error) => { console.error(error); process.exit(1); }); }