1
0
mirror of synced 2025-01-09 18:47:10 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php
2014-05-15 18:37:41 +02:00

158 lines
5.8 KiB
PHP

<?php
namespace Doctrine\Tests\ORM\Functional;
use Doctrine\Tests\Models\Cache\State;
use Doctrine\Tests\Models\Cache\Country;
use Doctrine\Common\Collections\Criteria;
/**
* @group DDC-2183
*/
class SecondLevelCacheCriteriaTest extends SecondLevelCacheAbstractTest
{
public function testMatchingPut()
{
$this->evictRegions();
$this->loadFixturesCountries();
$this->evictRegions();
$this->_em->clear();
$this->assertFalse($this->cache->containsEntity(Country::CLASSNAME, $this->countries[0]->getId()));
$repository = $this->_em->getRepository(Country::CLASSNAME);
$queryCount = $this->getCurrentQueryCount();
$name = $this->countries[0]->getName();
$result1 = $repository->matching(new Criteria(
Criteria::expr()->eq('name', $name)
));
// Because matching returns lazy collection, we force initialization
$result1->toArray();
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
$this->assertEquals($this->countries[0]->getId(), $result1[0]->getId());
$this->assertEquals($this->countries[0]->getName(), $result1[0]->getName());
$this->assertTrue($this->cache->containsEntity(Country::CLASSNAME, $this->countries[0]->getId()));
$this->_em->clear();
$result2 = $repository->matching(new Criteria(
Criteria::expr()->eq('name', $name)
));
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
$this->assertCount(1, $result2);
$this->assertInstanceOf('Doctrine\Tests\Models\Cache\Country', $result2[0]);
$this->assertEquals($result1[0]->getId(), $result2[0]->getId());
$this->assertEquals($result1[0]->getName(), $result2[0]->getName());
}
public function testRepositoryMatching()
{
$this->evictRegions();
$this->loadFixturesCountries();
$this->_em->clear();
$this->assertTrue($this->cache->containsEntity(Country::CLASSNAME, $this->countries[0]->getId()));
$repository = $this->_em->getRepository(Country::CLASSNAME);
$queryCount = $this->getCurrentQueryCount();
$result1 = $repository->matching(new Criteria(
Criteria::expr()->eq('name', $this->countries[0]->getName())
));
// Because matching returns lazy collection, we force initialization
$result1->toArray();
$this->assertCount(1, $result1);
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
$this->assertEquals($this->countries[0]->getId(), $result1[0]->getId());
$this->assertEquals($this->countries[0]->getName(), $result1[0]->getName());
$this->_em->clear();
$result2 = $repository->matching(new Criteria(
Criteria::expr()->eq('name', $this->countries[0]->getName())
));
// Because matching returns lazy collection, we force initialization
$result2->toArray();
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
$this->assertCount(1, $result2);
$this->assertInstanceOf('Doctrine\Tests\Models\Cache\Country', $result2[0]);
$this->assertEquals($this->countries[0]->getId(), $result2[0]->getId());
$this->assertEquals($this->countries[0]->getName(), $result2[0]->getName());
$result3 = $repository->matching(new Criteria(
Criteria::expr()->eq('name', $this->countries[1]->getName())
));
// Because matching returns lazy collection, we force initialization
$result3->toArray();
$this->assertEquals($queryCount + 2, $this->getCurrentQueryCount());
$this->assertCount(1, $result3);
$this->assertInstanceOf('Doctrine\Tests\Models\Cache\Country', $result3[0]);
$this->assertEquals($this->countries[1]->getId(), $result3[0]->getId());
$this->assertEquals($this->countries[1]->getName(), $result3[0]->getName());
$result4 = $repository->matching(new Criteria(
Criteria::expr()->eq('name', $this->countries[1]->getName())
));
$this->assertEquals($queryCount + 2, $this->getCurrentQueryCount());
$this->assertCount(1, $result4);
$this->assertInstanceOf('Doctrine\Tests\Models\Cache\Country', $result4[0]);
$this->assertEquals($this->countries[1]->getId(), $result4[0]->getId());
$this->assertEquals($this->countries[1]->getName(), $result4[0]->getName());
}
public function testCollectionMatching()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->_em->clear();
$this->secondLevelCacheLogger->clearStats();
$entity = $this->_em->find(State::CLASSNAME, $this->states[0]->getId());
$itemName = $this->states[0]->getCities()->get(0)->getName();
$queryCount = $this->getCurrentQueryCount();
$collection = $entity->getCities();
$matching = $collection->matching(new Criteria(
Criteria::expr()->eq('name', $itemName)
));
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
$this->assertInstanceOf('Doctrine\Common\Collections\Collection', $matching);
$this->assertCount(1, $matching);
$this->_em->clear();
$entity = $this->_em->find(State::CLASSNAME, $this->states[0]->getId());
$queryCount = $this->getCurrentQueryCount();
$collection = $entity->getCities();
$matching = $collection->matching(new Criteria(
Criteria::expr()->eq('name', $itemName)
));
$this->assertEquals($queryCount, $this->getCurrentQueryCount());
$this->assertInstanceOf('Doctrine\Common\Collections\Collection', $matching);
$this->assertCount(1, $matching);
}
}