| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Test/Unit/Controller/Adminhtml/Order/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order;
use Magento\Backend\App\Action\Context;
use Magento\Backend\Model\View\Result\Page;
use Magento\Backend\Model\View\Result\Redirect;
use Magento\Backend\Model\View\Result\RedirectFactory;
use Magento\Framework\App\ActionFlag;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Message\ManagerInterface;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\Registry;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use Magento\Framework\View\Page\Config;
use Magento\Framework\View\Page\Title;
use Magento\Framework\View\Result\PageFactory;
use Magento\Sales\Api\OrderManagementInterface;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Sales\Controller\Adminhtml\Order\View;
use Magento\Sales\Model\Order;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
/**
* @covers \Magento\Sales\Controller\Adminhtml\Order\View
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @SuppressWarnings(PHPMD.TooManyFields)
*/
class ViewTest extends TestCase
{
/**
* @var View
*/
protected $viewAction;
/**
* @var Context
*/
protected $context;
/**
* @var RequestInterface|MockObject
*/
protected $requestMock;
/**
* @var ObjectManagerInterface|MockObject
*/
protected $objectManagerMock;
/**
* @var \Magento\Sales\Model\Order|MockObject
*/
protected $orderMock;
/**
* @var ManagerInterface|MockObject
*/
protected $messageManagerMock;
/**
* @var ActionFlag|MockObject
*/
protected $actionFlagMock;
/**
* @var Registry|MockObject
*/
protected $coreRegistryMock;
/**
* @var Config|MockObject
*/
protected $pageConfigMock;
/**
* @var Title|MockObject
*/
protected $pageTitleMock;
/**
* @var PageFactory|MockObject
*/
protected $resultPageFactoryMock;
/**
* @var RedirectFactory|MockObject
*/
protected $resultRedirectFactoryMock;
/**
* @var Page|MockObject
*/
protected $resultPageMock;
/**
* @var Redirect|MockObject
*/
protected $resultRedirectMock;
/**
* @var LoggerInterface|MockObject
*/
protected $loggerMock;
/**
* @var OrderManagementInterface|MockObject
*/
protected $orderManagementMock;
/**
* @var OrderRepositoryInterface|MockObject
*/
protected $orderRepositoryMock;
/**
* Test setup
*/
protected function setUp(): void
{
$this->orderManagementMock = $this->getMockBuilder(OrderManagementInterface::class)
->getMockForAbstractClass();
$this->orderRepositoryMock = $this->getMockBuilder(OrderRepositoryInterface::class)
->getMockForAbstractClass();
$this->loggerMock = $this->getMockBuilder(LoggerInterface::class)
->getMockForAbstractClass();
$this->requestMock = $this->getMockBuilder(RequestInterface::class)
->getMock();
$this->objectManagerMock = $this->getMockBuilder(ObjectManagerInterface::class)
->getMock();
$this->orderMock = $this->getMockBuilder(Order::class)
->disableOriginalConstructor()
->getMock();
$this->messageManagerMock = $this->getMockBuilder(ManagerInterface::class)
->getMock();
$this->actionFlagMock = $this->getMockBuilder(ActionFlag::class)
->disableOriginalConstructor()
->getMock();
$this->coreRegistryMock = $this->getMockBuilder(Registry::class)
->disableOriginalConstructor()
->getMock();
$this->pageConfigMock = $this->getMockBuilder(Config::class)
->disableOriginalConstructor()
->getMock();
$this->pageTitleMock = $this->getMockBuilder(Title::class)
->disableOriginalConstructor()
->getMock();
$this->resultPageFactoryMock = $this->getMockBuilder(PageFactory::class)
->disableOriginalConstructor()
->setMethods(['create'])
->getMock();
$this->resultRedirectFactoryMock = $this->getMockBuilder(
RedirectFactory::class
)
->disableOriginalConstructor()
->setMethods(['create'])
->getMock();
$this->resultPageMock = $this->getMockBuilder(Page::class)
->disableOriginalConstructor()
->getMock();
$this->resultRedirectMock = $this->getMockBuilder(Redirect::class)
->disableOriginalConstructor()
->getMock();
$objectManager = new ObjectManager($this);
$this->context = $objectManager->getObject(
Context::class,
[
'request' => $this->requestMock,
'objectManager' => $this->objectManagerMock,
'actionFlag' => $this->actionFlagMock,
'messageManager' => $this->messageManagerMock,
'resultRedirectFactory' => $this->resultRedirectFactoryMock
]
);
$this->viewAction = $objectManager->getObject(
View::class,
[
'context' => $this->context,
'coreRegistry' => $this->coreRegistryMock,
'resultPageFactory' => $this->resultPageFactoryMock,
'resultRedirectFactory' => $this->resultRedirectFactoryMock,
'orderManagement' => $this->orderManagementMock,
'orderRepository' => $this->orderRepositoryMock,
'logger' => $this->loggerMock
]
);
}
/**
* @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
*/
public function testExecute()
{
$id = 111;
$titlePart = '#111';
$this->initOrder();
$this->initOrderSuccess();
$this->prepareRedirect();
$this->initAction();
$this->resultPageMock->expects($this->atLeastOnce())
->method('getConfig')
->willReturn($this->pageConfigMock);
$this->pageConfigMock->expects($this->atLeastOnce())
->method('getTitle')
->willReturn($this->pageTitleMock);
$this->orderMock->expects($this->atLeastOnce())
->method('getIncrementId')
->willReturn($id);
$this->pageTitleMock->expects($this->exactly(2))
->method('prepend')
->withConsecutive(
['Orders'],
[$titlePart]
)
->willReturnSelf();
$this->assertInstanceOf(
Page::class,
$this->viewAction->execute()
);
}
/**
* @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
*/
public function testExecuteNoOrder()
{
$orderIdParam = 111;
$this->requestMock->expects($this->atLeastOnce())
->method('getParam')
->with('order_id')
->willReturn($orderIdParam);
$this->orderRepositoryMock->expects($this->once())
->method('get')
->with($orderIdParam)
->willThrowException(
new NoSuchEntityException(
__("The entity that was requested doesn't exist. Verify the entity and try again.")
)
);
$this->initOrderFail();
$this->prepareRedirect();
$this->setPath('sales/*/');
$this->assertInstanceOf(
Redirect::class,
$this->viewAction->execute()
);
}
/**
* @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
*/
public function testGlobalException()
{
$exception = new \Exception();
$this->initOrder();
$this->initOrderSuccess();
$this->prepareRedirect();
$this->resultPageFactoryMock->expects($this->once())
->method('create')
->willThrowException($exception);
$this->loggerMock->expects($this->once())
->method('critical')
->with($exception);
$this->messageManagerMock->expects($this->once())
->method('addErrorMessage')
->with('Exception occurred during order load')
->willReturnSelf();
$this->setPath('sales/order/index');
$this->assertInstanceOf(
Redirect::class,
$this->viewAction->execute()
);
}
/**
* initOrder
*/
protected function initOrder()
{
$orderIdParam = 111;
$this->requestMock->expects($this->atLeastOnce())
->method('getParam')
->with('order_id')
->willReturn($orderIdParam);
$this->orderRepositoryMock->expects($this->once())
->method('get')
->with($orderIdParam)
->willReturn($this->orderMock);
}
/**
* init Order Success
*/
protected function initOrderSuccess()
{
$this->coreRegistryMock->expects($this->exactly(2))
->method('register')
->withConsecutive(
['sales_order', $this->orderMock],
['current_order', $this->orderMock]
);
}
/**
* initOrderFail
*/
protected function initOrderFail()
{
$this->messageManagerMock->expects($this->once())
->method('addErrorMessage')
->with('This order no longer exists.')
->willReturnSelf();
$this->actionFlagMock->expects($this->once())
->method('set')
->with('', \Magento\Sales\Controller\Adminhtml\Order::FLAG_NO_DISPATCH, true);
}
/**
* initAction
*/
protected function initAction()
{
$this->resultPageFactoryMock->expects($this->once())
->method('create')
->willReturn($this->resultPageMock);
$this->resultPageMock->expects($this->once())
->method('setActiveMenu')
->with('Magento_Sales::sales_order')
->willReturnSelf();
$this->resultPageMock->expects($this->exactly(2))
->method('addBreadcrumb')
->withConsecutive(
['Sales', 'Sales'],
['Orders', 'Orders']
)
->willReturnSelf();
}
/**
* prepareRedirect
*/
protected function prepareRedirect()
{
$this->resultRedirectFactoryMock->expects($this->once())
->method('create')
->willReturn($this->resultRedirectMock);
}
/**
* @param string $path
* @param array $params
*/
protected function setPath($path, $params = [])
{
$this->resultRedirectMock->expects($this->once())
->method('setPath')
->with($path, $params);
}
}