mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
141 lines
5.3 KiB
PHP
141 lines
5.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* Chill is a software for social workers
|
|
*
|
|
* For the full copyright and license information, please view
|
|
* the LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Serializer\Normalizer;
|
|
|
|
use Chill\MainBundle\Entity\Center;
|
|
use Chill\MainBundle\Entity\Civility;
|
|
use Chill\MainBundle\Entity\Location;
|
|
use Chill\MainBundle\Entity\Scope;
|
|
use Chill\MainBundle\Entity\User;
|
|
use Chill\MainBundle\Entity\UserJob;
|
|
use Chill\MainBundle\Serializer\Normalizer\UserNormalizer;
|
|
use Chill\MainBundle\Templating\Entity\UserRender;
|
|
use libphonenumber\NumberParseException;
|
|
use libphonenumber\PhoneNumber;
|
|
use libphonenumber\PhoneNumberUtil;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Prophecy\Argument;
|
|
use Prophecy\PhpUnit\ProphecyTrait;
|
|
use Symfony\Component\Serializer\Exception\ExceptionInterface;
|
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
|
|
|
/**
|
|
* @internal
|
|
*
|
|
* @coversNothing
|
|
*/
|
|
final class UserNormalizerTest extends TestCase
|
|
{
|
|
use ProphecyTrait;
|
|
|
|
/**
|
|
* @throws NumberParseException
|
|
*/
|
|
public function dataProviderUserNormalizer()
|
|
{
|
|
$user = new User();
|
|
$userNoPhone = new User();
|
|
|
|
$user
|
|
->setUsername('SomeUser')
|
|
->setLabel('SomeUser')
|
|
->setPhonenumber(PhoneNumberUtil::getInstance()->parse('+32475928635'))
|
|
->setEmail('some.user@chill.com');
|
|
|
|
$userNoPhone
|
|
->setUsername('AnotherUser')
|
|
->setLabel('AnotherUser');
|
|
|
|
yield [$user, 'docgen', ['docgen:expects' => User::class],
|
|
[
|
|
'id' => $user->getId(), // id
|
|
'type' => 'user', // type
|
|
'username' => 'SomeUser', // username
|
|
'email' => 'some.user@chill.com', // email
|
|
'text' => 'SomeUser', // text
|
|
'label' => 'SomeUser', // label
|
|
'phonenumber' => ['context' => PhoneNumber::class], // phonenumber
|
|
'main_scope' => ['context' => Scope::class], // scope
|
|
'user_job' => ['context' => UserJob::class], // user job
|
|
'current_location' => ['context' => Location::class], // curent location
|
|
'main_location' => ['context' => Location::class], // main location
|
|
'civility' => ['context' => Civility::class], // civility
|
|
'text_without_absent' => 'SomeUser',
|
|
'isAbsent' => false,
|
|
'main_center' => ['context' => Center::class],
|
|
]];
|
|
|
|
yield [$userNoPhone, 'docgen', ['docgen:expects' => User::class],
|
|
[
|
|
'id' => $user->getId(), // id
|
|
'type' => 'user', // type
|
|
'username' => 'AnotherUser', // username
|
|
'email' => '', // email
|
|
'text' => 'AnotherUser', // text
|
|
'label' => 'AnotherUser', // label
|
|
'phonenumber' => ['context' => PhoneNumber::class], // phonenumber
|
|
'main_scope' => ['context' => Scope::class], // scope
|
|
'user_job' => ['context' => UserJob::class], // user job
|
|
'current_location' => ['context' => Location::class], // curent location
|
|
'main_location' => ['context' => Location::class], // main location
|
|
'civility' => ['context' => Civility::class], // civility
|
|
'text_without_absent' => 'AnotherUser',
|
|
'isAbsent' => false,
|
|
'main_center' => ['context' => Center::class],
|
|
]];
|
|
|
|
yield [null, 'docgen', ['docgen:expects' => User::class], [
|
|
'id' => '', // id
|
|
'type' => 'user', // type
|
|
'username' => '', // username
|
|
'email' => '', // email
|
|
'text' => '', // text
|
|
'label' => '', // label
|
|
'phonenumber' => ['context' => PhoneNumber::class], // phonenumber
|
|
'main_scope' => ['context' => Scope::class], // scope
|
|
'user_job' => ['context' => UserJob::class], // user job
|
|
'current_location' => ['context' => Location::class], // curent location
|
|
'main_location' => ['context' => Location::class], // main location
|
|
'civility' => ['context' => Civility::class], // civility
|
|
'text_without_absent' => '',
|
|
'isAbsent' => false,
|
|
'main_center' => ['context' => Center::class],
|
|
]];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider dataProviderUserNormalizer
|
|
*
|
|
* @throws ExceptionInterface
|
|
*/
|
|
public function testNormalize(null|User $user, mixed $format, mixed $context, mixed $expected)
|
|
{
|
|
$userRender = $this->prophesize(UserRender::class);
|
|
$userRender->renderString(Argument::type(User::class), Argument::type('array'))->willReturn($user ? $user->getLabel() : '');
|
|
|
|
$normalizer = new UserNormalizer($userRender->reveal());
|
|
$normalizer->setNormalizer(new class () implements NormalizerInterface {
|
|
public function normalize($object, string $format = null, array $context = [])
|
|
{
|
|
return ['context' => $context['docgen:expects'] ?? null];
|
|
}
|
|
|
|
public function supportsNormalization($data, string $format = null)
|
|
{
|
|
return true;
|
|
}
|
|
});
|
|
|
|
$this->assertEquals($expected, $normalizer->normalize($user, $format, $context));
|
|
}
|
|
}
|