Skip to content

Commit

Permalink
Allow installing doctrine/cache 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
alcaeus committed May 31, 2021
1 parent d8f6d2a commit af9a806
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 37 deletions.
57 changes: 21 additions & 36 deletions Tests/Imagine/Cache/Resolver/CacheResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@

namespace Liip\ImagineBundle\Tests\Imagine\Cache\Resolver;

use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Cache\Cache;
use Doctrine\Common\Cache\Psr6\DoctrineProvider;
use Liip\ImagineBundle\Imagine\Cache\Resolver\CacheResolver;
use Liip\ImagineBundle\Model\Binary;
use Liip\ImagineBundle\Tests\AbstractTest;
use Symfony\Component\Cache\Adapter\ArrayAdapter;

/**
* @covers \Liip\ImagineBundle\Imagine\Cache\Resolver\CacheResolver
Expand All @@ -26,15 +27,6 @@ class CacheResolverTest extends AbstractTest
protected $path = 'MadCat2.jpeg';
protected $webPath = '/media/cache/thumbnail/MadCat2.jpeg';

protected function setUp(): void
{
if (!class_exists(ArrayCache::class)) {
$this->markTestSkipped('Requires the doctrine/cache package.');
}

parent::setUp();
}

public function testResolveIsSavedToCache(): void
{
$resolver = $this->createCacheResolverInterfaceMock();
Expand All @@ -44,7 +36,7 @@ public function testResolveIsSavedToCache(): void
->with($this->path, $this->filter)
->willReturn($this->webPath);

$cacheResolver = new CacheResolver(new ArrayCache(), $resolver);
$cacheResolver = new CacheResolver($this->createCache(), $resolver);

$this->assertSame($this->webPath, $cacheResolver->resolve($this->path, $this->filter));

Expand All @@ -65,7 +57,7 @@ public function testNotCallInternalResolverIfCachedOnIsStored(): void
->expects($this->never())
->method('isStored');

$cacheResolver = new CacheResolver(new ArrayCache(), $resolver);
$cacheResolver = new CacheResolver($this->createCache(), $resolver);

$cacheResolver->resolve($this->path, $this->filter);

Expand All @@ -82,7 +74,7 @@ public function testCallInternalResolverIfNotCachedOnIsStored(): void
->method('isStored')
->willReturn(true);

$cacheResolver = new CacheResolver(new ArrayCache(), $resolver);
$cacheResolver = new CacheResolver($this->createCache(), $resolver);

$this->assertTrue($cacheResolver->isStored($this->path, $this->filter));
$this->assertTrue($cacheResolver->isStored($this->path, $this->filter));
Expand All @@ -98,7 +90,7 @@ public function testStoreIsForwardedToResolver(): void
->method('store')
->with($this->identicalTo($binary), $this->webPath, $this->filter);

$cacheResolver = new CacheResolver(new ArrayCache(), $resolver);
$cacheResolver = new CacheResolver($this->createCache(), $resolver);

// Call twice, as this method should not be cached.
$this->assertNull($cacheResolver->store($binary, $this->webPath, $this->filter));
Expand Down Expand Up @@ -136,22 +128,22 @@ public function testRemoveSinglePathCacheOnRemove(): void
->expects($this->once())
->method('remove');

$cache = new ArrayCache();
$cache = new ArrayAdapter();

$cacheResolver = new CacheResolver($cache, $resolver);
$cacheResolver = new CacheResolver(DoctrineProvider::wrap($cache), $resolver);
$cacheResolver->resolve($this->path, $this->filter);

/*
* Checking 2 items:
* - The result of one resolve execution.
* - The index of entity.
*/
$this->assertCount(2, $this->getCacheEntries($cache));
$this->assertCount(2, $this->getCachedValues($cache));

$cacheResolver->remove([$this->path], [$this->filter]);

// Cache including index has been removed.
$this->assertCount(0, $this->getCacheEntries($cache));
$this->assertCount(0, $this->getCachedValues($cache));
}

public function testRemoveAllFilterCacheOnRemove(): void
Expand All @@ -165,9 +157,9 @@ public function testRemoveAllFilterCacheOnRemove(): void
->expects($this->once())
->method('remove');

$cache = new ArrayCache();
$cache = new ArrayAdapter();

$cacheResolver = new CacheResolver($cache, $resolver);
$cacheResolver = new CacheResolver(DoctrineProvider::wrap($cache), $resolver);
$cacheResolver->resolve('aPathFoo', 'thumbnail_233x233');
$cacheResolver->resolve('aPathBar', 'thumbnail_233x233');
$cacheResolver->resolve('aPathFoo', 'thumbnail_100x100');
Expand All @@ -178,30 +170,23 @@ public function testRemoveAllFilterCacheOnRemove(): void
* - The result of four resolve execution.
* - The index of two entities.
*/
$this->assertCount(6, $this->getCacheEntries($cache));
$this->assertCount(6, $this->getCachedValues($cache));

$cacheResolver->remove([], ['thumbnail_233x233']);

// Cache including index has been removed.
$this->assertCount(3, $this->getCacheEntries($cache));
$this->assertCount(3, $this->getCachedValues($cache));
}

/**
* There's an intermittent cache entry which is a cache namespace
* version, it may or may not be there depending on doctrine-cache
* version. There's no point in checking it anyway since it's a detail
* of doctrine cache implementation.
*/
private function getCacheEntries(ArrayCache $cache): array
private function createCache(): Cache
{
$reflector = new \ReflectionObject($cache);
$attribute = $reflector->getProperty('data');
$attribute->setAccessible(true);
$cacheEntries = $attribute->getValue($cache);
$attribute->setAccessible(false);
return DoctrineProvider::wrap(new ArrayAdapter());
}

unset($cacheEntries['DoctrineNamespaceCacheKey[]']);
private function getCachedValues(ArrayAdapter $cache): array
{
$cache->deleteItem(urlencode('DoctrineNamespaceCacheKey[]'));

return $cacheEntries;
return $cache->getValues();
}
}
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
},
"require": {
"php": "^7.1|^8.0",
"doctrine/cache": "^1.11|^2.0",
"psr/cache": "^1.0|^2.0|^3.0",
"imagine/imagine": "^1.2.4",
"symfony/filesystem": "^3.4|^4.3|^5.0",
Expand All @@ -33,12 +34,12 @@
"ext-gd": "*",
"amazonwebservices/aws-sdk-for-php": "^1.0",
"aws/aws-sdk-php": "^2.4",
"doctrine/cache": "^1.1",
"doctrine/persistence": "^1.3|^2.0",
"enqueue/enqueue-bundle": "^0.9|^0.10",
"league/flysystem": "^1.0|^2.0",
"psr/log": "^1.0",
"symfony/browser-kit": "^3.4|^4.3|^5.0",
"symfony/cache": "^3.4|^4.3|^5.0",
"symfony/console": "^3.4|^4.3|^5.0",
"symfony/dependency-injection": "^3.4|^4.3|^5.0",
"symfony/form": "^3.4|^4.3|^5.0",
Expand Down

0 comments on commit af9a806

Please sign in to comment.