| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- <?php
- namespace App\Tests\Unit\Service\Utils;
- use App\Entity\Access\Access;
- use App\Entity\Billing\BillingSetting;
- use App\Entity\Billing\ResidenceArea;
- use App\Entity\Education\EducationTiming;
- use App\Entity\Organization\Organization;
- use App\Service\Utils\EntityUtils;
- use Doctrine\ORM\EntityManagerInterface;
- use Doctrine\Persistence\Mapping\ClassMetadata;
- use Doctrine\Persistence\Mapping\ClassMetadataFactory;
- use PHPUnit\Framework\MockObject\MockObject;
- use PHPUnit\Framework\TestCase;
- class TestableEntityUtils extends EntityUtils
- {
- public function getEntityNamesMappingCache(): array
- {
- return $this->entityNamesMappingCache;
- }
- public function setEntityNamesMappingCache(array $entityNamesMappingCache)
- {
- $this->entityNamesMappingCache = $entityNamesMappingCache;
- }
- public function organizationDefaultValue($entity, Access $access): void
- {
- parent::organizationDefaultValue($entity, $access);
- }
- public function billingSettingDefaultValueDefaultValue($entity, Access $access): void
- {
- parent::billingSettingDefaultValueDefaultValue($entity, $access);
- }
- public function populateEntityNamesMappingCache(): void
- {
- parent::populateEntityNamesMappingCache();
- }
- }
- class EntityUtilsTest extends TestCase
- {
- private EntityManagerInterface $entityManager;
- public function setUp(): void
- {
- $this->entityManager = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock();
- }
- protected function getEntityUtilsMockFor(string $method): MockObject|TestableEntityUtils
- {
- return $this->getMockBuilder(TestableEntityUtils::class)
- ->setConstructorArgs([$this->entityManager])
- ->setMethodsExcept(['getEntityNamesMappingCache', 'setEntityNamesMappingCache', $method])
- ->getMock();
- }
- /**
- * @see EntityUtils::defaultValueSettersByAccess()
- */
- public function testDefaultValueSettersByAccess(): void
- {
- $utils = $this->getEntityUtilsMockFor('defaultValueSettersByAccess');
- $entity = $this->getMockBuilder(Organization::class)->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $utils->expects(self::once())->method('organizationDefaultValue')->with($entity, $access);
- $utils->expects(self::once())->method('billingSettingDefaultValueDefaultValue')->with($entity, $access);
- $utils->defaultValueSettersByAccess($entity, $access);
- }
- /**
- * @see EntityUtils::organizationDefaultValue()
- */
- public function testOrganizationDefaultValue(): void
- {
- $utils = $this->getEntityUtilsMockFor('organizationDefaultValue');
- $organization = $this->getMockBuilder(Organization::class)->getMock();
- $entity = new EducationTiming(); // Can't test this method with a mocked entity...
- $access = $this->getMockBuilder(Access::class)->getMock();
- $access->method('getOrganization')->willReturn($organization);
- $utils->organizationDefaultValue($entity, $access);
- $this->assertEquals($organization, $entity->getOrganization());
- }
- /**
- * @see EntityUtils::billingSettingDefaultValueDefaultValue()
- */
- public function testBillingSettingDefaultValueDefaultValue(): void
- {
- $utils = $this->getEntityUtilsMockFor('billingSettingDefaultValueDefaultValue');
- $entity = new ResidenceArea(); // Can't test this method with a mocked entity...
- $billingSetting = $this->getMockBuilder(BillingSetting::class)->getMock();
- $organization = $this->getMockBuilder(Organization::class)->getMock();
- $organization->method('getBillingSetting')->willReturn($billingSetting);
- $access = $this->getMockBuilder(Access::class)->getMock();
- $access->method('getOrganization')->willReturn($organization);
- $utils->billingSettingDefaultValueDefaultValue($entity, $access);
- $this->assertEquals($billingSetting, $entity->getBillingSetting());
- }
- public function testGetEntityNameFromFullName(): void
- {
- $utils = $this->getEntityUtilsMockFor('getEntityNameFromFullName');
- $this->assertEquals(
- 'File',
- $utils->getEntityNameFromFullName('\App\Entity\Core\File')
- );
- $this->assertEquals(
- 'File',
- $utils->getEntityNameFromFullName('\File')
- );
- $this->assertEquals(
- 'File',
- $utils->getEntityNameFromFullName('File')
- );
- }
- public function testGetFullNameFromEntityName(): void
- {
- $utils = $this->getEntityUtilsMockFor('getFullNameFromEntityName');
- $utils->setEntityNamesMappingCache(['File' => '\App\Entity\Core\File']);
- $utils->expects(self::never())->method('populateEntityNamesMappingCache');
- $this->assertEquals(
- '\App\Entity\Core\File',
- $utils->getFullNameFromEntityName('File')
- );
- }
- public function testGetFullNameFromEntityNameEmptyCache(): void
- {
- $utils = $this->getEntityUtilsMockFor('getFullNameFromEntityName');
- $utils->setEntityNamesMappingCache([]);
- $utils
- ->expects(self::once())
- ->method('populateEntityNamesMappingCache')
- ->willReturnCallback(function () use ($utils) {
- $utils->setEntityNamesMappingCache(['File' => '\App\Entity\Core\File']);
- })
- ;
- $this->assertEquals(
- '\App\Entity\Core\File',
- $utils->getFullNameFromEntityName('File')
- );
- }
- public function testGetFullNameFromEntityNameNonExistingEntity(): void
- {
- $utils = $this->getEntityUtilsMockFor('getFullNameFromEntityName');
- $utils->setEntityNamesMappingCache(['File' => '\App\Entity\Core\File']);
- $utils->expects(self::never())->method('populateEntityNamesMappingCache');
- $this->expectException(\LogicException::class);
- $this->expectExceptionMessage('No entity found for name `Foo`');
- $utils->getFullNameFromEntityName('Foo');
- }
- public function testPopulateEntityNamesMappingCache(): void
- {
- $utils = $this->getEntityUtilsMockFor('populateEntityNamesMappingCache');
- $metadataFactory = $this->getMockBuilder(ClassMetadataFactory::class)->getMock();
- $this->entityManager
- ->expects(self::once())
- ->method('getMetadataFactory')
- ->willReturn($metadataFactory);
- $entityMetadata1 = $this->getMockBuilder(ClassMetadata::class)->getMock();
- $entityMetadata1->method('getName')->willReturn('/Namespace/Entity1');
- $entityMetadata2 = $this->getMockBuilder(ClassMetadata::class)->getMock();
- $entityMetadata2->method('getName')->willReturn('/Namespace/Entity2');
- $entityMetadata3 = $this->getMockBuilder(ClassMetadata::class)->getMock();
- $entityMetadata3->method('getName')->willReturn('/Namespace/Entity3');
- $metadataFactory
- ->method('getAllMetadata')
- ->willReturn([$entityMetadata1, $entityMetadata2, $entityMetadata3]);
- $utils->method('getEntityNameFromFullName')->willReturnMap(
- [
- ['/Namespace/Entity1', 'Entity1'],
- ['/Namespace/Entity2', 'Entity2'],
- ['/Namespace/Entity3', 'Entity3'],
- ]
- );
- $this->assertEquals(
- [],
- $utils->getEntityNamesMappingCache()
- );
- $utils->populateEntityNamesMappingCache();
- $this->assertEquals(
- [
- 'Entity1' => '/Namespace/Entity1',
- 'Entity2' => '/Namespace/Entity2',
- 'Entity3' => '/Namespace/Entity3',
- ],
- $utils->getEntityNamesMappingCache()
- );
- }
- public function testPopulateEntityNamesMappingCacheWithExistingCache(): void
- {
- $utils = $this->getEntityUtilsMockFor('populateEntityNamesMappingCache');
- $metadataFactory = $this->getMockBuilder(ClassMetadataFactory::class)->getMock();
- $this->entityManager
- ->expects(self::once())
- ->method('getMetadataFactory')
- ->willReturn($metadataFactory);
- $entityMetadata1 = $this->getMockBuilder(ClassMetadata::class)->getMock();
- $entityMetadata1->method('getName')->willReturn('/Namespace/Entity');
- $metadataFactory
- ->method('getAllMetadata')
- ->willReturn([$entityMetadata1]);
- $utils->method('getEntityNameFromFullName')->willReturnMap(
- [
- ['/Namespace/Entity', 'Entity'],
- ]
- );
- $utils->setEntityNamesMappingCache(['OtherEntity' => '/Namespace/OtherEntity']);
- $this->assertEquals(
- ['OtherEntity' => '/Namespace/OtherEntity'],
- $utils->getEntityNamesMappingCache()
- );
- $utils->populateEntityNamesMappingCache();
- $this->assertEquals(
- ['Entity' => '/Namespace/Entity'],
- $utils->getEntityNamesMappingCache()
- );
- }
- public function testGetNamespaceFromName(): void
- {
- $utils = $this->getEntityUtilsMockFor('getNamespaceFromName');
- $this->assertEquals(
- 'App\Entity\Core',
- $utils->getNamespaceFromName('\App\Entity\Core\File')
- );
- $this->assertEquals(
- '',
- $utils->getNamespaceFromName('\File')
- );
- }
- }
|