From 3940dc412ed383b705a18846ac2c0adce9d28bb7 Mon Sep 17 00:00:00 2001 From: Meyer Baptiste Date: Fri, 4 Nov 2016 22:11:28 +0100 Subject: [PATCH] Add tests for the CachedResourceNameCollectionFactory class --- .../CachedResourceNameCollectionFactory.php | 8 +- ...achedResourceNameCollectionFactoryTest.php | 84 +++++++++++++++++++ 2 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 tests/Metadata/Resource/Factory/CachedResourceNameCollectionFactoryTest.php diff --git a/src/Metadata/Resource/Factory/CachedResourceNameCollectionFactory.php b/src/Metadata/Resource/Factory/CachedResourceNameCollectionFactory.php index c710dfc359f..327ac1709e2 100644 --- a/src/Metadata/Resource/Factory/CachedResourceNameCollectionFactory.php +++ b/src/Metadata/Resource/Factory/CachedResourceNameCollectionFactory.php @@ -54,12 +54,8 @@ public function create() : ResourceNameCollection return $resourceNameCollection; } - try { - $cacheItem->set($resourceNameCollection); - $this->cacheItemPool->save($cacheItem); - } catch (CacheException $e) { - // do nothing - } + $cacheItem->set($resourceNameCollection); + $this->cacheItemPool->save($cacheItem); return $resourceNameCollection; } diff --git a/tests/Metadata/Resource/Factory/CachedResourceNameCollectionFactoryTest.php b/tests/Metadata/Resource/Factory/CachedResourceNameCollectionFactoryTest.php new file mode 100644 index 00000000000..96a2169bb83 --- /dev/null +++ b/tests/Metadata/Resource/Factory/CachedResourceNameCollectionFactoryTest.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ApiPlatform\Core\Tests\Metadata\Resource\Factory; + +use ApiPlatform\Core\Metadata\Resource\Factory\CachedResourceNameCollectionFactory; +use ApiPlatform\Core\Metadata\Resource\Factory\ResourceNameCollectionFactoryInterface; +use ApiPlatform\Core\Metadata\Resource\ResourceNameCollection; +use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy; +use Psr\Cache\CacheException; +use Psr\Cache\CacheItemInterface; +use Psr\Cache\CacheItemPoolInterface; + +/** + * @author Baptiste Meyer + */ +class CachedResourceNameCollectionFactoryTest extends \PHPUnit_Framework_TestCase +{ + public function testCreateWithItemHit() + { + $cacheItem = $this->prophesize(CacheItemInterface::class); + $cacheItem->isHit()->willReturn(true)->shouldBeCalled(); + $cacheItem->get()->willReturn(new ResourceNameCollection([Dummy::class]))->shouldBeCalled(); + + $cacheItemPool = $this->prophesize(CacheItemPoolInterface::class); + $cacheItemPool->getItem(CachedResourceNameCollectionFactory::CACHE_KEY)->willReturn($cacheItem->reveal())->shouldBeCalled(); + + $decoratedResourceNameCollectionFactory = $this->prophesize(ResourceNameCollectionFactoryInterface::class); + + $cachedResourceNameCollectionFactory = new CachedResourceNameCollectionFactory($cacheItemPool->reveal(), $decoratedResourceNameCollectionFactory->reveal()); + $resultedResourceNameCollection = $cachedResourceNameCollectionFactory->create(); + + $this->assertInstanceOf(ResourceNameCollection::class, $resultedResourceNameCollection); + $this->assertEquals(new ResourceNameCollection([Dummy::class]), $resultedResourceNameCollection); + } + + public function testCreateWithItemNotHit() + { + $resourceNameCollection = new ResourceNameCollection([Dummy::class]); + + $decoratedResourceNameCollectionFactory = $this->prophesize(ResourceNameCollectionFactoryInterface::class); + $decoratedResourceNameCollectionFactory->create()->willReturn($resourceNameCollection)->shouldBeCalled(); + + $cacheItem = $this->prophesize(CacheItemInterface::class); + $cacheItem->isHit()->willReturn(false)->shouldBeCalled(); + $cacheItem->set($resourceNameCollection)->willReturn($cacheItem->reveal())->shouldBeCalled(); + + $cacheItemPool = $this->prophesize(CacheItemPoolInterface::class); + $cacheItemPool->getItem(CachedResourceNameCollectionFactory::CACHE_KEY)->willReturn($cacheItem->reveal())->shouldBeCalled(); + $cacheItemPool->save($cacheItem->reveal())->willReturn(true)->shouldBeCalled(); + + $cachedResourceNameCollectionFactory = new CachedResourceNameCollectionFactory($cacheItemPool->reveal(), $decoratedResourceNameCollectionFactory->reveal()); + $resultedResourceNameCollection = $cachedResourceNameCollectionFactory->create(); + + $this->assertInstanceOf(ResourceNameCollection::class, $resultedResourceNameCollection); + $this->assertEquals(new ResourceNameCollection([Dummy::class]), $resultedResourceNameCollection); + } + + public function testCreateWithGetCacheItemThrowsCacheException() + { + $decoratedResourceNameCollectionFactory = $this->prophesize(ResourceNameCollectionFactoryInterface::class); + $decoratedResourceNameCollectionFactory->create()->willReturn(new ResourceNameCollection([Dummy::class]))->shouldBeCalled(); + + $cacheException = $this->prophesize(CacheException::class); + $cacheException->willExtend(\Exception::class); + + $cacheItemPool = $this->prophesize(CacheItemPoolInterface::class); + $cacheItemPool->getItem(CachedResourceNameCollectionFactory::CACHE_KEY)->willThrow($cacheException->reveal())->shouldBeCalled(); + + $cachedResourceNameCollectionFactory = new CachedResourceNameCollectionFactory($cacheItemPool->reveal(), $decoratedResourceNameCollectionFactory->reveal()); + $resultedResourceNameCollection = $cachedResourceNameCollectionFactory->create(); + + $this->assertInstanceOf(ResourceNameCollection::class, $resultedResourceNameCollection); + $this->assertEquals(new ResourceNameCollection([Dummy::class]), $resultedResourceNameCollection); + } +}