From 4a6d6e34f8a7a141f1c048a03e6b050ce5e8bfdc Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Tue, 11 Feb 2014 17:39:16 +0100 Subject: [PATCH] Test empty collections second level cache --- .../SecondLevelCacheAbstractTest.php | 7 ++-- .../SecondLevelCacheManyToManyTest.php | 29 +++++++++++++++ .../SecondLevelCacheOneToManyTest.php | 35 +++++++++++++++++-- 3 files changed, 66 insertions(+), 5 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php index 2866c146c..e4672b9f2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php @@ -121,7 +121,7 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase $this->_em->flush(); } - + protected function loadFixturesTravelersWithProfile() { $t1 = new Traveler("Test traveler 1"); @@ -139,7 +139,7 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase $this->travelersWithProfile[] = $t1; $this->travelersWithProfile[] = $t2; - + $this->_em->flush(); } @@ -165,6 +165,7 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase { $t1 = new Travel($this->travelers[0]); $t2 = new Travel($this->travelers[1]); + $t3 = new Travel($this->travelers[1]); $t1->addVisitedCity($this->cities[0]); $t1->addVisitedCity($this->cities[1]); @@ -175,9 +176,11 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase $this->_em->persist($t1); $this->_em->persist($t2); + $this->_em->persist($t3); $this->travels[] = $t1; $this->travels[] = $t2; + $this->travels[] = $t3; $this->_em->flush(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php index ac3dfd4fc..490e0cf1a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php @@ -214,4 +214,33 @@ class SecondLevelCacheManyToManyTest extends SecondLevelCacheAbstractTest $this->_em->persist($travel); $this->_em->flush(); } + + public function testManyToManyWithEmptyRelation() + { + $this->loadFixturesCountries(); + $this->loadFixturesStates(); + $this->loadFixturesCities(); + $this->loadFixturesTraveler(); + $this->loadFixturesTravels(); + $this->_em->clear(); + + $this->evictRegions(); + + $queryCount = $this->getCurrentQueryCount(); + + $entitiId = $this->travels[2]->getId(); //empty travel + $entity = $this->_em->find(Travel::CLASSNAME, $entitiId); + + $this->assertEquals(0, $entity->getVisitedCities()->count()); + $this->assertEquals($queryCount+2, $this->getCurrentQueryCount()); + + $this->_em->clear(); + + $entity = $this->_em->find(Travel::CLASSNAME, $entitiId); + + $queryCount = $this->getCurrentQueryCount(); + $this->assertEquals(0, $entity->getVisitedCities()->count()); + $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + + } } \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php index 6d1fd700c..f8aff3790 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php @@ -90,7 +90,7 @@ class SecondLevelCacheOneToManyTest extends SecondLevelCacheAbstractTest $s3 = $this->_em->find(State::CLASSNAME, $this->states[0]->getId()); $s4 = $this->_em->find(State::CLASSNAME, $this->states[1]->getId()); - + //trigger lazy load from cache $this->assertCount(2, $s3->getCities()); $this->assertCount(2, $s4->getCities()); @@ -133,12 +133,12 @@ class SecondLevelCacheOneToManyTest extends SecondLevelCacheAbstractTest //trigger lazy load from database $this->assertCount(2, $this->_em->find(State::CLASSNAME, $this->states[0]->getId())->getCities()); - + $this->assertTrue($this->cache->containsEntity(State::CLASSNAME, $this->states[0]->getId())); $this->assertTrue($this->cache->containsCollection(State::CLASSNAME, 'cities', $this->states[0]->getId())); $this->assertTrue($this->cache->containsEntity(City::CLASSNAME, $this->states[0]->getCities()->get(0)->getId())); $this->assertTrue($this->cache->containsEntity(City::CLASSNAME, $this->states[0]->getCities()->get(1)->getId())); - + $queryCount = $this->getCurrentQueryCount(); $stateId = $this->states[0]->getId(); $state = $this->_em->find(State::CLASSNAME, $stateId); @@ -284,6 +284,35 @@ class SecondLevelCacheOneToManyTest extends SecondLevelCacheAbstractTest $this->assertEquals(0, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::CLASSNAME, 'cities'))); } + public function testOneToManyWithEmptyRelation() + { + $this->loadFixturesCountries(); + $this->loadFixturesStates(); + $this->loadFixturesCities(); + + $this->secondLevelCacheLogger->clearStats(); + $this->cache->evictEntityRegion(City::CLASSNAME); + $this->cache->evictEntityRegion(State::CLASSNAME); + $this->cache->evictCollectionRegion(State::CLASSNAME, 'cities'); + $this->_em->clear(); + + $entitiId = $this->states[2]->getId(); // bavaria (cities count = 0) + $queryCount = $this->getCurrentQueryCount(); + $entity = $this->_em->find(State::CLASSNAME, $entitiId); + + $this->assertEquals(0, $entity->getCities()->count()); + $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + + $this->_em->clear(); + + $queryCount = $this->getCurrentQueryCount(); + $entity = $this->_em->find(State::CLASSNAME, $entitiId); + + $this->assertEquals(0, $entity->getCities()->count()); + $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + + } + public function testOneToManyCount() { $this->loadFixturesCountries();