import { GET } from './route'; describe('/api/health', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should return health status with all required fields', async () => { const response = await GET(); const data = await response.json(); expect([200, 503]).toContain(response.status); expect(['healthy', 'unhealthy']).toContain(data.status); expect(data.timestamp).toBeDefined(); expect(data.uptime).toBeDefined(); expect(data.version).toBeDefined(); expect(data.environment).toBeDefined(); }); it('should include database check', async () => { const response = await GET(); const data = await response.json(); expect(data.checks).toBeDefined(); expect(data.checks.database).toBeDefined(); expect(data.checks.database.status).toBeDefined(); }); it('should include memory check', async () => { const response = await GET(); const data = await response.json(); expect(data.checks.memory).toBeDefined(); expect(data.checks.memory.status).toBeDefined(); expect(data.checks.memory.used).toBeDefined(); expect(data.checks.memory.total).toBeDefined(); expect(data.checks.memory.percentage).toBeDefined(); }); it('should include CPU check', async () => { const response = await GET(); const data = await response.json(); expect(data.checks.cpu).toBeDefined(); expect(data.checks.cpu.status).toBeDefined(); expect(data.checks.cpu.load).toBeDefined(); }); it('should return 503 when a check is unhealthy', async () => { const originalMemoryUsage = process.memoryUsage; process.memoryUsage = jest.fn(() => ({ heapUsed: 1000000000, heapTotal: 1000000000, external: 0, arrayBuffers: 0, rss: 0, })); const response = await GET(); const data = await response.json(); expect(response.status).toBe(503); expect(data.checks.memory.status).toBe('unhealthy'); process.memoryUsage = originalMemoryUsage; }); it('should handle errors gracefully', async () => { const originalUptime = process.uptime; process.uptime = jest.fn(() => { throw new Error('Process error'); }); const response = await GET(); const data = await response.json(); expect(response.status).toBe(503); expect(data.status).toBe('unhealthy'); expect(data.error).toBeDefined(); process.uptime = originalUptime; }); });