import { describe, expect, it } from 'vitest'; import { buildApp } from '../build-app.js'; import { createFlagStore } from '../../modules/flags/index.js'; import { createLogger } from '../../infrastructure/logging/logger.js'; import type { DestinationStream } from 'pino'; function silentLogger() { const destination: DestinationStream = { write: () => undefined }; return createLogger({ level: 'info', destination }); } describe('feature flags wiring (composition)', () => { it('default flags are all OFF when no store is injected', async () => { const app = await buildApp({ logger: silentLogger() }); app.get('/__test/guarded', async (request) => { return { enabled: request.server.flags.isEnabled('risky_path') }; }); const response = await app.inject({ method: 'GET', url: '/__test/guarded' }); expect(response.json()).toEqual({ enabled: false }); await app.close(); }); it('guarded path is skipped when the flag is off and runs once enabled at runtime', async () => { const store = createFlagStore({ risky_path: false }); const app = await buildApp({ logger: silentLogger(), flags: store }); app.get('/__test/guarded', async (request) => { if (!request.server.flags.isEnabled('risky_path')) { return { path: 'skipped' }; } return { path: 'executed' }; }); const off = await app.inject({ method: 'GET', url: '/__test/guarded' }); expect(off.json()).toEqual({ path: 'skipped' }); // Activation without redeploy: same running app instance. store.setEnabled('risky_path', true); const on = await app.inject({ method: 'GET', url: '/__test/guarded' }); expect(on.json()).toEqual({ path: 'executed' }); store.setEnabled('risky_path', false); const offAgain = await app.inject({ method: 'GET', url: '/__test/guarded' }); expect(offAgain.json()).toEqual({ path: 'skipped' }); await app.close(); }); });