import { afterEach, describe, expect, it } from 'vitest' import { FALLOS_PARA_CAER, SaludMondayService } from './salud-monday.service.js' describe('SaludMondayService', () => { afterEach(() => { delete process.env.MODO_LOCAL_FORZADO }) it('arranca disponible (optimista)', () => { const salud = new SaludMondayService() expect(salud.ok()).toBe(true) expect(salud.estaDisponible()).toBe(true) }) it('cae tras FALLOS_PARA_CAER fallos consecutivos', () => { const salud = new SaludMondayService() for (let i = 0; i < FALLOS_PARA_CAER - 1; i++) salud.registrarFallo() expect(salud.estaDisponible()).toBe(true) // aún aguanta salud.registrarFallo() expect(salud.ok()).toBe(false) expect(salud.estaDisponible()).toBe(false) }) it('un éxito resetea el contador de fallos', () => { const salud = new SaludMondayService() salud.registrarFallo() salud.registrarFallo() salud.registrarExito() salud.registrarFallo() salud.registrarFallo() expect(salud.estaDisponible()).toBe(true) // nunca llegó a 3 seguidos }) it('un éxito recupera el flag una vez caído', () => { const salud = new SaludMondayService() for (let i = 0; i < FALLOS_PARA_CAER; i++) salud.registrarFallo() expect(salud.ok()).toBe(false) salud.registrarExito() expect(salud.estaDisponible()).toBe(true) }) it('MODO_LOCAL_FORZADO=true fuerza modo local aunque Monday esté sano', () => { const salud = new SaludMondayService() process.env.MODO_LOCAL_FORZADO = 'true' expect(salud.ok()).toBe(true) // el flag crudo no cambia expect(salud.estaDisponible()).toBe(false) process.env.MODO_LOCAL_FORZADO = 'false' expect(salud.estaDisponible()).toBe(true) }) it('sondear() con ping exitoso recupera el flag y devuelve true', async () => { const salud = new SaludMondayService() for (let i = 0; i < FALLOS_PARA_CAER; i++) salud.registrarFallo() salud.registrarPing(async () => true) await expect(salud.sondear()).resolves.toBe(true) expect(salud.estaDisponible()).toBe(true) }) it('sondear() con ping fallido deja el flag caído', async () => { const salud = new SaludMondayService() for (let i = 0; i < FALLOS_PARA_CAER; i++) salud.registrarFallo() salud.registrarPing(async () => false) await expect(salud.sondear()).resolves.toBe(false) expect(salud.ok()).toBe(false) }) it('sondear() sin ping registrado devuelve el flag actual', async () => { const salud = new SaludMondayService() await expect(salud.sondear()).resolves.toBe(true) for (let i = 0; i < FALLOS_PARA_CAER; i++) salud.registrarFallo() await expect(salud.sondear()).resolves.toBe(false) }) })