public function testIndexActionWithoutRoutes()
 {
     $controller = new Controller($this->getSerializer(), $this->getExtractor(), sys_get_temp_dir());
     $response = $controller->indexAction(Request::create('/'), 'json');
     $this->assertEquals('{"base_url":"","routes":[]}', $response->getContent());
     $this->assertEquals(200, $response->getStatusCode());
     $this->assertEquals('application/json', $response->headers->get('Content-Type'));
 }
 public function testCacheControl()
 {
     $cacheControlConfig = array('enabled' => true, 'public' => true, 'expires' => '2013-10-04 23:59:59 UTC', 'maxage' => 123, 'smaxage' => 456, 'vary' => array());
     $controller = new Controller($this->getSerializer(), $this->getExtractor(), $cacheControlConfig, sys_get_temp_dir());
     $response = $controller->indexAction($this->getRequest('/'), 'json');
     $this->assertTrue($response->headers->hasCacheControlDirective('public'));
     $this->assertEquals('2013-10-04 23:59:59', $response->getExpires()->format('Y-m-d H:i:s'));
     $this->assertTrue($response->headers->hasCacheControlDirective('max-age'));
     $this->assertEquals(123, $response->headers->getCacheControlDirective('max-age'));
     $this->assertTrue($response->headers->hasCacheControlDirective('s-maxage'));
     $this->assertEquals(456, $response->headers->getCacheControlDirective('s-maxage'));
 }
 /**
  * Adds the claroline common assets and translations into the package.
  *
  * @param \ZipArchive $archive
  * @param string      $locale
  */
 private function addCommons(\ZipArchive $archive, $locale)
 {
     $assets = ['bootstrap.css' => 'themes/claroline/bootstrap.css', 'font-awesome.css' => 'packages/font-awesome/css/font-awesome.min.css', 'claroline-reset.css' => 'vendor/clarolinescorm/claroline-reset.css', 'jquery.min.js' => 'packages/jquery/dist/jquery.min.js', 'jquery-ui.min.js' => 'packages/jquery-ui/jquery-ui.min.js', 'bootstrap.min.js' => 'packages/bootstrap/dist/js/bootstrap.min.js', 'translator.js' => 'bundles/bazingajstranslation/js/translator.min.js', 'router.js' => 'bundles/fosjsrouting/js/router.js', 'video.min.js' => 'packages/video.js/dist/video.min.js', 'video-js.min.css' => 'packages/video.js/dist/video-js.min.css', 'video-js.swf' => 'packages/video.js/dist/video-js.swf'];
     $webpackAssets = ['commons.js' => 'dist/commons.js', 'claroline-distribution-plugin-video-player-watcher.js' => 'dist/claroline-distribution-plugin-video-player-watcher.js'];
     $translationDomains = ['resource', 'home', 'platform', 'error', 'validators'];
     foreach ($assets as $filename => $originalFile) {
         $this->copyToPackage($archive, 'commons/' . $filename, $this->getFilePath($this->webPath, $originalFile));
     }
     // Add webpack assets
     foreach ($webpackAssets as $filename => $originalFile) {
         $this->copyToPackage($archive, 'commons/' . $filename, $this->getFilePath($this->webPath, $this->webpack->hotAsset($originalFile, true)));
     }
     // Add FontAwesome font files
     $fontDir = $this->webPath . DIRECTORY_SEPARATOR . 'packages/font-awesome/fonts';
     $files = scandir($fontDir);
     foreach ($files as $file) {
         $filePath = $fontDir . DIRECTORY_SEPARATOR . $file;
         if (is_file($filePath)) {
             $this->copyToPackage($archive, 'fonts/' . $file, $this->getFilePath($fontDir, $file));
         }
     }
     // Generate JS routes with FOSJSRoutingBundle
     $request = new Request(['callback' => 'fos.Router.setData']);
     $jsRoutes = $this->jsRouterCtrl->indexAction($request, 'js');
     $this->saveToPackage($archive, 'commons/routes.js', $jsRoutes->getContent());
     // Add common translations
     foreach ($translationDomains as $domain) {
         $translationFile = 'js/translations/' . $domain . '/' . $locale . '.js';
         $this->copyToPackage($archive, 'translations/' . $domain . '.js', $this->getFilePath($this->webPath, $translationFile));
     }
 }