diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php index 108e82528a064..4917dd31b07ec 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php +++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php @@ -16,6 +16,13 @@ class Theme extends Value */ protected $_design = null; + /** + * Path to config node with list of caches + * + * @var string + */ + const XML_PATH_INVALID_CACHES = 'design/invalid_caches'; + /** * Initialize dependencies * @@ -59,17 +66,22 @@ public function beforeSave() /** * {@inheritdoc} * - * {@inheritdoc}. In addition, it cleans all Magento cache + * {@inheritdoc}. In addition, it sets status 'invalidate' for blocks and other output caches * * @return $this */ public function afterSave() { - parent::afterSave(); + $types = array_keys( + $this->_config->getValue( + self::XML_PATH_INVALID_CACHES, + \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ) + ); if ($this->isValueChanged()) { - $this->_cacheManager->clean(); - $this->_eventManager->dispatch('adminhtml_cache_flush_system'); + $this->cacheTypeList->invalidate($types); } - return $this; + + return parent::afterSave(); } } diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php index e394482d74865..e83a4e4ca30eb 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php @@ -18,9 +18,9 @@ class ThemeTest extends \PHPUnit_Framework_TestCase protected $model; /** - * @var \Magento\Framework\Model\Context + * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject */ - protected $context; + protected $contextMock; /** * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject @@ -32,16 +32,6 @@ class ThemeTest extends \PHPUnit_Framework_TestCase */ protected $cacheTypeListMock; - /** - * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $eventManagerMock; - - /** - * @var \Magento\Framework\App\CacheInterface | \PHPUnit_Framework_MockObject_MockObject - */ - protected $cacheManagerMock; - /** * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject */ @@ -49,33 +39,23 @@ class ThemeTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $objectManager = new ObjectManager($this); - $this->cacheManagerMock = $this->getMockBuilder('Magento\Framework\App\CacheInterface') + $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context') ->disableOriginalConstructor() ->getMock(); - $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface') - ->disableOriginalConstructor() - ->getMock(); - $this->context = $objectManager->getObject( - 'Magento\Framework\Model\Context', - [ - 'cacheManager' => $this->cacheManagerMock, - 'eventDispatcher' => $this->eventManagerMock, - ] - ); - $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock(); $this->cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface') ->disableOriginalConstructor() ->getMock(); + $this->contextMock->expects($this->once()) + ->method('getEventDispatcher') + ->willReturn($this->getMockBuilder('Magento\Framework\Event\ManagerInterface')->getMock()); $this->configMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock(); - - $this->model = $objectManager->getObject( + $this->model = (new ObjectManager($this))->getObject( 'Magento\Theme\Model\Design\Backend\Theme', [ 'design' => $this->designMock, - 'context' => $this->context, + 'context' => $this->contextMock, 'cacheTypeList' => $this->cacheTypeListMock, 'config' => $this->configMock, ] @@ -106,16 +86,25 @@ public function testAfterSave($callNumber, $oldValue) { $this->cacheTypeListMock->expects($this->exactly($callNumber)) ->method('invalidate'); - $this->cacheManagerMock->expects($this->exactly($callNumber)) - ->method('clean'); $this->configMock->expects($this->any()) ->method('getValue') - ->willReturn($oldValue); - if ($callNumber) { - $this->eventManagerMock->expects($this->at(3)) - ->method('dispatch') - ->with('adminhtml_cache_flush_system'); - } + ->willReturnMap( + [ + [ + Theme::XML_PATH_INVALID_CACHES, + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + null, + ['block_html' => 1, 'layout' => 1, 'translate' => 1] + ], + [ + null, + \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT, + null, + $oldValue + ], + + ] + ); $this->model->setValue('some_value'); $this->assertInstanceOf(get_class($this->model), $this->model->afterSave()); } @@ -124,7 +113,7 @@ public function afterSaveDataProvider() { return [ [0, 'some_value'], - [1, 'other_value'], + [2, 'other_value'], ]; } } diff --git a/app/code/Magento/Theme/etc/config.xml b/app/code/Magento/Theme/etc/config.xml index 332043e56df87..4f25cd7e2abf9 100644 --- a/app/code/Magento/Theme/etc/config.xml +++ b/app/code/Magento/Theme/etc/config.xml @@ -8,6 +8,11 @@ + + + + + Magento Commerce Default Description