Skip to content

Commit 469b178

Browse files
authored
Merge pull request #1333 from peter-gribanov/not_resolve_webp_in_cache_manager
Not resolve WebP in CacheManager
2 parents 1bb9b72 + 748134c commit 469b178

File tree

3 files changed

+168
-17
lines changed

3 files changed

+168
-17
lines changed

Imagine/Cache/CacheManager.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,31 @@ class CacheManager
5454
*/
5555
protected $defaultResolver;
5656

57+
/**
58+
* @var bool
59+
*/
60+
private $webpGenerate;
61+
5762
/**
5863
* Constructs the cache manager to handle Resolvers based on the provided FilterConfiguration.
5964
*
6065
* @param string $defaultResolver
66+
* @param bool $webpGenerate
6167
*/
6268
public function __construct(
6369
FilterConfiguration $filterConfig,
6470
RouterInterface $router,
6571
SignerInterface $signer,
6672
EventDispatcherInterface $dispatcher,
67-
$defaultResolver = null
73+
$defaultResolver = null,
74+
$webpGenerate = false
6875
) {
6976
$this->filterConfig = $filterConfig;
7077
$this->router = $router;
7178
$this->signer = $signer;
7279
$this->dispatcher = $dispatcher;
7380
$this->defaultResolver = $defaultResolver ?: 'default';
81+
$this->webpGenerate = $webpGenerate;
7482
}
7583

