createDisposition($assignment, $teamer); $this->assertSame($disposition, $assignment->getActiveDispositionByTeamer($teamer)); } public function testACalledOffDispositionIsNotReturned(): void { $assignment = new Assignment(); $teamer = new Teamer(); $this ->createDisposition($assignment, $teamer) ->setStatus(Disposition::STATUS_CALLED_OFF) ; $this->assertNull($assignment->getActiveDispositionByTeamer($teamer)); } public function testTheDispositionOfAnotherTeamerIsNotReturned(): void { $assignment = new Assignment(); $this->createDisposition($assignment, new Teamer()); $this->assertNull($assignment->getActiveDispositionByTeamer(new Teamer())); } /** * A teamer can be called off and disposed again on the same assignment, so both dispositions * live side by side - the active one has to win. */ public function testTheActiveDispositionWinsOverACalledOffOne(): void { $assignment = new Assignment(); $teamer = new Teamer(); $this ->createDisposition($assignment, $teamer) ->setStatus(Disposition::STATUS_CALLED_OFF) ; $disposition = $this->createDisposition($assignment, $teamer); $this->assertSame($disposition, $assignment->getActiveDispositionByTeamer($teamer)); } /** * The "Busbegleitung ab" field stores 0 for "Keine Busbegleitung" as well as null. */ #[DataProvider('providePickups')] public function testHasBusEscort(int|string|null $pickup, bool $expected): void { $this->assertSame($expected, (new Assignment())->setPickup($pickup)->hasBusEscort()); } public static function providePickups(): iterable { yield 'none' => [null, false]; yield 'zero' => [0, false]; yield 'empty form value' => ['', false]; yield 'pickup' => [4711, true]; } private function createDisposition(Assignment $assignment, Teamer $teamer): Disposition { $disposition = new Disposition(new Application($assignment, $teamer)); $assignment->addDisposition($disposition); return $disposition; } }