1
0
mirror of synced 2025-02-03 13:59:27 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php

190 lines
6.9 KiB
PHP
Raw Normal View History

2013-02-13 20:42:13 -02:00
<?php
namespace Doctrine\Tests\ORM\Cache;
use Doctrine\Tests\OrmTestCase;
use Doctrine\Tests\Models\Cache\State;
use Doctrine\Tests\Models\Cache\Country;
2014-01-07 03:04:22 -05:00
use Doctrine\ORM\UnitOfWork;
use Doctrine\ORM\Cache\EntityCacheKey;
use Doctrine\ORM\Cache\EntityCacheEntry;
2013-02-13 20:42:13 -02:00
use Doctrine\ORM\Cache\DefaultEntityHydrator;
2014-01-07 03:04:22 -05:00
use Doctrine\ORM\Cache\AssociationCacheEntry;
2013-02-13 20:42:13 -02:00
/**
* @group DDC-2183
*/
class DefaultEntityHydratorTest extends OrmTestCase
{
/**
* @var \Doctrine\ORM\Cache\EntityHydrator
*/
private $structure;
/**
* @var \Doctrine\ORM\EntityManager
*/
private $em;
protected function setUp()
{
parent::setUp();
$this->em = $this->_getTestEntityManager();
$this->structure = new DefaultEntityHydrator($this->em);
}
public function testImplementsEntityEntryStructure()
{
$this->assertInstanceOf('\Doctrine\ORM\Cache\EntityHydrator', $this->structure);
}
public function testCreateEntity()
{
$metadata = $this->em->getClassMetadata(Country::CLASSNAME);
$key = new EntityCacheKey($metadata->name, ['id'=>1]);
$entry = new EntityCacheEntry($metadata->name, ['id'=>1, 'name'=>'Foo']);
2013-02-13 20:42:13 -02:00
$entity = $this->structure->loadCacheEntry($metadata, $key, $entry);
$this->assertInstanceOf($metadata->name, $entity);
$this->assertEquals(1, $entity->getId());
$this->assertEquals('Foo', $entity->getName());
$this->assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($entity));
}
public function testLoadProxy()
{
$metadata = $this->em->getClassMetadata(Country::CLASSNAME);
$key = new EntityCacheKey($metadata->name, ['id'=>1]);
$entry = new EntityCacheEntry($metadata->name, ['id'=>1, 'name'=>'Foo']);
2013-02-13 20:42:13 -02:00
$proxy = $this->em->getReference($metadata->name, $key->identifier);
$entity = $this->structure->loadCacheEntry($metadata, $key, $entry, $proxy);
$this->assertInstanceOf($metadata->name, $entity);
$this->assertSame($proxy, $entity);
$this->assertEquals(1, $entity->getId());
$this->assertEquals('Foo', $entity->getName());
$this->assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($proxy));
}
public function testBuildCacheEntry()
{
$entity = new Country('Foo');
$uow = $this->em->getUnitOfWork();
$data = ['id'=>1, 'name'=>'Foo'];
2013-02-13 20:42:13 -02:00
$metadata = $this->em->getClassMetadata(Country::CLASSNAME);
$key = new EntityCacheKey($metadata->name, ['id'=>1]);
2013-02-13 20:42:13 -02:00
$entity->setId(1);
$uow->registerManaged($entity, $key->identifier, $data);
$cache = $this->structure->buildCacheEntry($metadata, $key, $entity);
$this->assertInstanceOf('Doctrine\ORM\Cache\CacheEntry', $cache);
$this->assertInstanceOf('Doctrine\ORM\Cache\EntityCacheEntry', $cache);
$this->assertArrayHasKey('id', $cache->data);
$this->assertArrayHasKey('name', $cache->data);
$this->assertEquals(
[
2013-02-13 20:42:13 -02:00
'id' => 1,
'name' => 'Foo',
], $cache->data);
2013-02-13 20:42:13 -02:00
}
2014-01-07 03:04:22 -05:00
public function testBuildCacheEntryAssociation()
2013-02-13 20:42:13 -02:00
{
$country = new Country('Foo');
$state = new State('Bat', $country);
$uow = $this->em->getUnitOfWork();
$countryData = ['id'=>11, 'name'=>'Foo'];
$stateData = ['id'=>12, 'name'=>'Bar', 'country' => $country];
2013-02-13 20:42:13 -02:00
$metadata = $this->em->getClassMetadata(State::CLASSNAME);
$key = new EntityCacheKey($metadata->name, ['id'=>11]);
2013-02-13 20:42:13 -02:00
$country->setId(11);
$state->setId(12);
$uow->registerManaged($country, ['id'=>11], $countryData);
$uow->registerManaged($state, ['id'=>12], $stateData);
2013-02-13 20:42:13 -02:00
$cache = $this->structure->buildCacheEntry($metadata, $key, $state);
$this->assertInstanceOf('Doctrine\ORM\Cache\CacheEntry', $cache);
$this->assertInstanceOf('Doctrine\ORM\Cache\EntityCacheEntry', $cache);
$this->assertArrayHasKey('id', $cache->data);
$this->assertArrayHasKey('name', $cache->data);
$this->assertArrayHasKey('country', $cache->data);
$this->assertEquals(
[
'id' => 12,
2013-02-13 20:42:13 -02:00
'name' => 'Bar',
'country' => new AssociationCacheEntry(Country::CLASSNAME, ['id' => 11]),
], $cache->data);
2013-02-13 20:42:13 -02:00
}
2013-12-20 10:39:03 -05:00
public function testBuildCacheEntryNonInitializedAssocProxy()
{
$proxy = $this->em->getReference(Country::CLASSNAME, 11);
$entity = new State('Bat', $proxy);
$uow = $this->em->getUnitOfWork();
$entityData = ['id'=>12, 'name'=>'Bar', 'country' => $proxy];
2013-12-20 10:39:03 -05:00
$metadata = $this->em->getClassMetadata(State::CLASSNAME);
$key = new EntityCacheKey($metadata->name, ['id'=>11]);
2013-12-20 10:39:03 -05:00
$entity->setId(12);
$uow->registerManaged($entity, ['id'=>12], $entityData);
2013-12-20 10:39:03 -05:00
$cache = $this->structure->buildCacheEntry($metadata, $key, $entity);
$this->assertInstanceOf('Doctrine\ORM\Cache\CacheEntry', $cache);
$this->assertInstanceOf('Doctrine\ORM\Cache\EntityCacheEntry', $cache);
$this->assertArrayHasKey('id', $cache->data);
$this->assertArrayHasKey('name', $cache->data);
$this->assertArrayHasKey('country', $cache->data);
$this->assertEquals(
[
'id' => 12,
2013-12-20 10:39:03 -05:00
'name' => 'Bar',
'country' => new AssociationCacheEntry(Country::CLASSNAME, ['id' => 11]),
], $cache->data);
2013-12-20 10:39:03 -05:00
}
public function testCacheEntryWithWrongIdentifierType()
{
$proxy = $this->em->getReference(Country::CLASSNAME, 11);
$entity = new State('Bat', $proxy);
$uow = $this->em->getUnitOfWork();
$entityData = ['id'=> 12, 'name'=>'Bar', 'country' => $proxy];
$metadata = $this->em->getClassMetadata(State::CLASSNAME);
$key = new EntityCacheKey($metadata->name, ['id'=>'12']);
$entity->setId(12);
$uow->registerManaged($entity, ['id'=>12], $entityData);
$cache = $this->structure->buildCacheEntry($metadata, $key, $entity);
$this->assertInstanceOf('Doctrine\ORM\Cache\CacheEntry', $cache);
$this->assertInstanceOf('Doctrine\ORM\Cache\EntityCacheEntry', $cache);
$this->assertArrayHasKey('id', $cache->data);
$this->assertArrayHasKey('name', $cache->data);
$this->assertArrayHasKey('country', $cache->data);
$this->assertSame($entity->getId(), $cache->data['id']);
$this->assertEquals(
[
'id' => 12,
'name' => 'Bar',
'country' => new AssociationCacheEntry(Country::CLASSNAME, ['id' => 11]),
], $cache->data);
}
}