feat: Permettre à l'élève de consulter ses notes et moyennes
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

L'élève avait accès à ses compétences mais pas à ses notes numériques.
Cette fonctionnalité lui donne une vue complète de sa progression scolaire
avec moyennes par matière, détail par évaluation, statistiques de classe,
et un mode "découverte" pour révéler ses notes à son rythme (FR14, FR15).

Les notes ne sont visibles qu'après publication par l'enseignant, ce qui
garantit que l'élève les découvre avant ses parents (délai 24h story 6.7).
This commit is contained in:
2026-04-05 16:04:26 +02:00
parent b7dc27f2a5
commit bec211ebf0
59 changed files with 7084 additions and 49 deletions

View File

@@ -70,6 +70,50 @@ final class VisibiliteNotesPolicyTest extends TestCase
self::assertFalse($policy->visiblePourParent($evaluation));
}
#[Test]
public function parentVoitImmediatementAvecDelaiZero(): void
{
$publishedAt = new DateTimeImmutable('2026-03-27 14:00:00');
$now = new DateTimeImmutable('2026-03-27 14:00:01'); // 1 seconde après
$policy = $this->createPolicy($now);
$evaluation = $this->createPublishedEvaluation($publishedAt);
self::assertTrue($policy->visiblePourParent($evaluation, delaiHeures: 0));
}
#[Test]
public function parentNeVoitPasAvec48hDeDelai(): void
{
$publishedAt = new DateTimeImmutable('2026-03-27 14:00:00');
$now = new DateTimeImmutable('2026-03-29 13:59:59'); // 47h59 après
$policy = $this->createPolicy($now);
$evaluation = $this->createPublishedEvaluation($publishedAt);
self::assertFalse($policy->visiblePourParent($evaluation, delaiHeures: 48));
}
#[Test]
public function parentVoitApres48hDeDelai(): void
{
$publishedAt = new DateTimeImmutable('2026-03-27 14:00:00');
$now = new DateTimeImmutable('2026-03-29 14:00:00'); // exactement 48h après
$policy = $this->createPolicy($now);
$evaluation = $this->createPublishedEvaluation($publishedAt);
self::assertTrue($policy->visiblePourParent($evaluation, delaiHeures: 48));
}
#[Test]
public function parentVoitImmediatementAvecDelaiNegatifTraiteCommeZero(): void
{
$publishedAt = new DateTimeImmutable('2026-03-27 14:00:00');
$now = new DateTimeImmutable('2026-03-27 14:00:01');
$policy = $this->createPolicy($now);
$evaluation = $this->createPublishedEvaluation($publishedAt);
self::assertTrue($policy->visiblePourParent($evaluation, delaiHeures: -5));
}
private function createPolicy(DateTimeImmutable $now): VisibiliteNotesPolicy
{
$clock = new class($now) implements Clock {