Skip to content

Commit fcc654f

Browse files
testing and CakeResponseFactory improvements
1 parent c675bce commit fcc654f

File tree

3 files changed

+30
-25
lines changed

3 files changed

+30
-25
lines changed

composer.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
}
1212
],
1313
"require": {
14-
"cakephp/cakephp": "^3.0|^4.0",
15-
"league/glide": "^1.0"
14+
"cakephp/cakephp": "^3.4|^4.0",
15+
"league/glide": "^1.0",
16+
"laminas/laminas-diactoros": "^1.4.0"
1617
},
1718
"require-dev": {
18-
"phpunit/phpunit": "^8.0"
19+
"phpunit/phpunit": ">=5.6.3|^8.0"
1920
},
2021
"autoload": {
2122
"psr-4": {

src/Responses/CakeResponseFactory.php

+12-15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace League\Glide\Responses;
44

5+
use Cake\Http\Response;
6+
use Laminas\Diactoros\CallbackStream;
57
use League\Flysystem\FilesystemInterface;
68

79
class CakeResponseFactory implements ResponseFactoryInterface
@@ -24,21 +26,16 @@ public function create(FilesystemInterface $cache, $path)
2426
$cacheControl = 'max-age=31536000, public';
2527
$expires = date_create('+1 years')->format('D, d M Y H:i:s').' GMT';
2628

27-
if (class_exists('\Cake\Network\Response')) {
28-
$response = new \Cake\Network\Response();
29-
} else {
30-
$response = new \Cake\Http\Response();
31-
}
32-
$response->type($contentType);
33-
$response->header('Content-Length', $contentLength);
34-
$response->header('Cache-Control', $cacheControl);
35-
$response->header('Expires', $expires);
36-
$response->body(function () use ($stream) {
37-
rewind($stream);
38-
fpassthru($stream);
39-
fclose($stream);
40-
});
29+
$response = new Response();
4130

42-
return $response;
31+
return $response->withType($contentType)
32+
->withLength($contentLength)
33+
->withAddedHeader('Cache-Control', $cacheControl)
34+
->withExpires($expires)
35+
->withBody(new CallbackStream(function () use ($stream) {
36+
rewind($stream);
37+
fpassthru($stream);
38+
fclose($stream);
39+
}));
4340
}
4441
}

tests/Responses/CakeResponseFactoryTest.php

+14-7
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@
44

55
use League\Flysystem\Adapter\Local;
66
use League\Flysystem\Filesystem;
7+
use PHPUnit\Framework\TestCase;
78

8-
class CakeResponseFactoryTest extends \PHPUnit_Framework_TestCase
9+
class CakeResponseFactoryTest extends TestCase
910
{
1011
public function testCreateInstance()
1112
{
13+
$cakeResponseFactory = new CakeResponseFactory();
1214
$this->assertInstanceOf(
1315
'League\Glide\Responses\CakeResponseFactory',
14-
new CakeResponseFactory()
16+
$cakeResponseFactory
1517
);
1618
}
1719

20+
/**
21+
* @throws \League\Flysystem\FileNotFoundException
22+
*/
1823
public function testCreate()
1924
{
2025
$cache = new Filesystem(
@@ -25,10 +30,12 @@ public function testCreate()
2530
/** @var \Cake\Http\Response|\Cake\Network\Response $response */
2631
$response = $factory->create($cache, 'kayaks.jpg');
2732

28-
$this->assertInstanceOf('Cake\Network\Response', $response);
29-
$this->assertEquals('image/jpeg', $response->type());
30-
$this->assertEquals('5175', $response->getHeaderLine('Content-Length'));
31-
$this->assertContains(gmdate('D, d M Y H:i', strtotime('+1 years')), $response->getHeaderLine('Expires'));
32-
$this->assertEquals('max-age=31536000, public', $response->getHeaderLine('Cache-Control'));
33+
$headers = $response->getHeaders();
34+
35+
$this->assertInstanceOf('Cake\Http\Response', $response);
36+
$this->assertEquals('image/jpeg', $headers['Content-Type'][0]);
37+
$this->assertEquals('5175', $headers['Content-Length'][0]);
38+
$this->assertStringContainsString(gmdate('D, j M Y H:i:s', strtotime('+1 years')).' GMT', $headers['Expires'][0]);
39+
$this->assertEquals('max-age=31536000, public', $headers['Cache-Control'][0]);
3340
}
3441
}

0 commit comments

Comments
 (0)