requestMock = $this->getMockBuilder(\Magento\Framework\Webapi\Rest\Request::class) ->setMethods( [ 'isSecure', 'getRequestData', 'getParams', 'getParam', 'getRequestedServices', 'getPathInfo', 'getHttpHost', 'getMethod', ] )->disableOriginalConstructor()->getMock(); $this->requestMock->expects($this->any()) ->method('getHttpHost') ->willReturn('testHostName.com'); $routerMock = $this->getMockBuilder(\Magento\Webapi\Controller\Rest\Router::class)->setMethods(['match']) ->disableOriginalConstructor()->getMock(); $this->routeMock = $this->getMockBuilder(\Magento\Webapi\Controller\Rest\Router\Route::class) ->setMethods(['isSecure', 'getServiceMethod', 'getServiceClass', 'getAclResources', 'getParameters']) ->disableOriginalConstructor()->getMock(); $this->authorizationMock = $this->getMockBuilder(\Magento\Framework\Webapi\Authorization::class) ->disableOriginalConstructor()->getMock(); $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $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->requestValidator = $objectManager->getObject( \Magento\Webapi\Controller\Rest\RequestValidator::class, [ 'request' => $this->requestMock, 'router' => $routerMock, 'authorization' => $this->authorizationMock, 'storeManager' => $this->storeManagerMock ] ); // Set default expectations used by all tests $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)); parent::setUp(); } /** * Test Secure Request and Secure route combinations * * @dataProvider dataProviderSecureRequestSecureRoute */ public function testSecureRouteAndRequest($isSecureRoute, $isSecureRequest) { $this->routeMock->expects($this->any())->method('isSecure')->will($this->returnValue($isSecureRoute)); $this->routeMock->expects($this->any())->method('getAclResources')->will($this->returnValue(['1'])); $this->requestMock->expects($this->any())->method('getRequestData')->will($this->returnValue([])); $this->requestMock->expects($this->any())->method('isSecure')->will($this->returnValue($isSecureRequest)); $this->authorizationMock->expects($this->once())->method('isAllowed')->will($this->returnValue(true)); $this->requestValidator->validate(); } /** * Data provider for testSecureRouteAndRequest. * * @return array */ public function dataProviderSecureRequestSecureRoute() { // Each array contains return type for isSecure method of route and request objects. return [[true, true], [false, true], [false, false]]; } /** * Test insecure request for a secure route * * @expectedException \Magento\Framework\Webapi\Exception * @expectedExceptionMessage Operation allowed only in HTTPS */ public function testInSecureRequestOverSecureRoute() { $this->routeMock->expects($this->any())->method('isSecure')->will($this->returnValue(true)); $this->routeMock->expects($this->any())->method('getAclResources')->will($this->returnValue(['1'])); $this->requestMock->expects($this->any())->method('isSecure')->will($this->returnValue(false)); $this->authorizationMock->expects($this->once())->method('isAllowed')->will($this->returnValue(true)); $this->requestValidator->validate(); } /** * @expectedException \Magento\Framework\Exception\AuthorizationException * @expectedExceptionMessage The consumer isn't authorized to access 5, 6. */ public function testAuthorizationFailed() { $this->authorizationMock->expects($this->once())->method('isAllowed')->will($this->returnValue(false)); $this->routeMock->expects($this->any())->method('getAclResources')->will($this->returnValue(['5', '6'])); $this->requestValidator->validate(); } }