diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml index 075410d632c6ae4d7d85c244570a88af0cbcab4d..7e4742bd14d1eee1955cae44163a26e443271fcd 100644 --- a/app/code/Magento/Catalog/etc/di.xml +++ b/app/code/Magento/Catalog/etc/di.xml @@ -542,10 +542,10 @@ <arguments> <argument name="operations" xsi:type="array"> <item name="default" xsi:type="array"> - <item name="read" xsi:type="object">Magento\Framework\Model\Operation\Read</item> - <item name="create" xsi:type="object">Magento\Framework\Model\Operation\Write\Create</item> - <item name="update" xsi:type="object">Magento\Framework\Model\Operation\Write\Update</item> - <item name="delete" xsi:type="object">Magento\Framework\Model\Operation\Write\Delete</item> + <item name="read" xsi:type="string">Magento\Framework\Model\Operation\Read</item> + <item name="create" xsi:type="string">Magento\Framework\Model\Operation\Write\Create</item> + <item name="update" xsi:type="string">Magento\Framework\Model\Operation\Write\Update</item> + <item name="delete" xsi:type="string">Magento\Framework\Model\Operation\Write\Delete</item> </item> </argument> </arguments> diff --git a/app/code/Magento/CatalogRule/etc/di.xml b/app/code/Magento/CatalogRule/etc/di.xml index 5accde1deb86c0d4085f2a4837baf6b8e8dff630..e5244cb01dda1bc59ecb10574e85d845ebbb8272 100644 --- a/app/code/Magento/CatalogRule/etc/di.xml +++ b/app/code/Magento/CatalogRule/etc/di.xml @@ -79,10 +79,10 @@ <arguments> <argument name="operations" xsi:type="array"> <item name="default" xsi:type="array"> - <item name="read" xsi:type="object">Magento\Framework\Model\Operation\Read</item> - <item name="create" xsi:type="object">Magento\Framework\Model\Operation\Write\Create</item> - <item name="update" xsi:type="object">Magento\Framework\Model\Operation\Write\Update</item> - <item name="delete" xsi:type="object">Magento\Framework\Model\Operation\Write\Delete</item> + <item name="read" xsi:type="string">Magento\Framework\Model\Operation\Read</item> + <item name="create" xsi:type="string">Magento\Framework\Model\Operation\Write\Create</item> + <item name="update" xsi:type="string">Magento\Framework\Model\Operation\Write\Update</item> + <item name="delete" xsi:type="string">Magento\Framework\Model\Operation\Write\Delete</item> </item> </argument> </arguments> diff --git a/lib/internal/Magento/Framework/Model/OrchestratorPool.php b/lib/internal/Magento/Framework/Model/OrchestratorPool.php index 0caf854067e16f56592c3b5a319c13c6faf39f1d..36d0eca158f09ec4d7db4af8a5eb92e117649079 100644 --- a/lib/internal/Magento/Framework/Model/OrchestratorPool.php +++ b/lib/internal/Magento/Framework/Model/OrchestratorPool.php @@ -6,6 +6,7 @@ namespace Magento\Framework\Model; +use Magento\Framework\ObjectManagerInterface as ObjectManager; /** * Class Orchestrator */ @@ -16,13 +17,21 @@ class OrchestratorPool */ protected $operations; + /** + * @var ObjectManager + */ + protected $objectManager; /** - * @param array $operations + * OrchestratorPool constructor. + * @param ObjectManager $objectManager + * @param $operations */ public function __construct( + ObjectManager $objectManager, $operations ) { + $this->objectManager = $objectManager; $this->operations = $operations; } @@ -34,12 +43,10 @@ class OrchestratorPool */ public function getWriteOperation($entityType, $operationName) { - if (!isset($this->operations[$entityType][$operationName]) - || !$this->operations[$entityType][$operationName] instanceof Operation\WriteInterface - ) { - return $this->operations['default'][$operationName]; + if (!isset($this->operations[$entityType][$operationName])) { + return $this->objectManager->get($this->operations['default'][$operationName]); } - return $this->operations[$entityType][$operationName]; + return $this->objectManager->get($this->operations[$entityType][$operationName]); } /** @@ -49,12 +56,9 @@ class OrchestratorPool */ public function getReadOperation($entityType) { - //TODO: remove interfaces Read and Write - if (!isset($this->operations[$entityType]['read']) - || !$this->operations[$entityType]['read'] instanceof Operation\ReadInterface - ) { - return $this->operations['default']['read']; + if (!isset($this->operations[$entityType]['read'])) { + return $this->objectManager->get($this->operations['default']['read']); } - return $this->operations[$entityType]['read']; + return $this->objectManager->get($this->operations[$entityType]['read']); } } diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/OrchestratorPoolTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/OrchestratorPoolTest.php index 219c96c976b8bb38aeb376a5a44a2deb453c086a..2a22ac8fc7fcc443614d50de55da6745f193c727 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/OrchestratorPoolTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/OrchestratorPoolTest.php @@ -12,12 +12,29 @@ class OrchestratorPoolTest extends \PHPUnit_Framework_TestCase */ protected $model; + /** + * @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $objectManagerMock; + + /** + * @var \Magento\Framework\Model\Operation\WriteInterface + */ + protected $writeOperationMock; + + /** + * @var \Magento\Framework\Model\Operation\ReadInterface + */ + protected $readOperationMock; + public function setUp() { - $writeOperationInstance = $this->getMockBuilder('Magento\Framework\Model\Operation\WriteInterface') + $this->objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface') + ->getMock(); + $this->writeOperationMock = $this->getMockBuilder('Magento\Framework\Model\Operation\WriteInterface') ->disableOriginalConstructor() ->getMock(); - $readOperationInstance = $this->getMockBuilder('Magento\Framework\Model\Operation\WriteInterface') + $this->readOperationMock = $this->getMockBuilder('Magento\Framework\Model\Operation\ReadInterface') ->disableOriginalConstructor() ->getMock(); $operations = [ @@ -27,48 +44,56 @@ class OrchestratorPoolTest extends \PHPUnit_Framework_TestCase ], 'test_write_entity_type' => [ - 'write' => $writeOperationInstance, - 'read' => $readOperationInstance + 'write' => 'WriteOperation', + 'read' => 'ReadOperation' ], 'test_read_entity_type' => [ - 'read' => $readOperationInstance + 'read' => 'ReadOperation' ] ]; - $this->model = new \Magento\Framework\Model\OrchestratorPool($operations); + $this->model = new \Magento\Framework\Model\OrchestratorPool($this->objectManagerMock, $operations); } public function testGetWriteOperationDefault() { $entityType = 'not_isset_test_entity'; $operationName = 'write'; - - $this->assertEquals('Write_Operation', $this->model->getWriteOperation($entityType, $operationName)); + $this->objectManagerMock->expects($this->once()) + ->method('get') + ->with('Write_Operation') + ->willReturn($this->writeOperationMock); + $this->assertEquals($this->writeOperationMock, $this->model->getWriteOperation($entityType, $operationName)); } public function testGetWriteOperation() { $entityType = 'test_write_entity_type'; $operationName = 'write'; - $this->assertInstanceOf( - 'Magento\Framework\Model\Operation\WriteInterface', - $this->model->getWriteOperation($entityType, $operationName) - ); + $this->objectManagerMock->expects($this->once()) + ->method('get') + ->with('WriteOperation') + ->willReturn($this->writeOperationMock); + $this->assertEquals($this->writeOperationMock, $this->model->getWriteOperation($entityType, $operationName)); } public function testGetReadOperationDefault() { - $entityType = 'test_read_entity_type'; - $this->assertEquals('Read_Operation', $this->model->getReadOperation($entityType)); + $entityType = 'not_isset_test_entity'; + $this->objectManagerMock->expects($this->once()) + ->method('get') + ->with('Read_Operation') + ->willReturn($this->readOperationMock); + $this->assertEquals($this->readOperationMock, $this->model->getReadOperation($entityType)); } public function testGetReadOperation() { $entityType = 'test_read_entity_type'; - $operationName = 'read'; - $this->assertInstanceOf( - 'Magento\Framework\Model\Operation\WriteInterface', - $this->model->getWriteOperation($entityType, $operationName) - ); + $this->objectManagerMock->expects($this->once()) + ->method('get') + ->with('ReadOperation') + ->willReturn($this->readOperationMock); + $this->assertEquals($this->readOperationMock, $this->model->getReadOperation($entityType)); } }