check = new MealPreferenceRequiredCheck(); } /** * @dataProvider mixedRoleProvider */ public function testDoesNotApplyToExcludedMixedRoleUsersWithTeamerRole(string $excludedRole): void { $user = $this->createTeamerUser(); $user->setRoles([$excludedRole, 'ROLE_TEAMER']); $this->assertFalse($this->check->appliesTo($user)); } public function mixedRoleProvider(): array { return [ ['ROLE_ADMIN'], ['ROLE_MANAGER'], ['ROLE_HOUSE_MANAGER'], ]; } public function testRedirectsToItsOwnCheckPage(): void { $this->assertSame('app_teamer_check_meal_preference', $this->check->getRouteName()); } public function testIsNotSatisfiedWithoutTeamer(): void { $user = (new User())->setRoles(['ROLE_TEAMER']); $this->assertFalse($this->check->isSatisfied($user)); } public function testIsNotSatisfiedWhenMealPreferenceIsMissing(): void { $user = $this->createTeamerUser(); $this->assertFalse($this->check->isSatisfied($user)); } public function testIsSatisfiedWhenMealPreferenceIsSet(): void { $user = $this->createTeamerUser(); $user->getTeamer()?->setMealPreference(MealPreference::NONE); $this->assertTrue($this->check->isSatisfied($user)); } private function createTeamerUser(): User { $teamer = new Teamer(); return (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; } }