import { http } from 'msw' import { jsonResponse, noContent, sse } from '../helpers' import { seedFlights } from '../../fixtures/seed_flights' import { seedAircraft } from '../../fixtures/seed_aircraft' // Default `/api/flights/*` handlers. Live-GPS SSE returns a deterministic // 3-event stream so AC-08 timing assertions have something to drive even // without per-test overrides. export const flightsHandlers = [ http.get('/api/flights', () => jsonResponse(seedFlights)), http.get('/api/flights/:id', ({ params }) => { const flight = seedFlights.find((f) => f.id === params.id) if (!flight) return new Response(null, { status: 404 }) return jsonResponse(flight) }), http.post('/api/flights', async ({ request }) => { const body = (await request.json()) as Record return jsonResponse({ id: 'flight-new', createdDate: new Date().toISOString(), ...body }, { status: 201 }) }), http.put('/api/flights/:id', async ({ request, params }) => { const body = (await request.json()) as Record return jsonResponse({ id: params.id, ...body }) }), http.delete('/api/flights/:id', () => noContent()), http.get('/api/flights/:id/waypoints', ({ params }) => jsonResponse([ { id: 'wp-1', flightId: params.id, name: 'WP1', latitude: 50.45, longitude: 30.52, order: 1, }, ]), ), http.post('/api/flights/:id/waypoints', async ({ request, params }) => { const body = (await request.json()) as Record return jsonResponse({ id: 'wp-new', flightId: params.id, ...body }, { status: 201 }) }), http.get('/api/flights/:id/live-gps', ({ params }) => sse([ { event: 'gps', data: { flightId: params.id, lat: 50.45, lon: 30.52, t: 0 }, id: '1' }, { event: 'gps', data: { flightId: params.id, lat: 50.46, lon: 30.53, t: 1000 }, id: '2' }, { event: 'gps', data: { flightId: params.id, lat: 50.47, lon: 30.54, t: 2000 }, id: '3' }, ]), ), // Production uses the plural path `/api/flights/aircrafts`. Singular alias kept // for any future test that follows REST-singular conventions; production paths win. http.get('/api/flights/aircrafts', () => jsonResponse(seedAircraft)), http.get('/api/flights/aircraft', () => jsonResponse(seedAircraft)), http.patch('/api/flights/aircrafts/:id', async ({ request, params }) => { const body = (await request.json()) as Record return jsonResponse({ id: params.id, ...body }) }), // POST accepts both plural and singular paths. Production convention is // plural (REST collection); singular kept as a backward-compat alias. http.post('/api/flights/aircrafts', async ({ request }) => { const body = (await request.json()) as Record return jsonResponse({ id: 'AC-NEW', ...body }, { status: 201 }) }), http.post('/api/flights/aircraft', async ({ request }) => { const body = (await request.json()) as Record return jsonResponse({ id: 'AC-NEW', ...body }, { status: 201 }) }), ]