diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php index ebd6ff4a79b06..2eb54c9814ef7 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php @@ -9,6 +9,7 @@ use Magento\Backend\App\Action\Context; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; +use Magento\Sales\Api\OrderManagementInterface; class MassUnhold extends AbstractMassAction { @@ -16,16 +17,29 @@ class MassUnhold extends AbstractMassAction * Authorization level of a basic admin session */ const ADMIN_RESOURCE = 'Magento_Sales::unhold'; + + /** + * @var OrderManagementInterface + */ + private $orderManagement; /** * @param Context $context * @param Filter $filter * @param CollectionFactory $collectionFactory + * @param OrderManagementInterface|null $orderManagement */ - public function __construct(Context $context, Filter $filter, CollectionFactory $collectionFactory) - { + public function __construct( + Context $context, + Filter $filter, + CollectionFactory $collectionFactory, + OrderManagementInterface $orderManagement = null + ) { parent::__construct($context, $filter); $this->collectionFactory = $collectionFactory; + $this->orderManagement = $orderManagement ?: \Magento\Framework\App\ObjectManager::getInstance()->get( + \Magento\Sales\Api\OrderManagementInterface::class + ); } /** @@ -40,12 +54,10 @@ protected function massAction(AbstractCollection $collection) /** @var \Magento\Sales\Model\Order $order */ foreach ($collection->getItems() as $order) { - $order->load($order->getId()); if (!$order->canUnhold()) { continue; } - $order->unhold(); - $order->save(); + $this->orderManagement->unHold($order->getEntityId()); $countUnHoldOrder++; } diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php index 7003d445e1b50..cddb503925987 100644 --- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php +++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php @@ -85,6 +85,11 @@ class MassUnholdTest extends \PHPUnit\Framework\TestCase */ protected $filterMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $orderManagementMock; + protected function setUp() { $objectManagerHelper = new ObjectManagerHelper($this); @@ -146,12 +151,15 @@ protected function setUp() ->method('create') ->willReturn($this->orderCollectionMock); + $this->orderManagementMock = $this->createMock(\Magento\Sales\Api\OrderManagementInterface::class); + $this->massAction = $objectManagerHelper->getObject( \Magento\Sales\Controller\Adminhtml\Order\MassUnhold::class, [ 'context' => $this->contextMock, 'filter' => $this->filterMock, - 'collectionFactory' => $this->orderCollectionFactoryMock + 'collectionFactory' => $this->orderCollectionFactoryMock, + 'orderManagement' => $this->orderManagementMock ] ); } @@ -175,9 +183,7 @@ public function testExecuteOneOrdersReleasedFromHold() ->method('canUnhold') ->willReturn(true); $order1->expects($this->once()) - ->method('unhold'); - $order1->expects($this->once()) - ->method('save'); + ->method('getEntityId'); $this->orderCollectionMock->expects($this->once()) ->method('count') @@ -187,6 +193,8 @@ public function testExecuteOneOrdersReleasedFromHold() ->method('canUnhold') ->willReturn(false); + $this->orderManagementMock->expects($this->atLeastOnce())->method('unHold')->willReturn(true); + $this->messageManagerMock->expects($this->once()) ->method('addError') ->with('1 order(s) were not released from on hold status.');