assertNotSame('', $case->label(), sprintf('%s has no label', $case->name)); $keys[] = $case->value; $labels[] = $case->label(); } $this->assertSame($keys, array_unique($keys)); $this->assertSame($labels, array_unique($labels)); } #[\PHPUnit\Framework\Attributes\DataProvider('entries')] public function testTheAgreedEntryList( SeasonTask $task, string $label, SeasonTaskProvision $provides, bool $requiresReturn, ): void { $this->assertSame($label, $task->label()); $this->assertSame($provides, $task->provides()); $this->assertSame($requiresReturn, $task->requiresReturn()); } public static function entries(): iterable { yield [SeasonTask::MASTER_DATA, 'Stammdaten', SeasonTaskProvision::STANDARD, true]; yield [SeasonTask::VEHICLE, 'KfZ', SeasonTaskProvision::STANDARD, true]; yield [SeasonTask::CONTRACT, 'Vertrag', SeasonTaskProvision::INDIVIDUAL, true]; yield [SeasonTask::ADDITIONAL_CONTRACT, 'Zusatzvertrag', SeasonTaskProvision::INDIVIDUAL, true]; yield [SeasonTask::SAAS_REGISTERED, 'SaaS angemeldet', SeasonTaskProvision::NONE, false]; yield [SeasonTask::MUNICIPALITY_REGISTERED, 'Gemeinde angemeldet', SeasonTaskProvision::NONE, false]; } public function testAnEntryThatHandsNothingOutNeverExpectsSomethingBack(): void { // the two are independent properties, but "nothing out and something back" would be a // task the teamer is reminded about without ever being given anything to return foreach (SeasonTask::cases() as $case) { if (SeasonTaskProvision::NONE === $case->provides()) { $this->assertFalse($case->requiresReturn(), sprintf('%s expects a return', $case->name)); } } } public function testRequiringReturnIsTheTeamerFacingSubsetInEnumOrder(): void { $this->assertSame( [ SeasonTask::MASTER_DATA, SeasonTask::VEHICLE, SeasonTask::CONTRACT, SeasonTask::ADDITIONAL_CONTRACT, ], SeasonTask::requiringReturn() ); } }