UNPKG

logaro

Version:

Structured logging middleware for Express. Tracks request timing, IP, status, method, and endpoint. Supports colorized console and JSON log files.

106 lines (105 loc) 5.38 kB
"use strict"; // src/middleware.test.ts var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const supertest_1 = __importDefault(require("supertest")); const express_1 = __importDefault(require("express")); const index_1 = require("./index"); // Apne package exports const logger_1 = __importDefault(require("./logger")); // Internal logger ko mock karne ke liye // Winston logger ke methods ko mock karna // Note: Type Assertion use kiya gaya hai taa ke Jest aur TypeScript types theek se mil saken. const loggerInfoSpy = jest.spyOn(logger_1.default, 'info').mockImplementation(() => logger_1.default); const loggerErrorSpy = jest.spyOn(logger_1.default, 'error').mockImplementation(() => logger_1.default); const loggerWarnSpy = jest.spyOn(logger_1.default, 'warn').mockImplementation(() => logger_1.default); describe('Request Logging Middleware Tests', () => { let app; // Test shuru hone se pehle Express app setup karna beforeAll(() => { app = (0, express_1.default)(); // 1. Request Logger Middleware lagana app.use((0, index_1.requestLogger)()); // 2. Sample routes banana app.get('/success', (req, res) => { res.status(200).send('OK'); }); app.get('/not-found', (req, res) => { // Express default 404 response res.status(404).send('Not Found'); }); app.get('/server-error', (req, res) => { res.status(500).send('Internal Server Error'); }); // Error logging utility test karne ke liye route app.get('/utility-error', (req, res) => { try { throw new Error('Test DB Connection Failed'); } catch (error) { // logError utility use karna (Jisse pehla logger.error call hoga) (0, index_1.logError)(error, req); res.status(500).send('Logged an error'); } }); }); // Har test ke baad spies ko clear karna afterEach(() => { jest.clearAllMocks(); }); // --- Test Cases --- test('1. Successful request (200) should call logger.info', async () => { await (0, supertest_1.default)(app).get('/success').expect(200); // Check karna ke logger.info ko sahi data ke saath call kiya gaya hai expect(loggerInfoSpy).toHaveBeenCalledTimes(1); // FIX: Index [1] par Type Assertion (as object) lagaya const logCall = loggerInfoSpy.mock.calls[0][1]; // Check karna ke required fields mojud hain expect(logCall).toHaveProperty('method', 'GET'); expect(logCall).toHaveProperty('endpoint', '/success'); expect(logCall).toHaveProperty('status', 200); expect(logCall).toHaveProperty('success', true); expect(logCall).toHaveProperty('durationMs'); }); test('2. Client error (404) should call logger.warn', async () => { await (0, supertest_1.default)(app).get('/not-found').expect(404); expect(loggerWarnSpy).toHaveBeenCalledTimes(1); // FIX: Index [1] par Type Assertion (as object) lagaya const logCall = loggerWarnSpy.mock.calls[0][1]; expect(logCall).toHaveProperty('status', 404); expect(logCall).toHaveProperty('success', false); }); test('3. Server error (500) should call logger.error', async () => { await (0, supertest_1.default)(app).get('/server-error').expect(500); expect(loggerErrorSpy).toHaveBeenCalledTimes(1); // FIX: Index [1] par Type Assertion (as object) lagaya const logCall = loggerErrorSpy.mock.calls[0][1]; expect(logCall).toHaveProperty('status', 500); expect(logCall).toHaveProperty('success', false); }); test('4. Utility logError should call logger.error with details', async () => { await (0, supertest_1.default)(app).get('/utility-error').expect(500); // FIX: Hamein 2 calls ki ummeed hai (1 utility se, 1 middleware se) expect(loggerErrorSpy).toHaveBeenCalledTimes(2); // Call 1: Utility Log (Jiska message 'Custom Application Error:' se shuru hota hai) const utilityCall = loggerErrorSpy.mock.calls.find(call => { return call[0] === 'Custom Application Error:'; }); // Call 2: Middleware Log (Jiska message 'Server Error Occurred' hai) const middlewareCall = loggerErrorSpy.mock.calls.find(call => { return call[0] === 'Server Error Occurred'; }); // Assertion 1: Utility call ka data check karna expect(utilityCall).toBeDefined(); const errorCallData = utilityCall[1]; expect(errorCallData).toHaveProperty('errorMessage', 'Test DB Connection Failed'); expect(errorCallData).toHaveProperty('route', 'GET /utility-error'); expect(errorCallData).toHaveProperty('errorStack'); // Assertion 2: Middleware call ka data check karna expect(middlewareCall).toBeDefined(); const middlewareCallData = middlewareCall[1]; expect(middlewareCallData).toHaveProperty('status', 500); expect(middlewareCallData).toHaveProperty('endpoint', '/utility-error'); expect(middlewareCallData).toHaveProperty('durationMs'); }); });