1
0
mirror of synced 2024-12-14 15:16:04 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php
2013-12-16 11:05:04 -05:00

192 lines
8.1 KiB
PHP

<?php
namespace Doctrine\Tests\ORM\Functional;
use Doctrine\Tests\Models\Cache\Attraction;
use Doctrine\Tests\Models\Cache\AttractionInfo;
use Doctrine\Tests\Models\Cache\AttractionContactInfo;
use Doctrine\Tests\Models\Cache\AttractionLocationInfo;
/**
* @group DDC-2183
*/
class SecondLevelCacheJoinTableInheritanceTest extends SecondLevelCacheAbstractTest
{
public function testUseSameRegion()
{
$infoRegion = $this->cache->getEntityCacheRegion(AttractionInfo::CLASSNAME);
$contactRegion = $this->cache->getEntityCacheRegion(AttractionContactInfo::CLASSNAME);
$locationRegion = $this->cache->getEntityCacheRegion(AttractionLocationInfo::CLASSNAME);
$this->assertEquals($infoRegion->getName(), $contactRegion->getName());
$this->assertEquals($infoRegion->getName(), $locationRegion->getName());
}
public function testPutOnPersistJoinTableInheritance()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->loadFixturesAttractionsInfo();
$this->_em->clear();
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $this->attractionsInfo[0]->getId()));
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $this->attractionsInfo[1]->getId()));
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $this->attractionsInfo[2]->getId()));
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $this->attractionsInfo[3]->getId()));
}
public function testJoinTableCountaisRootClass()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->loadFixturesAttractionsInfo();
$this->_em->clear();
foreach ($this->attractionsInfo as $info) {
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $info->getId()));
$this->assertTrue($this->cache->containsEntity(get_class($info), $info->getId()));
}
}
public function testPutAndLoadJoinTableEntities()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->loadFixturesAttractionsInfo();
$this->_em->clear();
$this->cache->evictEntityRegion(AttractionInfo::CLASSNAME);
$entityId1 = $this->attractionsInfo[0]->getId();
$entityId2 = $this->attractionsInfo[1]->getId();
$this->assertFalse($this->cache->containsEntity(AttractionInfo::CLASSNAME, $entityId1));
$this->assertFalse($this->cache->containsEntity(AttractionInfo::CLASSNAME, $entityId2));
$this->assertFalse($this->cache->containsEntity(AttractionContactInfo::CLASSNAME, $entityId1));
$this->assertFalse($this->cache->containsEntity(AttractionContactInfo::CLASSNAME, $entityId2));
$queryCount = $this->getCurrentQueryCount();
$entity1 = $this->_em->find(AttractionInfo::CLASSNAME, $entityId1);
$entity2 = $this->_em->find(AttractionInfo::CLASSNAME, $entityId2);
//load entity and relation whit sub classes
$this->assertEquals($queryCount + 4, $this->getCurrentQueryCount());
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $entityId1));
$this->assertTrue($this->cache->containsEntity(AttractionInfo::CLASSNAME, $entityId2));
$this->assertTrue($this->cache->containsEntity(AttractionContactInfo::CLASSNAME, $entityId1));
$this->assertTrue($this->cache->containsEntity(AttractionContactInfo::CLASSNAME, $entityId2));
$this->assertInstanceOf(AttractionInfo::CLASSNAME, $entity1);
$this->assertInstanceOf(AttractionInfo::CLASSNAME, $entity2);
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity1);
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity2);
$this->assertEquals($this->attractionsInfo[0]->getId(), $entity1->getId());
$this->assertEquals($this->attractionsInfo[0]->getFone(), $entity1->getFone());
$this->assertEquals($this->attractionsInfo[1]->getId(), $entity2->getId());
$this->assertEquals($this->attractionsInfo[1]->getFone(), $entity2->getFone());
$this->_em->clear();
$queryCount = $this->getCurrentQueryCount();
$entity3 = $this->_em->find(AttractionInfo::CLASSNAME, $entityId1);
$entity4 = $this->_em->find(AttractionInfo::CLASSNAME, $entityId2);
$this->assertEquals($queryCount, $this->getCurrentQueryCount());
$this->assertInstanceOf(AttractionInfo::CLASSNAME, $entity3);
$this->assertInstanceOf(AttractionInfo::CLASSNAME, $entity4);
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity3);
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity4);
$this->assertNotSame($entity1, $entity3);
$this->assertEquals($entity1->getId(), $entity3->getId());
$this->assertEquals($entity1->getFone(), $entity3->getFone());
$this->assertNotSame($entity2, $entity4);
$this->assertEquals($entity2->getId(), $entity4->getId());
$this->assertEquals($entity2->getFone(), $entity4->getFone());
}
public function testQueryCacheFindAllJoinTableEntities()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->loadFixturesAttractionsInfo();
$this->evictRegions();
$this->_em->clear();
$queryCount = $this->getCurrentQueryCount();
$dql = 'SELECT i, a FROM Doctrine\Tests\Models\Cache\AttractionInfo i JOIN i.attraction a';
$result1 = $this->_em->createQuery($dql)
->setCacheable(true)
->getResult();
$this->assertCount(count($this->attractionsInfo), $result1);
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
$this->_em->clear();
$result2 = $this->_em->createQuery($dql)
->setCacheable(true)
->getResult();
$this->assertCount(count($this->attractionsInfo), $result2);
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
foreach ($result2 as $entity) {
$this->assertInstanceOf(AttractionInfo::CLASSNAME, $entity);
}
}
public function testOneToManyRelationJoinTable()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->loadFixturesAttractionsInfo();
$this->evictRegions();
$this->_em->clear();
$entity = $this->_em->find(Attraction::CLASSNAME, $this->attractions[0]->getId());
$this->assertInstanceOf(Attraction::CLASSNAME, $entity);
$this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $entity->getInfos());
$this->assertCount(1, $entity->getInfos());
$ownerId = $this->attractions[0]->getId();
$queryCount = $this->getCurrentQueryCount();
$this->assertTrue($this->cache->containsEntity(Attraction::CLASSNAME, $ownerId));
$this->assertTrue($this->cache->containsCollection(Attraction::CLASSNAME, 'infos', $ownerId));
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity->getInfos()->get(0));
$this->assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone());
$this->_em->clear();
$entity = $this->_em->find(Attraction::CLASSNAME, $this->attractions[0]->getId());
$this->assertInstanceOf(Attraction::CLASSNAME, $entity);
$this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $entity->getInfos());
$this->assertCount(1, $entity->getInfos());
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity->getInfos()->get(0));
$this->assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone());
}
}