L'enseignant avait besoin d'un moyen rapide de saisir les notes après une évaluation. La grille inline permet de compléter 30 élèves en moins de 3 minutes grâce à la navigation clavier (Tab/Enter/Shift+Tab), la validation temps réel, l'auto-save debounced (500ms) et les raccourcis /abs et /disp pour marquer absents/dispensés. Les notes restent en brouillon jusqu'à publication explicite (avec confirmation modale). Une fois publiées, les élèves les voient immédiatement ; les parents après un délai de 24h (VisibiliteNotesPolicy). Le mode offline stocke les notes en IndexedDB et synchronise automatiquement au retour de la connexion. Chaque modification est auditée dans grade_events via un event subscriber qui écoute NoteSaisie/NoteModifiee sur le bus d'événements.
53 lines
1.2 KiB
PHP
53 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Unit\Scolarite\Domain\Model\Grade;
|
|
|
|
use App\Scolarite\Domain\Exception\ValeurNoteInvalideException;
|
|
use App\Scolarite\Domain\Model\Grade\GradeValue;
|
|
use PHPUnit\Framework\Attributes\Test;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class GradeValueTest extends TestCase
|
|
{
|
|
#[Test]
|
|
public function acceptsZero(): void
|
|
{
|
|
self::assertSame(0.0, (new GradeValue(0))->value);
|
|
}
|
|
|
|
#[Test]
|
|
public function acceptsPositiveValue(): void
|
|
{
|
|
self::assertSame(15.5, (new GradeValue(15.5))->value);
|
|
}
|
|
|
|
#[Test]
|
|
public function rejectsNegativeValue(): void
|
|
{
|
|
$this->expectException(ValeurNoteInvalideException::class);
|
|
|
|
new GradeValue(-1);
|
|
}
|
|
|
|
#[Test]
|
|
public function rejectsNegativeDecimal(): void
|
|
{
|
|
$this->expectException(ValeurNoteInvalideException::class);
|
|
|
|
new GradeValue(-0.5);
|
|
}
|
|
|
|
#[Test]
|
|
public function equalsComparesValues(): void
|
|
{
|
|
$a = new GradeValue(15.0);
|
|
$b = new GradeValue(15.0);
|
|
$c = new GradeValue(12.0);
|
|
|
|
self::assertTrue($a->equals($b));
|
|
self::assertFalse($a->equals($c));
|
|
}
|
|
}
|