em, new MahlzeitMapper()); } private function jetzt(): \DateTimeImmutable { return new \DateTimeImmutable('2026-09-18 12:00:00'); } private function speichere(string $name, int $sortOrder, string $status, array $tage): Mahlzeit { $jetzt = $this->jetzt(); $m = Mahlzeit::anlegen($name, '', $tage, $sortOrder, $jetzt); if ($status === 'gegessen') { $m = $m->markAsGegessen($jetzt); } $entity = (new MahlzeitMapper())->createEntity($m); $this->em->persist($entity); $this->em->flush(); return $m; } public function testFindLiefertModell(): void { $m = $this->speichere('Bolognese', 1, 'geplant', [Wochentag::Mo]); $id = $this->alleEntitaeten()[0]->getId(); $gefunden = $this->provider()->find($id); self::assertNotNull($gefunden); self::assertSame('Bolognese', $gefunden->name); self::assertSame($id, $gefunden->id); } public function testFindLiefertNullBeiUnbekannterId(): void { self::assertNull($this->provider()->find(9999)); } public function testListOhneFilterGibtAlleSortiertZurück(): void { $this->speichere('Zweite', 2, 'geplant', []); $this->speichere('Erste', 1, 'geplant', []); $this->speichere('Dritte', 3, 'gegessen', []); $liste = $this->provider()->list(); self::assertCount(3, $liste); self::assertSame(['Erste', 'Zweite', 'Dritte'], \array_map(static fn (Mahlzeit $m) => $m->name, $liste)); } public function testListMitStatusFilter(): void { $this->speichere('A', 1, 'geplant', []); $this->speichere('B', 2, 'gegessen', []); $this->speichere('C', 3, 'geplant', []); $geplante = $this->provider()->list(MahlzeitStatus::Geplant); $gegessene = $this->provider()->list(MahlzeitStatus::Gegessen); self::assertCount(2, $geplante); self::assertCount(1, $gegessene); self::assertSame('B', $gegessene[0]->name); } public function testMaxSortOrderLiefertMaximum(): void { $this->speichere('A', 1, 'geplant', []); $this->speichere('B', 7, 'geplant', []); $this->speichere('C', 3, 'geplant', []); self::assertSame(7, $this->provider()->maxSortOrder()); } public function testMaxSortOrderLeereTabelleLiefertNullsafe(): void { // provider gibt null->0 zurück $max = $this->provider()->maxSortOrder(); self::assertIsInt($max); } }