1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\Persistence\Mapping;
use Doctrine\Persistence\Mapping\AbstractClassMetadataFactory;
use Doctrine\Persistence\Mapping\ClassMetadata;
use Doctrine\Persistence\Mapping\Driver\MappingDriver;
use Doctrine\Persistence\Mapping\MappingException;
use Doctrine\Tests\DoctrineTestCase;
use PHPUnit\Framework\Attributes\RequiresPhpunit;
#[RequiresPhpunit('< 12')]
final class AbstractClassMetadataFactoryTest extends DoctrineTestCase
{
#[RequiresPhpunit('< 10')]
public function testItSkipsTransientClasses(): void
{
$cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class);
$cmf
->method('newClassMetadataInstance')
->withConsecutive([SomeGrandParentEntity::class], [SomeEntity::class])
->willReturnOnConsecutiveCalls(
$this->createMock(ClassMetadata::class),
$this->createMock(ClassMetadata::class),
);
$driver = $this->createMock(MappingDriver::class);
$cmf->method('getDriver')
->willReturn($driver);
$driver->expects(self::exactly(2))
->method('isTransient')
->withConsecutive(
[SomeGrandParentEntity::class],
[SomeParentEntity::class],
)
->willReturnOnConsecutiveCalls(false, true);
$cmf->getMetadataFor(SomeEntity::class);
}
public function testItThrowsWhenAttemptingToGetMetadataForAnonymousClass(): void
{
$cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class);
$this->expectException(MappingException::class);
$cmf->getMetadataFor((new class {
})::class);
}
public function testAnonymousClassIsNotMistakenForShortAlias(): void
{
$cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class);
self::assertFalse($cmf->isTransient((new class () {
})::class));
}
public function testItThrowsWhenAttemptingToGetMetadataForShortAlias(): void
{
$cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class);
$this->expectException(MappingException::class);
// @phpstan-ignore-next-line
$cmf->getMetadataFor('App:Test');
}
public function testItThrowsWhenAttemptingToCheckTransientForShortAlias(): void
{
$cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class);
$this->expectException(MappingException::class);
// @phpstan-ignore-next-line
$cmf->isTransient('App:Test');
}
public function testItGetsTheSameMetadataForBackslashedClassName(): void
{
$cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class);
$cmf
->method('newClassMetadataInstance')
->with(SomeOtherEntity::class)
->willReturn(
self::createStub(ClassMetadata::class),
);
self::assertSame($cmf->getMetadataFor(SomeOtherEntity::class), $cmf->getMetadataFor('\\' . SomeOtherEntity::class));
}
}
class SomeGrandParentEntity
{
}
class SomeParentEntity extends SomeGrandParentEntity
{
}
final class SomeEntity extends SomeParentEntity
{
}
final class SomeOtherEntity
{
}
|