<?php
use PHPUnit\Framework\TestCase;
require_once __DIR__ . '/../src/db.php';
final class DbTest extends TestCase {
    public function testSchemaTestCreeLesTables(): void {
        $pdo = db_test();
        $tables = $pdo->query("SELECT name FROM sqlite_master WHERE type='table'")->fetchAll(PDO::FETCH_COLUMN);
        foreach (['candidatures','pieces','actualites','medias','admins','envois_log','connexions_log'] as $t) {
            $this->assertContains($t, $tables);
        }
    }
    public function testStatutInvalideEstRejete(): void {
        $pdo = db_test();
        $this->expectException(PDOException::class);
        // La contrainte CHECK doit refuser un statut hors liste
        $pdo->exec("INSERT INTO candidatures
            (numero, nom, prenoms, date_naissance, lieu_naissance, sexe, nationalite, telephone, ville,
             tuteur_nom, tuteur_telephone, bac_serie, bac_annee, etablissement_origine, filiere1, statut)
            VALUES
            ('ISIT-0001', 'Kone', 'Awa', '2006-01-15', 'Korhogo', 'F', 'Ivoirienne', '0700000000', 'Korhogo',
             'Kone Issa', '0500000000', 'D', '2025', 'Lycee Moderne', 'GI', 'invalide')");
    }
    public function testPieceSansCandidatureEstRejetee(): void {
        $pdo = db_test();
        $this->expectException(PDOException::class);
        // La cle etrangere doit refuser une piece orpheline (candidature inexistante)
        $pdo->exec("INSERT INTO pieces (candidature_id, type, nom_original, nom_stockage)
            VALUES (999, 'bac', 'releve.pdf', 'abc123.pdf')");
    }
}
