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 104 105 106 107
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\ORM\Hydration;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
use Doctrine\Tests\Models\CMS\CmsUser;
use Doctrine\Tests\Models\Legacy\LegacyUser;
use Doctrine\Tests\Models\Legacy\LegacyUserReference;
use Doctrine\Tests\OrmTestCase;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RequiresPhpunit;
/**
* Description of ResultSetMappingTest
*/
#[RequiresPhpunit('< 12')]
class ResultSetMappingTest extends OrmTestCase
{
private ResultSetMapping $_rsm;
private EntityManagerInterface $entityManager;
protected function setUp(): void
{
parent::setUp();
$this->_rsm = new ResultSetMapping();
$this->entityManager = $this->getTestEntityManager();
}
/**
* For SQL: SELECT id, status, username, name FROM cms_users
*/
public function testBasicResultSetMapping(): void
{
$this->_rsm->addEntityResult(
CmsUser::class,
'u',
);
$this->_rsm->addFieldResult('u', 'id', 'id');
$this->_rsm->addFieldResult('u', 'status', 'status');
$this->_rsm->addFieldResult('u', 'username', 'username');
$this->_rsm->addFieldResult('u', 'name', 'name');
self::assertFalse($this->_rsm->isScalarResult('id'));
self::assertFalse($this->_rsm->isScalarResult('status'));
self::assertFalse($this->_rsm->isScalarResult('username'));
self::assertFalse($this->_rsm->isScalarResult('name'));
self::assertEquals($this->_rsm->getClassName('u'), CmsUser::class);
$class = $this->_rsm->getDeclaringClass('id');
self::assertEquals($class, CmsUser::class);
self::assertEquals('u', $this->_rsm->getEntityAlias('id'));
self::assertEquals('u', $this->_rsm->getEntityAlias('status'));
self::assertEquals('u', $this->_rsm->getEntityAlias('username'));
self::assertEquals('u', $this->_rsm->getEntityAlias('name'));
self::assertEquals('id', $this->_rsm->getFieldName('id'));
self::assertEquals('status', $this->_rsm->getFieldName('status'));
self::assertEquals('username', $this->_rsm->getFieldName('username'));
self::assertEquals('name', $this->_rsm->getFieldName('name'));
}
/**
* Fluent interface test, not a real result set mapping
*/
#[Group('DDC-1057')]
public function testFluentInterface(): void
{
$rms = $this->_rsm;
$this->_rsm->addEntityResult(CmsUser::class, 'u');
$this->_rsm->addJoinedEntityResult(CmsPhonenumber::class, 'p', 'u', 'phonenumbers');
$this->_rsm->addFieldResult('u', 'id', 'id');
$this->_rsm->addFieldResult('u', 'name', 'name');
$this->_rsm->setDiscriminatorColumn('name', 'name');
$this->_rsm->addIndexByColumn('id', 'id');
$this->_rsm->addIndexBy('username', 'username');
$this->_rsm->addIndexByScalar('sclr0');
$this->_rsm->addScalarResult('sclr0', 'numPhones');
$this->_rsm->addMetaResult('a', 'user_id', 'user_id');
self::assertTrue($rms->hasIndexBy('id'));
self::assertTrue($rms->isFieldResult('id'));
self::assertTrue($rms->isFieldResult('name'));
self::assertTrue($rms->isScalarResult('sclr0'));
self::assertTrue($rms->isRelation('p'));
self::assertTrue($rms->hasParentAlias('p'));
self::assertTrue($rms->isMixedResult());
}
#[Group('DDC-117')]
public function testIndexByMetadataColumn(): void
{
$this->_rsm->addEntityResult(LegacyUser::class, 'u');
$this->_rsm->addJoinedEntityResult(LegacyUserReference::class, 'lu', 'u', '_references');
$this->_rsm->addMetaResult('lu', '_source', '_source', true, 'integer');
$this->_rsm->addMetaResult('lu', '_target', '_target', true, 'integer');
$this->_rsm->addIndexBy('lu', '_source');
self::assertTrue($this->_rsm->hasIndexBy('lu'));
}
}
|