Skip to content

Commit fcea053

Browse files
committed
fix clean_cache plugin flush mode
1 parent de50d12 commit fcea053

File tree

2 files changed

+66
-60
lines changed

2 files changed

+66
-60
lines changed

lib/internal/Magento/Framework/App/Cache/FlushCacheByTags.php

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
<?php
22
/**
3-
*
43
* Copyright © Magento, Inc. All rights reserved.
54
* See COPYING.txt for license details.
65
*/
6+
declare(strict_types=1);
7+
78
namespace Magento\Framework\App\Cache;
89

10+
use Magento\Framework\App\Cache\Tag\Resolver;
11+
use Magento\Framework\App\Cache\Type\FrontendPool;
12+
use Magento\Framework\Model\AbstractModel;
13+
use Magento\Framework\Model\ResourceModel\AbstractResource;
14+
915
/**
1016
* Automatic cache cleaner plugin
1117
*/
1218
class FlushCacheByTags
1319
{
1420
/**
15-
* @var Type\FrontendPool
21+
* @var FrontendPool
1622
*/
1723
private $cachePool;
1824

@@ -27,23 +33,21 @@ class FlushCacheByTags
2733
private $cacheState;
2834

2935
/**
30-
* @var Tag\Resolver
36+
* @var Resolver
3137
*/
3238
private $tagResolver;
3339

3440
/**
35-
* FlushCacheByTags constructor.
36-
*
37-
* @param Type\FrontendPool $cachePool
41+
* @param FrontendPool $cachePool
3842
* @param StateInterface $cacheState
39-
* @param array $cacheList
40-
* @param Tag\Resolver $tagResolver
43+
* @param string[] $cacheList
44+
* @param Resolver $tagResolver
4145
*/
4246
public function __construct(
43-
\Magento\Framework\App\Cache\Type\FrontendPool $cachePool,
44-
\Magento\Framework\App\Cache\StateInterface $cacheState,
47+
FrontendPool $cachePool,
48+
StateInterface $cacheState,
4549
array $cacheList,
46-
\Magento\Framework\App\Cache\Tag\Resolver $tagResolver
50+
Resolver $tagResolver
4751
) {
4852
$this->cachePool = $cachePool;
4953
$this->cacheState = $cacheState;
@@ -54,17 +58,14 @@ public function __construct(
5458
/**
5559
* Clean cache on save object
5660
*
57-
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $subject
61+
* @param AbstractResource $subject
5862
* @param \Closure $proceed
59-
* @param \Magento\Framework\Model\AbstractModel $object
60-
* @return \Magento\Framework\Model\ResourceModel\AbstractResource
63+
* @param AbstractModel $object
64+
* @return AbstractResource
6165
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
6266
*/
63-
public function aroundSave(
64-
\Magento\Framework\Model\ResourceModel\AbstractResource $subject,
65-
\Closure $proceed,
66-
\Magento\Framework\Model\AbstractModel $object
67-
) {
67+
public function aroundSave(AbstractResource $subject, \Closure $proceed, AbstractModel $object): AbstractResource
68+
{
6869
$result = $proceed($object);
6970
$tags = $this->tagResolver->getTags($object);
7071
$this->cleanCacheByTags($tags);
@@ -75,39 +76,37 @@ public function aroundSave(
7576
/**
7677
* Clean cache on delete object
7778
*
78-
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $subject
79+
* @param AbstractResource $subject
7980
* @param \Closure $proceed
80-
* @param \Magento\Framework\Model\AbstractModel $object
81-
* @return \Magento\Framework\Model\ResourceModel\AbstractResource
81+
* @param AbstractModel $object
82+
* @return AbstractResource
8283
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
8384
*/
84-
public function aroundDelete(
85-
\Magento\Framework\Model\ResourceModel\AbstractResource $subject,
86-
\Closure $proceed,
87-
\Magento\Framework\Model\AbstractModel $object
88-
) {
85+
public function aroundDelete(AbstractResource $subject, \Closure $proceed, AbstractModel $object): AbstractResource
86+
{
8987
$tags = $this->tagResolver->getTags($object);
9088
$result = $proceed($object);
9189
$this->cleanCacheByTags($tags);
90+
9291
return $result;
9392
}
9493

9594
/**
9695
* Clean cache by tags
9796
*
98-
* @param string[] $tags
97+
* @param string[] $tags
9998
* @return void
10099
*/
101-
private function cleanCacheByTags($tags)
100+
private function cleanCacheByTags(array $tags): void
102101
{
103-
if (empty($tags)) {
102+
if (!$tags) {
104103
return;
105104
}
106105
foreach ($this->cacheList as $cacheType) {
107106
if ($this->cacheState->isEnabled($cacheType)) {
108107
$this->cachePool->get($cacheType)->clean(
109-
\Zend_Cache::CLEANING_MODE_MATCHING_TAG,
110-
array_unique($tags)
108+
\Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
109+
\array_unique($tags)
111110
);
112111
}
113112
}

lib/internal/Magento/Framework/App/Test/Unit/Cache/FlushCacheByTagsTest.php

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,20 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
67

78
namespace Magento\Framework\App\Test\Unit\Cache;
89

10+
use Magento\Framework\App\Cache\FlushCacheByTags;
11+
use Magento\Framework\App\Cache\StateInterface;
12+
use Magento\Framework\App\Cache\Tag\Resolver;
13+
use Magento\Framework\App\Cache\Type\FrontendPool;
14+
use Magento\Framework\Model\AbstractModel;
15+
use Magento\Framework\Model\ResourceModel\AbstractResource;
16+
17+
/**
18+
* Unit tests for the \Magento\Framework\App\Cache\FlushCacheByTags class.
19+
*/
920
class FlushCacheByTagsTest extends \PHPUnit\Framework\TestCase
1021
{
1122
/**
@@ -28,72 +39,68 @@ class FlushCacheByTagsTest extends \PHPUnit\Framework\TestCase
2839
*/
2940
private $plugin;
3041

42+
/**
43+
* @inheritdoc
44+
*/
3145
protected function setUp()
3246
{
33-
$this->cacheState = $this->getMockForAbstractClass(\Magento\Framework\App\Cache\StateInterface::class);
34-
$this->frontendPool = $this->createMock(\Magento\Framework\App\Cache\Type\FrontendPool::class);
35-
$this->tagResolver = $this->createMock(\Magento\Framework\App\Cache\Tag\Resolver::class);
47+
$this->cacheState = $this->getMockForAbstractClass(StateInterface::class);
48+
$this->frontendPool = $this->createMock(FrontendPool::class);
49+
$this->tagResolver = $this->createMock(Resolver::class);
3650

37-
$this->plugin = new \Magento\Framework\App\Cache\FlushCacheByTags(
51+
$this->plugin = new FlushCacheByTags(
3852
$this->frontendPool,
3953
$this->cacheState,
4054
['test'],
4155
$this->tagResolver
4256
);
4357
}
4458

45-
public function testAroundSave()
59+
/**
60+
* @return void
61+
*/
62+
public function testAroundSave(): void
4663
{
47-
$resource = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\AbstractResource::class)
64+
$resource = $this->getMockBuilder(AbstractResource::class)
4865
->disableOriginalConstructor()
4966
->getMockForAbstractClass();
50-
$model = $this->getMockBuilder(\Magento\Framework\Model\AbstractModel::class)
67+
$model = $this->getMockBuilder(AbstractModel::class)
5168
->disableOriginalConstructor()
5269
->getMockForAbstractClass();
70+
$this->tagResolver->expects($this->atLeastOnce())->method('getTags')->with($model)->willReturn([]);
71+
5372
$result = $this->plugin->aroundSave(
5473
$resource,
5574
function () use ($resource) {
5675
return $resource;
5776
},
5877
$model
5978
);
79+
6080
$this->assertSame($resource, $result);
6181
}
6282

63-
public function testAroundDelete()
83+
/**
84+
* @return void
85+
*/
86+
public function testAroundDelete(): void
6487
{
65-
$resource = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\AbstractResource::class)
88+
$resource = $this->getMockBuilder(AbstractResource::class)
6689
->disableOriginalConstructor()
6790
->getMockForAbstractClass();
68-
$model = $this->getMockBuilder(\Magento\Framework\Model\AbstractModel::class)
91+
$model = $this->getMockBuilder(AbstractModel::class)
6992
->disableOriginalConstructor()
7093
->getMockForAbstractClass();
94+
$this->tagResolver->expects($this->atLeastOnce())->method('getTags')->with($model)->willReturn([]);
95+
7196
$result = $this->plugin->aroundDelete(
7297
$resource,
7398
function () use ($resource) {
7499
return $resource;
75100
},
76101
$model
77102
);
78-
$this->assertSame($resource, $result);
79-
}
80103

81-
public function testAroundSaveWithInterface()
82-
{
83-
$resource = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\AbstractResource::class)
84-
85-
->disableOriginalConstructor()
86-
->getMockForAbstractClass();
87-
$model = $this->getMockBuilder(\Magento\Framework\Model\AbstractModel::class)
88-
->disableOriginalConstructor()
89-
->getMockForAbstractClass();
90-
$result = $this->plugin->aroundSave(
91-
$resource,
92-
function () use ($resource) {
93-
return $resource;
94-
},
95-
$model
96-
);
97104
$this->assertSame($resource, $result);
98105
}
99106
}

0 commit comments

Comments
 (0)