public function testHeadersSentButActuallyModified()
 {
     $mockStrategy = Mockery::mock(new \Room11\Caching\LastModified\Revalidate(1000, 100));
     $mockStrategy->shouldReceive('getHeaders')->once()->passthru();
     $lastModifiedTime = time() - 1000;
     $headersSet = ['If-Modified-Since' => [gmdate('D, d M Y H:i:s', $lastModifiedTime) . ' UTC']];
     $requestHeaders = new ArrayRequestHeaders($headersSet);
     $cachingFileResponse = new CachingGeneratingFileBodyFactory($requestHeaders, $mockStrategy);
     $isCalled = false;
     $fileGenerator = function () use(&$isCalled) {
         //mock, doesn't need to generate anything.
         $isCalled = true;
         return __FILE__;
     };
     //Data has been modified after the client
     $fileGenerator = new CallableFileGenerator($fileGenerator, time() - 10);
     $filename = "foo.txt";
     $body = $cachingFileResponse->create("text/plain", $filename, $fileGenerator);
     /** @var $body \Room11\HTTP\Body\FileBody */
     $this->assertInstanceOf('Room11\\HTTP\\Body\\FileBody', $body);
     $this->assertEquals(200, $body->getStatusCode());
     $this->assertTrue($isCalled, "File generator wasn't called and should be");
     $headersSet = $body->getHeadersSet();
     $this->assertTrue($headersSet->hasHeaders("Last-modified"));
     $this->checkContentDispositionFilename($body->getHeadersSet(), $filename);
 }
示例#2
0
 /**
  * @param $jsIncludeArray
  * @param $appendLine
  * @param $contentType
  * @param $extension
  * @return \Room11\HTTP\Body
  */
 private function getPackedFiles($jsIncludeArray, $appendLine, $contentType, $extension)
 {
     $finalFilename = $this->filePacker->getFinalFilename($jsIncludeArray, $extension);
     $fn = function () use($jsIncludeArray, $appendLine, $extension, $finalFilename) {
         $this->filePacker->pack($jsIncludeArray, $appendLine, $extension);
         return $finalFilename;
     };
     $fileModifiedTime = @filemtime($finalFilename);
     $fileGenerator = new CallableFileGenerator($fn, $fileModifiedTime);
     $downloadFilename = implode('_', $jsIncludeArray);
     return $this->fileBodyFactory->create($contentType, $downloadFilename, $fileGenerator, $this->filePacker->getHeaders());
 }