7684
/**
@@ -103,12 +111,12 @@ public function getBrowserPath($path, $filter, array $runtimeConfig = [], $resol
103111
if (!empty($runtimeConfig)) {
104112
$rcPath = $this->getRuntimePath($path, $runtimeConfig);
105113

106-
return $this->isStored($rcPath, $filter, $resolver) ?
114+
return !$this->webpGenerate && $this->isStored($rcPath, $filter, $resolver) ?
107115
$this->resolve($rcPath, $filter, $resolver) :
108116
$this->generateUrl($path, $filter, $runtimeConfig, $resolver, $referenceType);
109117
}
110118

111-
return $this->isStored($path, $filter, $resolver) ?
119+
return !$this->webpGenerate && $this->isStored($path, $filter, $resolver) ?
112120
$this->resolve($path, $filter, $resolver) :
113121
$this->generateUrl($path, $filter, [], $resolver, $referenceType);
114122
}

Resources/config/imagine.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
<argument type="service" id="liip_imagine.cache.signer" />
127127
<argument type="service" id="event_dispatcher" />
128128
<argument>%liip_imagine.cache.resolver.default%</argument>
129+
<argument>%liip_imagine.webp.generate%</argument>
129130
</service>
130131

131132
<service id="liip_imagine.filter.configuration" class="Liip\ImagineBundle\Imagine\Filter\FilterConfiguration">

Tests/Imagine/Cache/CacheManagerTest.php

Lines changed: 156 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ class CacheManagerTest extends AbstractTest
3131
{
3232
public function testAddCacheManagerAwareResolver(): void
3333
{
34-
$cacheManager = new CacheManager($this->createFilterConfigurationMock(), $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
34+
$cacheManager = new CacheManager(
35+
$this->createFilterConfigurationMock(),
36+
$this->createRouterInterfaceMock(),
37+
new Signer('secret'),
38+
$this->createEventDispatcherInterfaceMock()
39+
);
3540

3641
$resolver = $this->createCacheManagerAwareResolverMock();
3742
$resolver
@@ -58,14 +63,23 @@ public function testGetBrowserPathWithoutResolver(): void
5863
'cache' => null,
5964
]);
6065

61-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
66+
$cacheManager = new CacheManager(
67+
$config,
68+
$this->createRouterInterfaceMock(),
69+
new Signer('secret'),
70+
$this->createEventDispatcherInterfaceMock()
71+
);
6272
$cacheManager->getBrowserPath('cats.jpeg', 'thumbnail');
6373
}
6474

6575
public function testGetRuntimePath(): void
6676
{
67-
$config = $this->createFilterConfigurationMock();
68-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
77+
$cacheManager = new CacheManager(
78+
$this->createFilterConfigurationMock(),
79+
$this->createRouterInterfaceMock(),
80+
new Signer('secret'),
81+
$this->createEventDispatcherInterfaceMock()
82+
);
6983

7084
$rcPath = $cacheManager->getRuntimePath('image.jpg', [
7185
'thumbnail' => [
@@ -106,14 +120,55 @@ public function testDefaultResolverUsedIfNoneSetOnGetBrowserPath(): void
106120
->expects($this->never())
107121
->method('generate');
108122

109-
$cacheManager = new CacheManager($config, $router, new Signer('secret'), $this->createEventDispatcherInterfaceMock());
123+
$cacheManager = new CacheManager(
124+
$config,
125+
$router,
126+
new Signer('secret'),
127+
$this->createEventDispatcherInterfaceMock()
128+
);
110129
$cacheManager->addResolver('default', $resolver);
111130

112131
$actualBrowserPath = $cacheManager->getBrowserPath('cats.jpeg', 'thumbnail');
113132

114133
$this->assertSame('http://a/path/to/an/image.png', $actualBrowserPath);
115134
}
116135

136+
public function testDefaultResolverUsedIfNoneSetOnGetBrowserPathWithWebPGenerate(): void
137+
{
138+
$resolver = $this->createCacheResolverInterfaceMock();
139+
$resolver
140+
->expects($this->never())
141+
->method('isStored');
142+
$resolver
143+
->expects($this->never())
144+
->method('resolve');
145+
146+
$config = $this->createFilterConfigurationMock();
147+
$config
148+
->expects($this->never())
149+
->method('get');
150+
151+
$router = $this->createRouterInterfaceMock();
152+
$router
153+
->expects($this->once())
154+
->method('generate')
155+
->willReturn('/media/cache/thumbnail/cats.jpeg');
156+
157+
$cacheManager = new CacheManager(
158+
$config,
159+
$router,
160+
new Signer('secret'),
161+
$this->createEventDispatcherInterfaceMock(),
162+
null,
163+
true
164+
);
165+
$cacheManager->addResolver('default', $resolver);
166+
167+
$actualBrowserPath = $cacheManager->getBrowserPath('cats.jpeg', 'thumbnail');
168+
169+
$this->assertSame('/media/cache/thumbnail/cats.jpeg', $actualBrowserPath);
170+
}
171+
117172
public function testFilterActionUrlGeneratedAndReturnIfResolverReturnNullOnGetBrowserPath(): void
118173
{
119174
$resolver = $this->createCacheResolverInterfaceMock();
@@ -143,7 +198,12 @@ public function testFilterActionUrlGeneratedAndReturnIfResolverReturnNullOnGetBr
143198
->method('generate')
144199
->willReturn('/media/cache/thumbnail/cats.jpeg');
145200

146-
$cacheManager = new CacheManager($config, $router, new Signer('secret'), $this->createEventDispatcherInterfaceMock());
201+
$cacheManager = new CacheManager(
202+
$config,
203+
$router,
204+
new Signer('secret'),
205+
$this->createEventDispatcherInterfaceMock()
206+
);
147207
$cacheManager->addResolver('default', $resolver);
148208

149209
$actualBrowserPath = $cacheManager->getBrowserPath('cats.jpeg', 'thumbnail');
@@ -186,7 +246,54 @@ public function testFilterActionUrlGeneratedAndReturnIfResolverReturnNullOnGetBr
186246
->method('generate')
187247
->willReturn('/media/cache/thumbnail/rc/VhOzTGRB/cats.jpeg');
188248

189-
$cacheManager = new CacheManager($config, $router, new Signer('secret'), $this->createEventDispatcherInterfaceMock());
249+
$cacheManager = new CacheManager(
250+
$config,
251+
$router,
252+
new Signer('secret'),
253+
$this->createEventDispatcherInterfaceMock()
254+
);
255+
$cacheManager->addResolver('default', $resolver);
256+
257+
$actualBrowserPath = $cacheManager->getBrowserPath('cats.jpeg', 'thumbnail', $runtimeConfig);
258+
259+
$this->assertSame('/media/cache/thumbnail/rc/VhOzTGRB/cats.jpeg', $actualBrowserPath);
260+
}
261+
262+
public function testFilterActionUrlGeneratedAndReturnIfResolverReturnNullOnGetBrowserPathWithRuntimeConfigWithWebPGenerate(): void
263+
{
264+
$runtimeConfig = [
265+
'thumbnail' => [
266+
'size' => [100, 100],
267+
],
268+
];
269+
270+
$resolver = $this->createCacheResolverInterfaceMock();
271+
$resolver
272+
->expects($this->never())
273+
->method('isStored');
274+
$resolver
275+
->expects($this->never())
276+
->method('resolve');
277+
278+
$config = $this->createFilterConfigurationMock();
279+
$config
280+
->expects($this->never())
281+
->method('get');
282+
283+
$router = $this->createRouterInterfaceMock();
284+
$router
285+
->expects($this->once())
286+
->method('generate')
287+
->willReturn('/media/cache/thumbnail/rc/VhOzTGRB/cats.jpeg');
288+
289+
$cacheManager = new CacheManager(
290+
$config,
291+
$router,
292+
new Signer('secret'),
293+
$this->createEventDispatcherInterfaceMock(),
294+
null,
295+
true
296+
);
190297
$cacheManager->addResolver('default', $resolver);
191298

192299
$actualBrowserPath = $cacheManager->getBrowserPath('cats.jpeg', 'thumbnail', $runtimeConfig);
@@ -329,7 +436,12 @@ public function testRemoveCacheForPathAndFilterOnRemove(): void
329436
];
330437
});
331438

332-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
439+
$cacheManager = new CacheManager(
440+
$config,
441+
$this->createRouterInterfaceMock(),
442+
new Signer('secret'),
443+
$this->createEventDispatcherInterfaceMock()
444+
);
333445
$cacheManager->addResolver($expectedFilter, $resolver);
334446
$cacheManager->remove($expectedPath, $expectedFilter);
335447
}
@@ -362,7 +474,12 @@ public function testRemoveCacheForPathAndSomeFiltersOnRemove(): void
362474
];
363475
});
364476

365-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
477+
$cacheManager = new CacheManager(
478+
$config,
479+
$this->createRouterInterfaceMock(),
480+
new Signer('secret'),
481+
$this->createEventDispatcherInterfaceMock()
482+
);
366483
$cacheManager->addResolver($expectedFilterOne, $resolverOne);
367484
$cacheManager->addResolver($expectedFilterTwo, $resolverTwo);
368485
$cacheManager->remove($expectedPath, [$expectedFilterOne, $expectedFilterTwo]);
@@ -393,7 +510,12 @@ public function testRemoveCacheForSomePathsAndFilterOnRemove(): void
393510
];
394511
});
395512

396-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
513+
$cacheManager = new CacheManager(
514+
$config,
515+
$this->createRouterInterfaceMock(),
516+
new Signer('secret'),
517+
$this->createEventDispatcherInterfaceMock()
518+
);
397519
$cacheManager->addResolver($expectedFilter, $resolver);
398520
$cacheManager->remove([$expectedPathOne, $expectedPathTwo], $expectedFilter);
399521
}
@@ -427,7 +549,12 @@ public function testRemoveCacheForSomePathsAndSomeFiltersOnRemove(): void
427549
];
428550
});
429551

430-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
552+
$cacheManager = new CacheManager(
553+
$config,
554+
$this->createRouterInterfaceMock(),
555+
new Signer('secret'),
556+
$this->createEventDispatcherInterfaceMock()
557+
);
431558
$cacheManager->addResolver($expectedFilterOne, $resolverOne);
432559
$cacheManager->addResolver($expectedFilterTwo, $resolverTwo);
433560
$cacheManager->remove(
@@ -470,7 +597,12 @@ public function testRemoveCacheForAllFiltersOnRemove(): void
470597
$expectedFilterTwo => [],
471598
]);
472599

473-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
600+
$cacheManager = new CacheManager(
601+
$config,
602+
$this->createRouterInterfaceMock(),
603+
new Signer('secret'),
604+
$this->createEventDispatcherInterfaceMock()
605+
);
474606
$cacheManager->addResolver($expectedFilterOne, $resolverOne);
475607
$cacheManager->addResolver($expectedFilterTwo, $resolverTwo);
476608
$cacheManager->remove();
@@ -511,7 +643,12 @@ public function testRemoveCacheForPathAndAllFiltersOnRemove(): void
511643
$expectedFilterTwo => [],
512644
]);
513645

514-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
646+
$cacheManager = new CacheManager(
647+
$config,
648+
$this->createRouterInterfaceMock(),
649+
new Signer('secret'),
650+
$this->createEventDispatcherInterfaceMock()
651+
);
515652
$cacheManager->addResolver($expectedFilterOne, $resolverOne);
516653
$cacheManager->addResolver($expectedFilterTwo, $resolverTwo);
517654
$cacheManager->remove($expectedPath);
@@ -538,7 +675,12 @@ public function testAggregateFiltersByResolverOnRemove(): void
538675
];
539676
});
540677

541-
$cacheManager = new CacheManager($config, $this->createRouterInterfaceMock(), new Signer('secret'), $this->createEventDispatcherInterfaceMock());
678+
$cacheManager = new CacheManager(
679+
$config,
680+
$this->createRouterInterfaceMock(),
681+
new Signer('secret'),
682+
$this->createEventDispatcherInterfaceMock()
683+
);
542684
$cacheManager->addResolver($expectedFilterOne, $resolver);
543685
$cacheManager->addResolver($expectedFilterTwo, $resolver);
544686
$cacheManager->remove(null, [$expectedFilterOne, $expectedFilterTwo]);

0 commit comments

Comments
 (0)