setRoles(['ROLE_TEAMER']); $this->assertTrue($check->appliesTo($user)); } /** * @dataProvider mixedRoleProvider */ public function testDoesNotApplyToExcludedMixedRoleUsersWithTeamerRole(string $excludedRole): void { $check = new PersonalDataVerificationRequiredCheck(); $user = (new User())->setRoles([$excludedRole, 'ROLE_TEAMER']); $this->assertFalse($check->appliesTo($user)); } public function mixedRoleProvider(): array { return [ ['ROLE_ADMIN'], ['ROLE_MANAGER'], ['ROLE_HOUSE_MANAGER'], ]; } public function testIsNotSatisfiedWhenTeamerIsMissing(): void { $check = new PersonalDataVerificationRequiredCheck(); $user = (new User())->setRoles(['ROLE_TEAMER']); $this->assertFalse($check->isSatisfied($user)); } public function testIsSatisfiedBeforeFirstDeadlineEvenWithoutVerification(): void { CarbonImmutable::setTestNow('2026-01-10 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer())->setCreatedAt(new \DateTimeImmutable('2025-11-05 12:00:00')); $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertTrue($check->isSatisfied($user)); } public function testIsNotSatisfiedAfterFirstDeadlineWhenNeverVerified(): void { CarbonImmutable::setTestNow('2026-01-20 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer())->setCreatedAt(new \DateTimeImmutable('2025-11-05 12:00:00')); $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertFalse($check->isSatisfied($user)); } public function testIsSatisfiedWhenVerifiedAfterCurrentDeadline(): void { CarbonImmutable::setTestNow('2026-05-20 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer()) ->setCreatedAt(new \DateTimeImmutable('2025-11-05 12:00:00')) ->setDataVerifiedAt(new \DateTimeImmutable('2026-01-16 10:00:00')) ; $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertTrue($check->isSatisfied($user)); } public function testIsNotSatisfiedWhenVerificationIsOutdated(): void { CarbonImmutable::setTestNow('2026-07-20 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer()) ->setCreatedAt(new \DateTimeImmutable('2025-11-05 12:00:00')) ->setDataVerifiedAt(new \DateTimeImmutable('2026-02-01 10:00:00')) ; $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertFalse($check->isSatisfied($user)); } public function testIsSatisfiedAfterFirstDeadlineWhenRegisteredAfterThatDeadline(): void { CarbonImmutable::setTestNow('2026-05-20 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer())->setCreatedAt(new \DateTimeImmutable('2026-03-01 10:00:00')); $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertTrue($check->isSatisfied($user)); } public function testIsSatisfiedAfterSecondDeadlineWhenRegisteredAfterThatDeadline(): void { CarbonImmutable::setTestNow('2026-11-20 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer())->setCreatedAt(new \DateTimeImmutable('2026-10-01 10:00:00')); $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertTrue($check->isSatisfied($user)); } public function testIsNotSatisfiedAfterSecondDeadlineWhenRegisteredBeforeCurrentYearDeadlines(): void { CarbonImmutable::setTestNow('2026-11-20 12:00:00'); $check = new PersonalDataVerificationRequiredCheck(['01-15', '07-15']); $teamer = (new Teamer())->setCreatedAt(new \DateTimeImmutable('2025-10-01 10:00:00')); $user = (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; $this->assertFalse($check->isSatisfied($user)); } }