#!/usr/bin/env node /** * Test API GET /dossiers/:numeroDossier (dossier unifié AM ou famille). * * Prérequis : backend démarré (npm run start:dev dans backend/). * * Usage: * node scripts/test-api-dossiers.js * NUMERO_DOSSIER=2026-000001 node scripts/test-api-dossiers.js * BASE_URL=https://app.ptits-pas.fr/api/v1 TEST_EMAIL=xxx TEST_PASSWORD=yyy NUMERO_DOSSIER=2026-000001 node scripts/test-api-dossiers.js * * Sans TEST_EMAIL/TEST_PASSWORD : 401 sur les routes protégées. * NUMERO_DOSSIER : optionnel ; si absent, utilise le premier numero_dossier de pending-families (avec token). */ const BASE_URL = process.env.BASE_URL || 'http://localhost:3000/api/v1'; const TEST_EMAIL = process.env.TEST_EMAIL; const TEST_PASSWORD = process.env.TEST_PASSWORD; const NUMERO_DOSSIER = process.env.NUMERO_DOSSIER; async function request(method, path, body = null, token = null) { const url = path.startsWith('http') ? path : `${BASE_URL}${path}`; const opts = { method, headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, }; if (token) opts.headers.Authorization = `Bearer ${token}`; if (body) opts.body = JSON.stringify(body); const res = await fetch(url, opts); const text = await res.text(); let data = null; try { data = text ? JSON.parse(text) : null; } catch (_) { data = text; } return { status: res.status, data }; } async function main() { console.log('Base URL:', BASE_URL); console.log('Numéro dossier (env):', NUMERO_DOSSIER ?? '(sera déduit si token fourni)'); console.log(''); let token = null; if (TEST_EMAIL && TEST_PASSWORD) { console.log('1. Login...'); const loginRes = await request('POST', '/auth/login', { email: TEST_EMAIL, password: TEST_PASSWORD, }); if (loginRes.status !== 200 && loginRes.status !== 201) { console.log(' Échec login:', loginRes.status, loginRes.data); process.exit(1); } token = loginRes.data?.access_token ?? loginRes.data?.accessToken ?? null; if (!token) { console.log(' Réponse login sans token:', JSON.stringify(loginRes.data, null, 2)); process.exit(1); } console.log(' OK, token reçu.'); console.log(''); } else { console.log('TEST_EMAIL / TEST_PASSWORD non définis : GET /dossiers/:numero nécessite un token (401 attendu).'); console.log(''); } let numeroDossier = NUMERO_DOSSIER; if (!numeroDossier && token) { console.log('2. Récupération d\'un numéro de dossier (GET /parents/pending-families)...'); const pendingRes = await request('GET', '/parents/pending-families', null, token); if (pendingRes.status === 200 && Array.isArray(pendingRes.data) && pendingRes.data.length > 0) { numeroDossier = pendingRes.data[0].numero_dossier || null; console.log(' Premier numero_dossier:', numeroDossier); } else { console.log(' Aucune famille en attente ou erreur. Utilisez NUMERO_DOSSIER=2026-000001'); } console.log(''); } if (!numeroDossier) { numeroDossier = '2026-000001'; console.log('2. Pas de numéro fourni, test avec numéro par défaut:', numeroDossier); } else { console.log('2. GET /dossiers/' + encodeURIComponent(numeroDossier)); } const dossierRes = await request( 'GET', '/dossiers/' + encodeURIComponent(numeroDossier), null, token ); console.log(' Status:', dossierRes.status); if (dossierRes.status === 200 && dossierRes.data) { const d = dossierRes.data; console.log(' type:', d.type); console.log(' dossier (clés):', d.dossier ? Object.keys(d.dossier) : '-'); if (d.dossier && Array.isArray(d.dossier.enfants)) { console.log(' enfants:', d.dossier.enfants.length); d.dossier.enfants.forEach((e, i) => { console.log( ` [${i + 1}] id=${e.id} first_name=${e.first_name} last_name=${e.last_name} birth_date=${e.birth_date} gender=${e.gender} genre=${e.genre} status=${e.status}` ); }); } console.log(''); console.log('Réponse brute (dossier):'); console.log(JSON.stringify(d.dossier, null, 2)); } else { console.log(' Réponse:', JSON.stringify(dossierRes.data, null, 2)); } console.log(''); console.log('Fin du test.'); } main().catch((err) => { console.error('Erreur:', err.message || err); process.exit(1); });