createValidator()); $personalData = $this->createCompletePersonalData(); self::assertTrue($checker->isComplete($personalData)); self::assertSame([], $checker->invalidIdentityFields($personalData)); } /** * A company name in the last name and no first name is what BusPro hands us for some accounts. */ public function testMissingFirstNameIsReportedAndKeepsTheProfileIncomplete(): void { $checker = new ProfileCompletenessChecker($this->createValidator()); $personalData = $this->createCompletePersonalData(); $personalData->firstName = null; $personalData->name = 'Musterfirma GmbH'; self::assertFalse($checker->isComplete($personalData)); self::assertSame(['Vorname'], $checker->invalidIdentityFields($personalData)); } public function testInvalidIdentityFieldsAreListedInFixedOrder(): void { $checker = new ProfileCompletenessChecker($this->createValidator()); $personalData = $this->createCompletePersonalData(); $personalData->communication->email = 'not-an-address'; $personalData->name = ''; $personalData->firstName = ''; self::assertSame(['Vorname', 'Nachname', 'E-Mail-Adresse'], $checker->invalidIdentityFields($personalData)); } public function testFieldsTheUserCanEditAreNotReportedAsIdentityFields(): void { $checker = new ProfileCompletenessChecker($this->createValidator()); $personalData = $this->createCompletePersonalData(); $personalData->address->street = null; $personalData->communication->mobile = null; self::assertFalse($checker->isComplete($personalData)); self::assertSame([], $checker->invalidIdentityFields($personalData)); } private function createValidator(): ValidatorInterface { return Validation::createValidatorBuilder()->enableAttributeMapping()->getValidator(); } private function createCompletePersonalData(): PersonalData { $personalData = new PersonalData(); $personalData->firstName = 'Mia'; $personalData->name = 'Muster'; $personalData->gender = 'W'; $personalData->nationality = 'D'; $personalData->dateOfBirth = new \DateTimeImmutable('1990-01-01'); $personalData->address->street = 'Musterweg 1'; $personalData->address->postCode = '12345'; $personalData->address->city = 'Musterstadt'; $personalData->address->country = 'D'; $personalData->communication->email = 'mia@example.com'; $personalData->communication->mobile = '0170 1234567'; return $personalData; } }