contextMock = $this->getMockBuilder(Context::class) ->disableOriginalConstructor() ->getMock(); $this->requestMock = $this->getMockBuilder(RequestInterface::class) ->onlyMethods( [ 'getModuleName', 'getActionName', 'getParam', 'setParams', 'getParams', 'setModuleName', 'isSecure', 'setActionName', 'getCookie' ] )->addMethods( [ 'getControllerName', 'getRequestUri', 'setRequestUri', 'getRouteName' ] )->getMockForAbstractClass(); $this->layoutMock = $this->getMockBuilder(LayoutInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->layoutUpdateMock = $this->getMockBuilder(ProcessorInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->urlBuilderMock = $this->getMockBuilder(UrlInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->contextMock->expects($this->any()) ->method('getRequest') ->willReturn($this->requestMock); $this->contextMock->expects($this->any()) ->method('getLayout') ->willReturn($this->layoutMock); $this->contextMock->expects($this->any()) ->method('getUrlBuilder') ->willReturn($this->urlBuilderMock); $this->layoutMock->expects($this->any()) ->method('getUpdate') ->willReturn($this->layoutUpdateMock); $objectManager = new ObjectManager($this); $this->blockJavascript = $objectManager->getObject( Javascript::class, [ 'context' => $this->contextMock ] ); } /** * @covers \Magento\PageCache\Block\Javascript::getScriptOptions * @param bool $isSecure * @param string $url * @param string $expectedResult * @dataProvider getScriptOptionsDataProvider */ public function testGetScriptOptions($isSecure, $url, $expectedResult) { $handles = [ 'some', 'handles', 'here' ]; $this->requestMock->expects($this->once()) ->method('isSecure') ->willReturn($isSecure); $this->requestMock->expects($this->once()) ->method('getRouteName') ->willReturn('route'); $this->requestMock->expects($this->once()) ->method('getControllerName') ->willReturn('controller'); $this->requestMock->expects($this->once()) ->method('getActionName') ->willReturn('action'); $this->requestMock->expects($this->once()) ->method('getRequestUri') ->willReturn('uri'); $this->urlBuilderMock->expects($this->once()) ->method('getUrl') ->willReturn($url); $this->layoutUpdateMock->expects($this->once()) ->method('getHandles') ->willReturn($handles); $this->assertMatchesRegularExpression($expectedResult, $this->blockJavascript->getScriptOptions()); } /** * @return array */ public function getScriptOptionsDataProvider() { return [ 'http' => [ 'isSecure' => false, 'url' => 'http://some-name.com/page_cache/block/render', 'expectedResult' => '~http:\\\\/\\\\/some-name\\.com.+\\["some","handles","here"\\]~' ], 'https' => [ 'isSecure' => true, 'url' => 'https://some-name.com/page_cache/block/render', 'expectedResult' => '~https:\\\\/\\\\/some-name\\.com.+\\["some","handles","here"\\]~' ] ]; } /** * @covers \Magento\PageCache\Block\Javascript::getScriptOptions * @param string $url * @param string $route * @param string $controller * @param string $action * @param string $uri * @param string $expectedResult * @dataProvider getScriptOptionsPrivateContentDataProvider */ public function testGetScriptOptionsPrivateContent($url, $route, $controller, $action, $uri, $expectedResult) { $handles = [ 'some', 'handles', 'here' ]; $this->requestMock->expects($this->once()) ->method('isSecure') ->willReturn(false); $this->requestMock->expects($this->once()) ->method('getRouteName') ->willReturn($route); $this->requestMock->expects($this->once()) ->method('getControllerName') ->willReturn($controller); $this->requestMock->expects($this->once()) ->method('getActionName') ->willReturn($action); $this->requestMock->expects($this->once()) ->method('getRequestUri') ->willReturn($uri); $this->urlBuilderMock->expects($this->once()) ->method('getUrl') ->willReturn($url); $this->layoutUpdateMock->expects($this->once()) ->method('getHandles') ->willReturn($handles); $this->assertMatchesRegularExpression($expectedResult, $this->blockJavascript->getScriptOptions()); } /** * @return array */ public function getScriptOptionsPrivateContentDataProvider() { // @codingStandardsIgnoreStart return [ 'http' => [ 'url' => 'http://some-name.com/page_cache/block/render', 'route' => 'route', 'controller' => 'controller', 'action' => 'action', 'uri' => 'uri', 'expectedResult' => '~"originalRequest":{"route":"route","controller":"controller","action":"action","uri":"uri"}~' ], ]; //@codingStandardsIgnoreEnd } }