import { afterEach, describe, expect, it } from 'vitest' import { http, HttpResponse } from 'msw' import { server } from './msw/server' import { api } from '../src/api/client' import { seedBearer, clearBearer } from './helpers/auth' import { loadEnumSnapshot } from './fixtures/enum_spec_snapshot' // Smoke tests for AZ-456 (Test Infrastructure): // - AC-3 : MSW intercepts every outbound /api//* fetch (default // handler match + per-test override + reset between tests). // - AC-4 : Vitest discovers this file under jsdom, runs it, and the // scripts/run-tests.sh runner emits ./test-output/fast-report.xml // (the JUnit reporter is wired in vitest.config.ts). // - AC-7 : The JUnit/CSV report shape is asserted by scripts/run-tests.sh // after this suite finishes — see the [fast] section there. describe('AZ-456 fast-profile infrastructure', () => { afterEach(() => { clearBearer() }) it('AC-3: MSW intercepts a default /api/admin/* fetch', async () => { seedBearer() const me = await api.get<{ id: string; email: string }>('/api/admin/users/me') expect(me.id).toBe('user-alice') expect(me.email).toBe('op_alice@test.local') }) it('AC-3: per-test server.use(...) overrides the default handler', async () => { seedBearer() server.use( http.get('/api/admin/users/me', () => HttpResponse.json({ id: 'user-override', email: 'override@test.local' }), ), ) const me = await api.get<{ id: string; email: string }>('/api/admin/users/me') expect(me.id).toBe('user-override') }) it('AC-3: handlers reset between tests (default returns op_alice again)', async () => { seedBearer() const me = await api.get<{ id: string; email: string }>('/api/admin/users/me') expect(me.id).toBe('user-alice') }) it('AC-4: jsdom + Vitest globals are configured', () => { expect(typeof window).toBe('object') expect(typeof document).toBe('object') // @testing-library/jest-dom matchers are extended via tests/setup.ts. const el = document.createElement('div') el.textContent = 'hello' expect(el).toHaveTextContent('hello') }) it('AC-4 / AC-29: enum spec snapshot is reachable from tests', () => { const spec = loadEnumSnapshot() expect(spec.enums.AnnotationStatus.values).toMatchObject({ None: 0, Created: 10, Edited: 20, Validated: 30, Deleted: 40, }) }) })