Skip to content

Commit 3940dc4

Browse files
committed
Add tests for the CachedResourceNameCollectionFactory class
1 parent 8d25890 commit 3940dc4

File tree

2 files changed

+86
-6
lines changed

2 files changed

+86
-6
lines changed

src/Metadata/Resource/Factory/CachedResourceNameCollectionFactory.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,8 @@ public function create() : ResourceNameCollection
5454
return $resourceNameCollection;
5555
}
5656

57-
try {
58-
$cacheItem->set($resourceNameCollection);
59-
$this->cacheItemPool->save($cacheItem);
60-
} catch (CacheException $e) {
61-
// do nothing
62-
}
57+
$cacheItem->set($resourceNameCollection);
58+
$this->cacheItemPool->save($cacheItem);
6359

6460
return $resourceNameCollection;
6561
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the API Platform project.
5+
*
6+
* (c) Kévin Dunglas <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace ApiPlatform\Core\Tests\Metadata\Resource\Factory;
13+
14+
use ApiPlatform\Core\Metadata\Resource\Factory\CachedResourceNameCollectionFactory;
15+
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceNameCollectionFactoryInterface;
16+
use ApiPlatform\Core\Metadata\Resource\ResourceNameCollection;
17+
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
18+
use Psr\Cache\CacheException;
19+
use Psr\Cache\CacheItemInterface;
20+
use Psr\Cache\CacheItemPoolInterface;
21+
22+
/**
23+
* @author Baptiste Meyer <[email protected]>
24+
*/
25+
class CachedResourceNameCollectionFactoryTest extends \PHPUnit_Framework_TestCase
26+
{
27+
public function testCreateWithItemHit()
28+
{
29+
$cacheItem = $this->prophesize(CacheItemInterface::class);
30+
$cacheItem->isHit()->willReturn(true)->shouldBeCalled();
31+
$cacheItem->get()->willReturn(new ResourceNameCollection([Dummy::class]))->shouldBeCalled();
32+
33+
$cacheItemPool = $this->prophesize(CacheItemPoolInterface::class);
34+
$cacheItemPool->getItem(CachedResourceNameCollectionFactory::CACHE_KEY)->willReturn($cacheItem->reveal())->shouldBeCalled();
35+
36+
$decoratedResourceNameCollectionFactory = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
37+
38+
$cachedResourceNameCollectionFactory = new CachedResourceNameCollectionFactory($cacheItemPool->reveal(), $decoratedResourceNameCollectionFactory->reveal());
39+
$resultedResourceNameCollection = $cachedResourceNameCollectionFactory->create();
40+
41+
$this->assertInstanceOf(ResourceNameCollection::class, $resultedResourceNameCollection);
42+
$this->assertEquals(new ResourceNameCollection([Dummy::class]), $resultedResourceNameCollection);
43+
}
44+
45+
public function testCreateWithItemNotHit()
46+
{
47+
$resourceNameCollection = new ResourceNameCollection([Dummy::class]);
48+
49+
$decoratedResourceNameCollectionFactory = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
50+
$decoratedResourceNameCollectionFactory->create()->willReturn($resourceNameCollection)->shouldBeCalled();
51+
52+
$cacheItem = $this->prophesize(CacheItemInterface::class);
53+
$cacheItem->isHit()->willReturn(false)->shouldBeCalled();
54+
$cacheItem->set($resourceNameCollection)->willReturn($cacheItem->reveal())->shouldBeCalled();
55+
56+
$cacheItemPool = $this->prophesize(CacheItemPoolInterface::class);
57+
$cacheItemPool->getItem(CachedResourceNameCollectionFactory::CACHE_KEY)->willReturn($cacheItem->reveal())->shouldBeCalled();
58+
$cacheItemPool->save($cacheItem->reveal())->willReturn(true)->shouldBeCalled();
59+
60+
$cachedResourceNameCollectionFactory = new CachedResourceNameCollectionFactory($cacheItemPool->reveal(), $decoratedResourceNameCollectionFactory->reveal());
61+
$resultedResourceNameCollection = $cachedResourceNameCollectionFactory->create();
62+
63+
$this->assertInstanceOf(ResourceNameCollection::class, $resultedResourceNameCollection);
64+
$this->assertEquals(new ResourceNameCollection([Dummy::class]), $resultedResourceNameCollection);
65+
}
66+
67+
public function testCreateWithGetCacheItemThrowsCacheException()
68+
{
69+
$decoratedResourceNameCollectionFactory = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
70+
$decoratedResourceNameCollectionFactory->create()->willReturn(new ResourceNameCollection([Dummy::class]))->shouldBeCalled();
71+
72+
$cacheException = $this->prophesize(CacheException::class);
73+
$cacheException->willExtend(\Exception::class);
74+
75+
$cacheItemPool = $this->prophesize(CacheItemPoolInterface::class);
76+
$cacheItemPool->getItem(CachedResourceNameCollectionFactory::CACHE_KEY)->willThrow($cacheException->reveal())->shouldBeCalled();
77+
78+
$cachedResourceNameCollectionFactory = new CachedResourceNameCollectionFactory($cacheItemPool->reveal(), $decoratedResourceNameCollectionFactory->reveal());
79+
$resultedResourceNameCollection = $cachedResourceNameCollectionFactory->create();
80+
81+
$this->assertInstanceOf(ResourceNameCollection::class, $resultedResourceNameCollection);
82+
$this->assertEquals(new ResourceNameCollection([Dummy::class]), $resultedResourceNameCollection);
83+
}
84+
}

0 commit comments

Comments
 (0)