public function testPreviewDefaultSiteaccess()
 {
     $contentId = 123;
     $lang = 'eng-GB';
     $versionNo = 3;
     $locationId = 456;
     $content = $this->getMock('eZ\\Publish\\API\\Repository\\Values\\Content\\Content');
     $location = $this->getMockBuilder('eZ\\Publish\\API\\Repository\\Values\\Content\\Location')->setConstructorArgs(array(array('id' => $locationId)))->getMockForAbstractClass();
     // Repository expectations
     $this->locationProvider->expects($this->once())->method('loadMainLocation')->with($contentId)->will($this->returnValue($location));
     $this->contentService->expects($this->once())->method('loadContent')->with($contentId, array($lang), $versionNo)->will($this->returnValue($content));
     $this->authorizationChecker->expects($this->once())->method('isGranted')->with($this->equalTo(new AuthorizationAttribute('content', 'versionread', array('valueObject' => $content))))->will($this->returnValue(true));
     $previousSiteAccessName = 'foo';
     $previousSiteAccess = new SiteAccess($previousSiteAccessName);
     $request = $this->getMock('Symfony\\Component\\HttpFoundation\\Request', array('duplicate'));
     $this->previewHelper->expects($this->once())->method('getOriginalSiteAccess')->will($this->returnValue($previousSiteAccess));
     $this->previewHelper->expects($this->once())->method('restoreConfigScope');
     // Request expectations
     $duplicatedRequest = $this->getDuplicatedRequest($location, $content, $previousSiteAccess);
     $request->expects($this->once())->method('duplicate')->will($this->returnValue($duplicatedRequest));
     // Kernel expectations
     $expectedResponse = new Response();
     $this->httpKernel->expects($this->once())->method('handle')->with($duplicatedRequest, HttpKernelInterface::SUB_REQUEST)->will($this->returnValue($expectedResponse));
     $controller = $this->getPreviewController();
     $this->assertSame($expectedResponse, $controller->previewContentAction($request, $contentId, $versionNo, $lang));
 }
 /**
  * Returns the Request object that will be forwarded to the kernel for previewing the content.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Location $location
  * @param \eZ\Publish\API\Repository\Values\Content\Content $content
  * @param \eZ\Publish\Core\MVC\Symfony\SiteAccess $previewSiteAccess
  * @param Request $request
  * @param string $language
  *
  * @return \Symfony\Component\HttpFoundation\Request
  */
 protected function getForwardRequest(Location $location, Content $content, SiteAccess $previewSiteAccess, Request $request, $language)
 {
     $forwardRequestParameters = array('_controller' => UrlAliasRouter::VIEW_ACTION, '_route' => UrlAliasGenerator::INTERNAL_CONTENT_VIEW_ROUTE, '_route_params' => array('contentId' => $content->id, 'locationId' => $location->id, 'language' => $language), 'location' => $location, 'viewType' => ViewManagerInterface::VIEW_TYPE_FULL, 'layout' => true, 'params' => array('content' => $content, 'location' => $location, 'isPreview' => true), 'siteaccess' => $previewSiteAccess, 'semanticPathinfo' => $request->attributes->get('semanticPathinfo'));
     if ($this->controllerChecker->usesCustomController($content, $location)) {
         $forwardRequestParameters = ['_controller' => 'ez_content:viewLocation', '_route' => self::INTERNAL_LOCATION_VIEW_ROUTE] + $forwardRequestParameters;
     }
     return $request->duplicate(null, null, $forwardRequestParameters);
 }