diff --git a/app/code/Magento/Indexer/Model/Config/Data.php b/app/code/Magento/Indexer/Model/Config/Data.php index 703c875d1ef4ef55f9572d24177ffa55f9b985ca..7fdd3b326d5afa7d19505e6e08e0ba6979f35116 100644 --- a/app/code/Magento/Indexer/Model/Config/Data.php +++ b/app/code/Magento/Indexer/Model/Config/Data.php @@ -6,6 +6,7 @@ namespace Magento\Indexer\Model\Config; use Magento\Framework\Serialize\SerializerInterface; +use Magento\Framework\Serialize\Serializer\Serialize; class Data extends \Magento\Framework\Config\Data { @@ -21,20 +22,18 @@ class Data extends \Magento\Framework\Config\Data * @param \Magento\Framework\Config\CacheInterface $cache * @param \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $stateCollection * @param string $cacheId - * @param SerializerInterface|null $serializer */ public function __construct( \Magento\Framework\Indexer\Config\Reader $reader, \Magento\Framework\Config\CacheInterface $cache, \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $stateCollection, - $cacheId = 'indexer_config', - SerializerInterface $serializer = null + $cacheId = 'indexer_config' ) { $this->stateCollection = $stateCollection; $isCacheExists = $cache->test($cacheId); - parent::__construct($reader, $cache, $cacheId, $serializer); + parent::__construct($reader, $cache, $cacheId); if (!$isCacheExists) { $this->deleteNonexistentStates(); @@ -55,4 +54,19 @@ class Data extends \Magento\Framework\Config\Data } } } + + /** + * Get serializer + * + * @return SerializerInterface + * @deprecated + */ + protected function getSerializer() + { + if ($this->serializer === null) { + $this->serializer = \Magento\Framework\App\ObjectManager::getInstance() + ->get(Serialize::class); + } + return $this->serializer; + } } diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php b/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php index e16c21b8f112592e759cca7489a685ae59aa5dbe..fe66da6366e4df90a0d530a47fc68b94f8f129a1 100644 --- a/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php @@ -5,6 +5,9 @@ */ namespace Magento\Indexer\Test\Unit\Model\Config; +use Magento\Framework\Serialize\SerializerInterface; +use Magento\Framework\Serialize\Serializer\Serialize; + class DataTest extends \PHPUnit_Framework_TestCase { /** @@ -38,7 +41,7 @@ class DataTest extends \PHPUnit_Framework_TestCase protected $indexers = ['indexer1' => [], 'indexer3' => []]; /** - * @var \Magento\Framework\Serialize\SerializerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var SerializerInterface|\PHPUnit_Framework_MockObject_MockObject */ private $serializerMock; @@ -61,7 +64,14 @@ class DataTest extends \PHPUnit_Framework_TestCase '', false ); - $this->serializerMock = $this->getMock(\Magento\Framework\Serialize\SerializerInterface::class); + $this->serializerMock = $this->getMock(SerializerInterface::class); + } + + protected function tearDown() + { + $reflectionProperty = new \ReflectionProperty(\Magento\Framework\App\ObjectManager::class, '_instance'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue(null); } public function testConstructorWithCache() @@ -80,12 +90,13 @@ class DataTest extends \PHPUnit_Framework_TestCase $this->stateCollection->expects($this->never())->method('getItems'); + $this->mockObjectManager([Serialize::class => $this->serializerMock]); + $this->model = new \Magento\Indexer\Model\Config\Data( $this->reader, $this->cache, $this->stateCollection, - $this->cacheId, - $this->serializerMock + $this->cacheId ); } @@ -120,12 +131,32 @@ class DataTest extends \PHPUnit_Framework_TestCase $this->stateCollection->expects($this->once())->method('getItems')->will($this->returnValue($states)); + $this->mockObjectManager([Serialize::class => $this->serializerMock]); + $this->model = new \Magento\Indexer\Model\Config\Data( $this->reader, $this->cache, $this->stateCollection, - $this->cacheId, - $this->serializerMock + $this->cacheId ); } + + /** + * Mock application object manager to return configured dependencies + * + * @param array $dependencies + * @return void + */ + private function mockObjectManager($dependencies) + { + $dependencyMap = []; + foreach ($dependencies as $type => $instance) { + $dependencyMap[] = [$type, $instance]; + } + $objectManagerMock = $this->getMock(\Magento\Framework\ObjectManagerInterface::class); + $objectManagerMock->expects($this->any()) + ->method('get') + ->will($this->returnValueMap($dependencyMap)); + \Magento\Framework\App\ObjectManager::setInstance($objectManagerMock); + } }