check = new DriverLicenseRequiredCheck(); } /** * @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 testIsNotSatisfiedWhenDeclarationIsMissing(): void { $user = $this->createTeamerUser(); $this->assertFalse($this->check->isSatisfied($user)); } public function testIsSatisfiedWhenTeamerHasNoDriverLicense(): void { $user = $this->createTeamerUser(); $user->getTeamer()?->setDriverLicenseDeclaration(false); $this->assertTrue($this->check->isSatisfied($user)); } public function testIsNotSatisfiedWhenRejected(): void { $user = $this->createTeamerUser(); $teamer = $user->getTeamer(); $upload = (new Upload()) ->setType(Upload::TYPE_DRIVER_LICENSE) ->setStatus(Upload::STATUS_REJECTED) ; $teamer ?->setDriverLicenseDeclaration(true) ->setDriverLicenseStatus(Teamer::DRIVER_LICENSE_STATUS_DENIED) ->setDriverLicenseUpload($upload) ; $this->assertFalse($this->check->isSatisfied($user)); } public function testIsSatisfiedWhenSubmittedForReview(): void { $user = $this->createTeamerUser(); $teamer = $user->getTeamer(); $upload = (new Upload()) ->setType(Upload::TYPE_DRIVER_LICENSE) ->setStatus(Upload::STATUS_NEW) ; $teamer ?->setDriverLicenseDeclaration(true) ->setDriverLicenseStatus(Teamer::DRIVER_LICENSE_STATUS_PENDING_REVIEW) ->setDriverLicenseUpload($upload) ; $this->assertTrue($this->check->isSatisfied($user)); } public function testIsSatisfiedWhenApprovedWithoutUpload(): void { $user = $this->createTeamerUser(); $teamer = $user->getTeamer(); $teamer ?->setDriverLicenseDeclaration(true) ->setDriverLicenseVerified(true) ->setDriverLicenseStatus(Teamer::DRIVER_LICENSE_STATUS_APPROVED) ->setDriverLicenseUpload(null) ; $this->assertTrue($this->check->isSatisfied($user)); } private function createTeamerUser(): User { $teamer = new Teamer(); return (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; } }