feat: local user registration
This commit is contained in:
1 parent
8bb7f08074
commit
161029ec7c
29 files changed
+1549
-601
No files matched your search
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\Model;
|
||||
|
||||
use App\BusProNet\Model\Address;
|
||||
use App\BusProNet\Model\Communication;
|
||||
use App\BusProNet\Model\PersonalData;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidatorFactory;
|
||||
use Symfony\Component\Validator\ConstraintValidatorInterface;
|
||||
use Symfony\Component\Validator\Constraints\Email;
|
||||
use Symfony\Component\Validator\Constraints\EmailValidator;
|
||||
use Symfony\Component\Validator\Validation;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
class PersonalDataCompletenessTest extends TestCase
|
||||
{
|
||||
public function testCompletePersonalDataPassesPersonalDataValidationGroup(): void
|
||||
{
|
||||
$personalData = $this->createCompletePersonalData();
|
||||
$personalData->remarks = 'Optional note';
|
||||
$personalData->address->district = 'Mitte';
|
||||
$personalData->communication->phone = '0301234567';
|
||||
|
||||
$violations = $this->validator()->validate($personalData, null, ['personal_data']);
|
||||
|
||||
self::assertCount(0, $violations);
|
||||
}
|
||||
|
||||
public function testMissingRequiredPersonalDataFieldFailsPersonalDataValidationGroup(): void
|
||||
{
|
||||
$personalData = $this->createCompletePersonalData();
|
||||
$personalData->name = null;
|
||||
|
||||
$violations = $this->validator()->validate($personalData, null, ['personal_data']);
|
||||
|
||||
self::assertCount(1, $violations);
|
||||
self::assertSame('name', $violations->get(0)->getPropertyPath());
|
||||
}
|
||||
|
||||
public function testAddressCompletenessIgnoresOptionalDistrict(): void
|
||||
{
|
||||
$address = new Address();
|
||||
$address->street = 'Main Street 1';
|
||||
$address->postCode = '12345';
|
||||
$address->city = 'Berlin';
|
||||
$address->country = 'DE';
|
||||
$address->district = 'Mitte';
|
||||
|
||||
$violations = $this->validator()->validate($address, null, ['personal_data']);
|
||||
|
||||
self::assertCount(0, $violations);
|
||||
|
||||
$address->street = null;
|
||||
|
||||
$violations = $this->validator()->validate($address, null, ['personal_data']);
|
||||
|
||||
self::assertCount(1, $violations);
|
||||
self::assertSame('street', $violations->get(0)->getPropertyPath());
|
||||
}
|
||||
|
||||
public function testCommunicationCompletenessIgnoresOptionalPhone(): void
|
||||
{
|
||||
$communication = new Communication();
|
||||
$communication->email = '[email protected]';
|
||||
$communication->mobile = '0123456789';
|
||||
$communication->phone = '0301234567';
|
||||
|
||||
$violations = $this->validator()->validate($communication, null, ['personal_data']);
|
||||
|
||||
self::assertCount(0, $violations);
|
||||
|
||||
$communication->mobile = null;
|
||||
|
||||
$violations = $this->validator()->validate($communication, null, ['personal_data']);
|
||||
|
||||
self::assertCount(1, $violations);
|
||||
self::assertSame('mobile', $violations->get(0)->getPropertyPath());
|
||||
}
|
||||
|
||||
private function createCompletePersonalData(): PersonalData
|
||||
{
|
||||
$personalData = new PersonalData();
|
||||
$personalData->firstName = 'Mia';
|
||||
$personalData->name = 'Muster';
|
||||
$personalData->gender = 'W';
|
||||
$personalData->nationality = 'DE';
|
||||
$personalData->dateOfBirth = new \DateTimeImmutable('1990-05-15');
|
||||
$personalData->address->street = 'Main Street 1';
|
||||
$personalData->address->postCode = '10115';
|
||||
$personalData->address->city = 'Berlin';
|
||||
$personalData->address->country = 'DE';
|
||||
$personalData->communication->email = '[email protected]';
|
||||
$personalData->communication->mobile = '0123456789';
|
||||
|
||||
return $personalData;
|
||||
}
|
||||
|
||||
private function validator(): ValidatorInterface
|
||||
{
|
||||
return Validation::createValidatorBuilder()
|
||||
->enableAttributeMapping()
|
||||
->setConstraintValidatorFactory(new class extends ConstraintValidatorFactory {
|
||||
public function getInstance(Constraint $constraint): ConstraintValidatorInterface
|
||||
{
|
||||
if (true === ($constraint instanceof Email)) {
|
||||
return new EmailValidator(Email::VALIDATION_MODE_HTML5);
|
||||
}
|
||||
|
||||
return parent::getInstance($constraint);
|
||||
}
|
||||
})
|
||||
->getValidator();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user