check = new FinancialDataRequiredCheck(); } /** * @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 { // must not be the full profile form, which would also demand photo, // language and health insurance and could lock the teamer out $this->assertSame('app_teamer_check_financial_data', $this->check->getRouteName()); } public function testIsNotSatisfiedWithoutTeamer(): void { $user = (new User())->setRoles(['ROLE_TEAMER']); $this->assertFalse($this->check->isSatisfied($user)); } public function testIsNotSatisfiedWhenNothingIsSet(): void { $user = $this->createTeamerUser(); $this->assertFalse($this->check->isSatisfied($user)); } public function testIsNotSatisfiedWhenTaxIdIsMissing(): void { $user = $this->createTeamerUser(); $user->getTeamer()?->setBankAccount($this->createBankAccount()); $this->assertFalse($this->check->isSatisfied($user)); } public function testIsNotSatisfiedWhenBankAccountIsMissing(): void { $user = $this->createTeamerUser(); $user->getTeamer()?->setTaxId('12345678901'); $this->assertFalse($this->check->isSatisfied($user)); } /** * @dataProvider missingBankAccountFieldProvider */ public function testIsNotSatisfiedWhenBankAccountFieldIsMissing(string $setter): void { $bankAccount = $this->createBankAccount(); $bankAccount->{$setter}(null); $user = $this->createTeamerUser(); $user->getTeamer() ?->setTaxId('12345678901') ->setBankAccount($bankAccount) ; $this->assertFalse($this->check->isSatisfied($user)); } public function missingBankAccountFieldProvider(): array { return [ ['setIban'], ['setBic'], ['setBank'], ['setHolder'], ]; } public function testIsSatisfiedWhenTaxIdAndBankAccountAreComplete(): void { $user = $this->createTeamerUser(); $user->getTeamer() ?->setTaxId('12345678901') ->setBankAccount($this->createBankAccount()) ; $this->assertTrue($this->check->isSatisfied($user)); } private function createBankAccount(): BankAccount { return (new BankAccount()) ->setIban('DE02120300000000202051') ->setBic('BYLADEM1001') ->setBank('Deutsche Kreditbank') ->setHolder('Erika Mustermann') ; } private function createTeamerUser(): User { $teamer = new Teamer(); return (new User()) ->setRoles(['ROLE_TEAMER']) ->setTeamer($teamer) ; } }