TASK22104: slice4 split phase21 helper and handler contract tests
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user