Files
pedwfrontend/tests/phase21/api-response-helper.test.cjs

103 lines
2.8 KiB
JavaScript

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);
});
}