- Dossiers unifiés #119, pending-families enrichi, validation admin (wizards) - Front: modèles dossier_unifie / pending_family, NIR, auth - Migrations dossier_famille, scripts de test API - Résolution conflits: parents.*, docs tickets, auth_service, nir_utils Made-with: Cursor
123 lines
4.3 KiB
JavaScript
123 lines
4.3 KiB
JavaScript
#!/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);
|
|
});
|