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); }
/** * @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()); }