123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\WebapiAsync\Test\Unit\Controller;
- use Magento\Authorization\Model\UserContextInterface;
- use Magento\Framework\Exception\AuthorizationException;
- use Magento\WebapiAsync\Controller\Rest\AsynchronousSchemaRequestProcessor;
- use Magento\WebapiAsync\Controller\Rest\AsynchronousRequestProcessor;
- /**
- * Test Rest controller.
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- * @SuppressWarnings(PHPMD.TooManyFields)
- */
- class RestTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Webapi\Controller\Rest
- */
- private $restController;
- /**
- * @var \Magento\Framework\Webapi\Rest\Request|\PHPUnit_Framework_MockObject_MockObject
- */
- private $requestMock;
- /**
- * @var \Magento\Framework\Webapi\Rest\Response|\PHPUnit_Framework_MockObject_MockObject
- */
- private $responseMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Webapi\Controller\Rest\Router\Route
- */
- private $routeMock;
- /**
- * @var \stdClass|\PHPUnit_Framework_MockObject_MockObject
- */
- private $serviceMock;
- /**
- * @var \Magento\Framework\Oauth\OauthInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $oauthServiceMock;
- /**
- * @var \Magento\Framework\Webapi\Authorization|\PHPUnit_Framework_MockObject_MockObject
- */
- private $authorizationMock;
- /**
- * @var \Magento\Framework\Webapi\ServiceInputProcessor|\PHPUnit_Framework_MockObject_MockObject
- */
- private $serviceInputProcessorMock;
- /**
- * @var \Magento\Webapi\Model\Rest\Swagger\Generator | \PHPUnit_Framework_MockObject_MockObject
- */
- private $swaggerGeneratorMock;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface | \PHPUnit_Framework_MockObject_MockObject
- */
- private $storeManagerMock;
- /**
- * @var \Magento\Store\Api\Data\StoreInterface | \PHPUnit_Framework_MockObject_MockObject
- */
- private $storeMock;
- /**
- * @var \Magento\WebapiAsync\Controller\Rest\AsynchronousSchemaRequestProcessor |
- * \PHPUnit_Framework_MockObject_MockObject
- */
- private $asyncSchemaRequestProcessor;
- /**
- * @var \Magento\WebapiAsync\Controller\Rest\AsynchronousRequestProcessor |
- * \PHPUnit_Framework_MockObject_MockObject
- */
- private $asyncRequestProcessor;
- /**
- * @var \Magento\Webapi\Controller\Rest\RequestProcessorPool | \PHPUnit_Framework_MockObject_MockObject
- */
- private $requestProcessorPool;
- const SERVICE_METHOD = 'testMethod';
- const SERVICE_ID = \Magento\Webapi\Controller\Rest::class;
- protected function setUp()
- {
- $objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class);
- $this->requestMock = $this->getRequestMock();
- $this->requestMock->expects($this->any())->method('getHttpHost')->willReturn('testHostName.com');
- $this->responseMock = $this->getResponseMock();
- $routerMock = $this->getMockBuilder(\Magento\Webapi\Controller\Rest\Router::class)->setMethods(['match'])
- ->disableOriginalConstructor()->getMock();
- $this->routeMock = $this->getRouteMock();
- $this->serviceMock = $this->getMockBuilder(self::SERVICE_ID)->setMethods([self::SERVICE_METHOD])
- ->disableOriginalConstructor()->getMock();
- $this->oauthServiceMock = $this->getMockBuilder(\Magento\Framework\Oauth\OauthInterface::class)
- ->setMethods(['validateAccessTokenRequest'])->getMockForAbstractClass();
- $this->authorizationMock = $this->getMockBuilder(\Magento\Framework\Webapi\Authorization::class)
- ->disableOriginalConstructor()->getMock();
- $paramsOverriderMock = $this->getMockBuilder(\Magento\Webapi\Controller\Rest\ParamsOverrider::class)
- ->setMethods(['overrideParams'])
- ->disableOriginalConstructor()->getMock();
- $dataObjectProcessorMock = $this->getMockBuilder(\Magento\Framework\Reflection\DataObjectProcessor::class)
- ->disableOriginalConstructor()
- ->setMethods(['getMethodReturnType'])
- ->getMockForAbstractClass();
- $layoutMock = $this->getMockBuilder(\Magento\Framework\View\LayoutInterface::class)
- ->disableOriginalConstructor()->getMock();
- $errorProcessorMock = $this->createMock(\Magento\Framework\Webapi\ErrorProcessor::class);
- $errorProcessorMock->expects($this->any())->method('maskException')->will($this->returnArgument(0));
- $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->serviceInputProcessorMock = $this->getMockBuilder(\Magento\Framework\Webapi\ServiceInputProcessor::class)
- ->disableOriginalConstructor()->setMethods(['process'])->getMock();
- $areaListMock = $this->createMock(\Magento\Framework\App\AreaList::class);
- $areaMock = $this->createMock(\Magento\Framework\App\AreaInterface::class);
- $areaListMock->expects($this->any())->method('getArea')->will($this->returnValue($areaMock));
- $this->storeMock = $this->createMock(\Magento\Store\Api\Data\StoreInterface::class);
- $this->storeManagerMock = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class);
- $this->storeManagerMock->expects($this->any())->method('getStore')->willReturn($this->storeMock);
- $this->requestProcessorPool = $this->getRequestProccessotPoolMock();
- $this->restController =
- $objectManager->getObject(
- \Magento\Webapi\Controller\Rest::class,
- [
- 'request' => $this->requestMock,
- 'response' => $this->responseMock,
- 'router' => $routerMock,
- 'objectManager' => $objectManagerMock,
- 'layout' => $layoutMock,
- 'oauthService' => $this->oauthServiceMock,
- 'authorization' => $this->authorizationMock,
- 'serviceInputProcessor' => $this->serviceInputProcessorMock,
- 'errorProcessor' => $errorProcessorMock,
- 'areaList' => $areaListMock,
- 'paramsOverrider' => $paramsOverriderMock,
- 'dataObjectProcessor' => $dataObjectProcessorMock,
- 'storeManager' => $this->storeManagerMock,
- 'requestProcessorPool' => $this->requestProcessorPool,
- ]
- );
- $this->routeMock->expects($this->any())->method('getServiceClass')->will($this->returnValue(self::SERVICE_ID));
- $this->routeMock->expects($this->any())->method('getServiceMethod')
- ->will($this->returnValue(self::SERVICE_METHOD));
- $routerMock->expects($this->any())->method('match')->will($this->returnValue($this->routeMock));
- $objectManagerMock->expects($this->any())->method('get')->will($this->returnValue($this->serviceMock));
- $this->responseMock->expects($this->any())->method('prepareResponse')->will($this->returnValue([]));
- $this->serviceMock->expects($this->any())->method(self::SERVICE_METHOD)->will($this->returnValue(null));
- $dataObjectProcessorMock->expects($this->any())->method('getMethodReturnType')
- ->with(self::SERVICE_ID, self::SERVICE_METHOD)
- ->will($this->returnValue('null'));
- $paramsOverriderMock->expects($this->any())->method('overrideParams')->will($this->returnValue([]));
- parent::setUp();
- }
- public function testDispatchSchemaRequest()
- {
- $params = [
- \Magento\Framework\Webapi\Request::REQUEST_PARAM_SERVICES => 'foo',
- ];
- $this->requestMock->expects($this->any())
- ->method('getPathInfo')
- ->willReturn(AsynchronousSchemaRequestProcessor::PROCESSOR_PATH);
- $this->requestMock->expects($this->any())
- ->method('getParams')
- ->will($this->returnValue($params));
- $schema = 'Some REST schema content';
- $this->swaggerGeneratorMock->expects($this->any())->method('generate')->willReturn($schema);
- $this->requestProcessorPool->getProcessor($this->requestMock)->process($this->requestMock);
- $this->assertEquals($schema, $this->responseMock->getBody());
- }
- public function testDispatchAllSchemaRequest()
- {
- $params = [
- \Magento\Framework\Webapi\Request::REQUEST_PARAM_SERVICES => 'all',
- ];
- $this->requestMock->expects($this->any())
- ->method('getPathInfo')
- ->willReturn(AsynchronousSchemaRequestProcessor::PROCESSOR_PATH);
- $this->requestMock->expects($this->any())
- ->method('getParam')
- ->will(
- $this->returnValueMap([
- [
- \Magento\Framework\Webapi\Request::REQUEST_PARAM_SERVICES,
- null,
- 'all',
- ],
- ])
- );
- $this->requestMock->expects($this->any())
- ->method('getParams')
- ->will($this->returnValue($params));
- $this->requestMock->expects($this->any())
- ->method('getRequestedServices')
- ->will($this->returnValue('all'));
- $schema = 'Some REST schema content';
- $this->swaggerGeneratorMock->expects($this->any())->method('generate')->willReturn($schema);
- $this->requestProcessorPool->getProcessor($this->requestMock)->process($this->requestMock);
- $this->assertEquals($schema, $this->responseMock->getBody());
- }
- /**
- * @return object|\Magento\Webapi\Controller\Rest\RequestProcessorPool
- */
- private function getRequestProccessotPoolMock()
- {
- $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->swaggerGeneratorMock = $this->getMockBuilder(\Magento\Webapi\Model\Rest\Swagger\Generator::class)
- ->disableOriginalConstructor()
- ->setMethods(['generate', 'getListOfServices'])
- ->getMockForAbstractClass();
- $this->asyncSchemaRequestProcessor = $objectManager->getObject(
- \Magento\WebapiAsync\Controller\Rest\AsynchronousSchemaRequestProcessor::class,
- [
- 'swaggerGenerator' => $this->swaggerGeneratorMock,
- 'response' => $this->responseMock,
- ]
- );
- $this->asyncRequestProcessor =
- $this->getMockBuilder(\Magento\WebapiAsync\Controller\Rest\AsynchronousRequestProcessor::class)
- ->setMethods(['process'])
- ->disableOriginalConstructor()
- ->getMock();
- return $objectManager->getObject(
- \Magento\Webapi\Controller\Rest\RequestProcessorPool::class,
- [
- 'requestProcessors' => [
- 'asyncSchema' => $this->asyncSchemaRequestProcessor,
- 'async' => $this->asyncRequestProcessor,
- ],
- ]
- );
- }
- /**
- * @return \Magento\Webapi\Controller\Rest\Router\Route | \PHPUnit_Framework_MockObject_MockObject
- */
- private function getRouteMock()
- {
- return $this->getMockBuilder(\Magento\Webapi\Controller\Rest\Router\Route::class)
- ->setMethods([
- 'isSecure',
- 'getServiceMethod',
- 'getServiceClass',
- 'getAclResources',
- 'getParameters',
- ])
- ->disableOriginalConstructor()->getMock();
- }
- /**
- * @return \Magento\Framework\Webapi\Rest\Request|\PHPUnit_Framework_MockObject_MockObject
- */
- private function getRequestMock()
- {
- return $this->getMockBuilder(\Magento\Framework\Webapi\Rest\Request::class)
- ->setMethods(
- [
- 'isSecure',
- 'getRequestData',
- 'getParams',
- 'getParam',
- 'getRequestedServices',
- 'getPathInfo',
- 'getHttpHost',
- 'getMethod',
- ]
- )->disableOriginalConstructor()->getMock();
- }
- /**
- * @return \Magento\Framework\Webapi\Rest\Response|\PHPUnit_Framework_MockObject_MockObject
- */
- private function getResponseMock()
- {
- return $this->getMockBuilder(\Magento\Framework\Webapi\Rest\Response::class)
- ->setMethods(['sendResponse', 'prepareResponse', 'setHeader'])
- ->disableOriginalConstructor()
- ->getMock();
- }
- }
|