tinfo-web-server / test /asyncController.test.js
Faridaqurr
initial backend
e8c33fa
Raw
History Blame Contribute Delete
2.79 kB
const test = require('node:test');
const assert = require('node:assert/strict');
test('asyncController hides internal error messages in production for 5xx', async () => {
const originalEnv = process.env.NODE_ENV;
process.env.NODE_ENV = 'production';
const isProduction = process.env.NODE_ENV === 'production';
const internalError = new Error('MongoNetworkError: connection refused to cluster0.example.com');
internalError.statusCode = 503;
const safeMessage = isProduction && internalError.statusCode >= 500
? 'An internal error occurred'
: internalError.message;
assert.equal(safeMessage, 'An internal error occurred', 'In production, 5xx errors must use generic message');
process.env.NODE_ENV = originalEnv;
});
test('asyncController passes through 4xx messages in production', async () => {
process.env.NODE_ENV = 'production';
const isProduction = process.env.NODE_ENV === 'production';
const validationError = new Error('Title is required');
validationError.statusCode = 400;
const safeMessage = isProduction && validationError.statusCode >= 500
? 'An internal error occurred'
: validationError.message;
assert.equal(safeMessage, 'Title is required', '4xx messages must pass through');
process.env.NODE_ENV = 'development';
});
test('asyncController error response includes success=false and code', async () => {
const { asyncController } = require('../utils/asyncController');
let capturedStatus;
let capturedBody;
const req = { originalUrl: '/test', method: 'GET', headers: {}, ip: '', user: null, body: {} };
const res = {
statusCode: 200,
headersSent: false,
status(code) { capturedStatus = code; this.statusCode = code; return this; },
json(body) { capturedBody = body; },
};
const handler = async () => {
const err = new Error('Validation failed');
err.statusCode = 400;
throw err;
};
await asyncController(handler)(req, res, () => {});
assert.equal(capturedStatus, 400);
assert.equal(capturedBody.success, false);
assert.equal(capturedBody.code, 'BAD_REQUEST');
assert.equal(capturedBody.message, 'Validation failed');
});
test('asyncController uses INTERNAL_SERVER_ERROR code for 5xx', async () => {
const { asyncController } = require('../utils/asyncController');
let capturedBody;
const req = { originalUrl: '/test', method: 'GET', headers: {}, ip: '', user: null, body: {} };
const res = {
statusCode: 200,
headersSent: false,
status() { return this; },
json(body) { capturedBody = body; },
};
const handler = async () => { throw new Error('DB exploded'); };
await asyncController(handler)(req, res, () => {});
assert.equal(capturedBody.success, false);
assert.equal(capturedBody.code, 'INTERNAL_SERVER_ERROR');
});