103 lines
2.8 KiB
JavaScript
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);
|
|
});
|
|
}
|