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