Files
Vivier/tests/test_import.php
T

77 lines
4.2 KiB
PHP

<?php
// Tests de l'import : php tests/test_import.php
declare(strict_types=1);
const VIVIER_RACINE = __DIR__ . '/..';
require __DIR__ . '/../src/i18n.php';
require __DIR__ . '/../src/pays.php';
require __DIR__ . '/../src/Import.php';
$ok = 0; $ko = 0;
function verifier(string $nom, bool $cond): void {
global $ok, $ko;
if ($cond) { $ok++; } else { $ko++; echo "ECHEC : $nom\n"; }
}
$exemple = json_decode(file_get_contents(__DIR__ . '/../claude/exemple-profil.json'), true);
$auj = new DateTimeImmutable('2026-10-08');
verifier('exemple conforme', Import::valider($exemple) === []);
$p = $exemple; $p['seniorite']['niveau'] = 'senior';
verifier('niveau inconnu rejeté', count(Import::valider($p)) === 1);
$p = $exemple; $p['experiences'][0]['date_debut'] = '03/2020';
verifier('date mal formée rejetée', count(Import::valider($p)) === 1);
$p = $exemple; $p['age'] = 34;
verifier('clé en trop rejetée', count(Import::valider($p)) === 1);
$p = $exemple; unset($p['identite']['nom']);
verifier('nom manquant rejeté', count(Import::valider($p)) === 1);
$p = $exemple; $p['liens'][0]['url'] = 'javascript:alert(1)';
verifier('lien non http rejeté', count(Import::valider($p)) === 1);
$p = $exemple; $p['experiences'][1]['date_fin'] = '2016-01';
verifier('fin avant début rejetée', count(Import::valider($p)) === 1);
$p = $exemple; $p['schema_version'] = '2.0';
verifier('version inconnue rejetée', count(Import::valider($p)) === 1);
verifier('liste rejetée', Import::valider([1, 2]) !== []);
verifier('texte rejeté', Import::valider('x') !== []);
// Format 1.1 : mots-clés et métadonnées
$v10 = $exemple; $v10['schema_version'] = '1.0'; unset($v10['mots_cles'], $v10['metadonnees']);
verifier('profil 1.0 toujours accepté', Import::valider($v10) === []);
$p = $exemple; $p['metadonnees']['niveau_etudes'] = 'master';
verifier('niveau d\'études inconnu rejeté', count(Import::valider($p)) === 1);
$p = $exemple; $p['mots_cles'][] = 42;
verifier('mot-clé non textuel rejeté', count(Import::valider($p)) === 1);
$p = $exemple; $p['metadonnees']['encadrement'] = 'oui';
verifier('encadrement non booléen rejeté', count(Import::valider($p)) === 1);
$p = $exemple; $p['metadonnees']['salaire'] = 1;
verifier('métadonnée inconnue rejetée', count(Import::valider($p)) === 1);
// Séniorité
$s = Import::seniorite($exemple, $auj);
verifier('exemple : 9,1 ans', $s['annees'] === 9.1);
verifier('exemple : confirmé', $s['niveau'] === 'confirme');
verifier('exemple : pas d\'écart', $s['ecart'] === false);
$exp = static fn (string $d, ?string $f, string $t = 'emploi', array $tech = []) =>
['poste' => 'x', 'type' => $t, 'date_debut' => $d, 'date_fin' => $f, 'technologies' => $tech];
verifier('poste terminé : mois de fin compté', Import::moisExperience([$exp('2020-01', '2020-12')], $auj) === 12);
verifier('chevauchement fusionné', Import::moisExperience([$exp('2020-01', '2020-12'), $exp('2020-07', '2021-06')], $auj) === 18);
verifier('périodes disjointes additionnées', Import::moisExperience([$exp('2018-01', '2018-12'), $exp('2020-01', '2020-12')], $auj) === 24);
verifier('stage exclu', Import::moisExperience([$exp('2020-01', '2020-06', 'stage')], $auj) === 0);
verifier('alternance comptée', Import::moisExperience([$exp('2020-01', '2020-06', 'alternance')], $auj) === 6);
verifier('poste en cours : jusqu\'au dernier mois complet', Import::moisExperience([$exp('2026-01', null)], $auj) === 9);
verifier('fin dans le futur plafonnée', Import::moisExperience([$exp('2026-01', '2030-12')], $auj) === 10);
verifier('année seule', Import::moisExperience([$exp('2015', '2016')], $auj) === 13);
verifier('filtre par technologie, casse ignorée',
Import::moisExperience([$exp('2020-01', '2020-12', 'emploi', ['Java']), $exp('2021-01', '2021-12', 'emploi', ['PHP'])], $auj, 'java') === 12);
verifier('3,9 ans : junior', Import::niveau(3.9) === 'junior');
verifier('4 ans : intermédiaire', Import::niveau(4.0) === 'intermediaire');
verifier('7,9 ans : intermédiaire', Import::niveau(7.9) === 'intermediaire');
verifier('8 ans : confirmé', Import::niveau(8.0) === 'confirme');
verifier('12 ans : expert', Import::niveau(12.0) === 'expert');
echo "$ok réussis, $ko échoués\n";
exit($ko > 0 ? 1 : 0);