83 lines
3.1 KiB
PHP
83 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Service;
|
|
|
|
use App\BusProNet\Model\PersonalData;
|
|
use App\Service\ProfileCompletenessChecker;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\Validator\Validation;
|
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|
|
|
class ProfileCompletenessCheckerTest extends TestCase
|
|
{
|
|
public function testCompleteProfileHasNoInvalidIdentityFields(): void
|
|
{
|
|
$checker = new ProfileCompletenessChecker($this->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 = '[email protected]';
|
|
$personalData->communication->mobile = '0170 1234567';
|
|
|
|
return $personalData;
|
|
}
|
|
}
|