#!/usr/bin/env node /** * Test du schéma Zod du formulaire assoupli (B5-M1). * Charge le VRAI schéma TS (utils/submitLibre.ts) via jiti (déjà une dépendance * transitive de Nuxt, pas de nouveau paquet) — pas de réimplémentation parallèle. * Usage : node scripts/test-submit-libre.mjs */ import { createJiti } from 'jiti' import { fileURLToPath } from 'node:url' import { dirname, join } from 'node:path' const __dirname = dirname(fileURLToPath(import.meta.url)) const jiti = createJiti(import.meta.url) const { LibreSubmitSchema } = await jiti.import(join(__dirname, '..', 'utils', 'submitLibre.ts')) function baseInput(overrides) { return { liens: [], texte: '', site_web: '', ...overrides } } const cases = [ { name: 'vide (aucun lien, aucun texte) → refus', input: baseInput({}), expectOk: false, }, { name: '1 lien seul → ok', input: baseInput({ liens: ['https://exemple.fr'] }), expectOk: true, }, { name: 'texte seul → ok', input: baseInput({ texte: "Ça m'a beaucoup aidé pour ma reconversion." }), expectOk: true, }, { name: '11 liens → refus', input: baseInput({ liens: Array.from({ length: 11 }, (_, i) => `https://exemple${i}.fr`) }), expectOk: false, }, { name: 'URL invalide (pas de schéma) → refus', input: baseInput({ liens: ['exemple.fr'] }), expectOk: false, }, { name: 'ftp:// → refus', input: baseInput({ liens: ['ftp://exemple.fr/fichier.pdf'] }), expectOk: false, }, ] let failures = 0 for (const c of cases) { const result = LibreSubmitSchema.safeParse(c.input) const pass = result.success === c.expectOk const detail = result.success ? '' : ` (${JSON.stringify(result.error.flatten().fieldErrors)})` console.log(`${pass ? 'PASS' : 'FAIL'} — ${c.name}${pass ? '' : detail}`) if (!pass) failures++ } console.log(`\n${cases.length - failures}/${cases.length} tests passés`) process.exit(failures > 0 ? 1 : 0)