Files
Classeo/backend/tests/Unit/Scolarite/Application/Service/StatisticsExporterTest.php
Mathias STRASSER 3575d095a1
Some checks failed
CI / Backend Tests (push) Has been cancelled
CI / Frontend Tests (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
CI / Naming Conventions (push) Has been cancelled
CI / Build Check (push) Has been cancelled
feat: Provisionner automatiquement un nouvel établissement
Lorsqu'un super-admin crée un établissement via l'interface, le système
doit automatiquement créer la base tenant, exécuter les migrations,
créer le premier utilisateur admin et envoyer l'invitation — le tout
de manière asynchrone pour ne pas bloquer la réponse HTTP.

Ce mécanisme rend chaque établissement opérationnel dès sa création
sans intervention manuelle sur l'infrastructure.
2026-04-11 20:41:55 +02:00

83 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Tests\Unit\Scolarite\Application\Service;
use App\Scolarite\Application\Query\GetClassStatisticsDetail\ClassStatisticsDetailDto;
use App\Scolarite\Application\Query\GetClassStatisticsDetail\StudentAverageDto;
use App\Scolarite\Application\Service\StatisticsExporter;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
use function str_contains;
final class StatisticsExporterTest extends TestCase
{
private StatisticsExporter $exporter;
protected function setUp(): void
{
$this->exporter = new StatisticsExporter();
}
#[Test]
public function itExportsClassStatisticsToCsv(): void
{
$stats = new ClassStatisticsDetailDto(
average: 12.5,
successRate: 72.0,
distribution: [0, 0, 1, 2, 3, 2, 1, 0],
evolution: [],
students: [
new StudentAverageDto(
studentId: 's1',
studentName: 'Alice Dupont',
average: 14.0,
inDifficulty: false,
trend: 'improving',
),
new StudentAverageDto(
studentId: 's2',
studentName: 'Bob Martin',
average: 7.0,
inDifficulty: true,
trend: 'declining',
),
],
);
$csv = $this->exporter->exportClassToCsv($stats, '6ème A', 'Mathématiques');
self::assertNotSame('', $csv);
self::assertTrue(str_contains($csv, '6ème A'));
self::assertTrue(str_contains($csv, 'Mathématiques'));
self::assertTrue(str_contains($csv, '12.5'));
self::assertTrue(str_contains($csv, '72%'));
self::assertTrue(str_contains($csv, 'Alice Dupont'));
self::assertTrue(str_contains($csv, '14'));
self::assertTrue(str_contains($csv, 'Progression'));
self::assertTrue(str_contains($csv, 'Bob Martin'));
self::assertTrue(str_contains($csv, 'Oui'));
self::assertTrue(str_contains($csv, 'Régression'));
}
#[Test]
public function itHandlesEmptyStudentList(): void
{
$stats = new ClassStatisticsDetailDto(
average: null,
successRate: 0.0,
distribution: [0, 0, 0, 0, 0, 0, 0, 0],
evolution: [],
students: [],
);
$csv = $this->exporter->exportClassToCsv($stats, '5ème B', 'Français');
self::assertNotSame('', $csv);
self::assertTrue(str_contains($csv, '5ème B'));
self::assertTrue(str_contains($csv, 'N/A'));
}
}