mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Fix HTTPTest
This commit is contained in:
parent
e93289326e
commit
59ba208df0
@ -623,7 +623,7 @@ class HTTPCacheControlMiddleware implements HTTPMiddleware, Resettable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate and add the `Cache-Control` header to a response object
|
* Generate all headers to add to this object
|
||||||
*
|
*
|
||||||
* @param HTTPResponse $response
|
* @param HTTPResponse $response
|
||||||
*
|
*
|
||||||
@ -633,8 +633,10 @@ class HTTPCacheControlMiddleware implements HTTPMiddleware, Resettable
|
|||||||
{
|
{
|
||||||
$headers = $this->generateHeadersFor($response);
|
$headers = $this->generateHeadersFor($response);
|
||||||
foreach ($headers as $name => $value) {
|
foreach ($headers as $name => $value) {
|
||||||
|
if (!$response->getHeader($name)) {
|
||||||
$response->addHeader($name, $value);
|
$response->addHeader($name, $value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,14 +2,13 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Control\Tests;
|
namespace SilverStripe\Control\Tests;
|
||||||
|
|
||||||
use PHPUnit_Framework_Error_Warning;
|
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Control\HTTP;
|
use SilverStripe\Control\HTTP;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
use SilverStripe\Control\HTTPRequest;
|
||||||
use SilverStripe\Control\HTTPResponse;
|
use SilverStripe\Control\HTTPResponse;
|
||||||
use SilverStripe\Control\Middleware\HTTPCacheControlMiddleware;
|
use SilverStripe\Control\Middleware\HTTPCacheControlMiddleware;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Control\Session;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,7 +35,7 @@ class HTTPTest extends FunctionalTest
|
|||||||
HTTPCacheControlMiddleware::singleton()->publicCache();
|
HTTPCacheControlMiddleware::singleton()->publicCache();
|
||||||
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
||||||
|
|
||||||
HTTP::add_cache_headers($response);
|
$this->addCacheHeaders($response);
|
||||||
$this->assertNotEmpty($response->getHeader('Cache-Control'));
|
$this->assertNotEmpty($response->getHeader('Cache-Control'));
|
||||||
|
|
||||||
// Ensure cache headers are set correctly when disabled via config (e.g. when dev)
|
// Ensure cache headers are set correctly when disabled via config (e.g. when dev)
|
||||||
@ -47,7 +46,7 @@ class HTTPTest extends FunctionalTest
|
|||||||
HTTPCacheControlMiddleware::singleton()->publicCache();
|
HTTPCacheControlMiddleware::singleton()->publicCache();
|
||||||
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
||||||
$response = new HTTPResponse($body, 200);
|
$response = new HTTPResponse($body, 200);
|
||||||
HTTP::add_cache_headers($response);
|
$this->addCacheHeaders($response);
|
||||||
$this->assertContains('no-cache', $response->getHeader('Cache-Control'));
|
$this->assertContains('no-cache', $response->getHeader('Cache-Control'));
|
||||||
$this->assertContains('no-store', $response->getHeader('Cache-Control'));
|
$this->assertContains('no-store', $response->getHeader('Cache-Control'));
|
||||||
$this->assertContains('must-revalidate', $response->getHeader('Cache-Control'));
|
$this->assertContains('must-revalidate', $response->getHeader('Cache-Control'));
|
||||||
@ -60,7 +59,7 @@ class HTTPTest extends FunctionalTest
|
|||||||
HTTPCacheControlMiddleware::singleton()->publicCache();
|
HTTPCacheControlMiddleware::singleton()->publicCache();
|
||||||
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
||||||
$response = new HTTPResponse($body, 200);
|
$response = new HTTPResponse($body, 200);
|
||||||
HTTP::add_cache_headers($response);
|
$this->addCacheHeaders($response);
|
||||||
$this->assertContains('max-age=30', $response->getHeader('Cache-Control'));
|
$this->assertContains('max-age=30', $response->getHeader('Cache-Control'));
|
||||||
$this->assertNotContains('max-age=0', $response->getHeader('Cache-Control'));
|
$this->assertNotContains('max-age=0', $response->getHeader('Cache-Control'));
|
||||||
|
|
||||||
@ -70,45 +69,45 @@ class HTTPTest extends FunctionalTest
|
|||||||
'Pragma' => 'no-cache',
|
'Pragma' => 'no-cache',
|
||||||
'Cache-Control' => 'max-age=0, no-cache, no-store',
|
'Cache-Control' => 'max-age=0, no-cache, no-store',
|
||||||
);
|
);
|
||||||
|
foreach ($headers as $header => $value) {
|
||||||
|
$response->addHeader($header, $value);
|
||||||
|
}
|
||||||
HTTPCacheControlMiddleware::reset();
|
HTTPCacheControlMiddleware::reset();
|
||||||
HTTPCacheControlMiddleware::singleton()->publicCache();
|
HTTPCacheControlMiddleware::singleton()->publicCache();
|
||||||
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
||||||
$response = new HTTPResponse($body, 200);
|
$this->addCacheHeaders($response);
|
||||||
foreach ($headers as $name => $value) {
|
foreach ($headers as $header => $value) {
|
||||||
$response->addHeader($name, $value);
|
$this->assertEquals($value, $response->getHeader($header));
|
||||||
}
|
}
|
||||||
// Expect a warning if the header is already set
|
|
||||||
$this->expectException(PHPUnit_Framework_Error_Warning::class);
|
|
||||||
$this->expectExceptionMessage(
|
|
||||||
'Cache-Control header has already been set. '
|
|
||||||
. 'Please use HTTPCacheControlMiddleware API to set caching options instead.'
|
|
||||||
);
|
|
||||||
|
|
||||||
HTTP::add_cache_headers($response);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testConfigVary()
|
public function testConfigVary()
|
||||||
{
|
{
|
||||||
$body = "<html><head></head><body><h1>Mysite</h1></body></html>";
|
$body = "<html><head></head><body><h1>Mysite</h1></body></html>";
|
||||||
$response = new HTTPResponse($body, 200);
|
$response = new HTTPResponse($body, 200);
|
||||||
HTTPCacheControlMiddleware::singleton()->setMaxAge(30);
|
HTTPCacheControlMiddleware::singleton()
|
||||||
HTTP::add_cache_headers($response);
|
->setMaxAge(30)
|
||||||
|
->setVary('X-Requested-With, X-Forwarded-Protocol');
|
||||||
|
$this->addCacheHeaders($response);
|
||||||
|
|
||||||
|
// Vary set properly
|
||||||
$v = $response->getHeader('Vary');
|
$v = $response->getHeader('Vary');
|
||||||
$this->assertNotEmpty($v);
|
|
||||||
|
|
||||||
$this->assertContains("X-Forwarded-Protocol", $v);
|
$this->assertContains("X-Forwarded-Protocol", $v);
|
||||||
$this->assertContains("X-Requested-With", $v);
|
$this->assertContains("X-Requested-With", $v);
|
||||||
$this->assertNotContains("Cookie", $v);
|
$this->assertNotContains("Cookie", $v);
|
||||||
$this->assertNotContains("User-Agent", $v);
|
$this->assertNotContains("User-Agent", $v);
|
||||||
$this->assertNotContains("Accept", $v);
|
$this->assertNotContains("Accept", $v);
|
||||||
|
|
||||||
HTTP::config()->update('vary', '');
|
// No vary
|
||||||
|
HTTPCacheControlMiddleware::singleton()
|
||||||
|
->setMaxAge(30)
|
||||||
|
->setVary(null);
|
||||||
HTTPCacheControlMiddleware::reset();
|
HTTPCacheControlMiddleware::reset();
|
||||||
|
HTTPCacheControlMiddleware::config()
|
||||||
|
->set('defaultVary', []);
|
||||||
|
|
||||||
$response = new HTTPResponse($body, 200);
|
$response = new HTTPResponse($body, 200);
|
||||||
HTTP::add_cache_headers($response);
|
$this->addCacheHeaders($response);
|
||||||
|
|
||||||
$v = $response->getHeader('Vary');
|
$v = $response->getHeader('Vary');
|
||||||
$this->assertEmpty($v);
|
$this->assertEmpty($v);
|
||||||
}
|
}
|
||||||
@ -395,4 +394,23 @@ class HTTPTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process cache headers on a response
|
||||||
|
*
|
||||||
|
* @param HTTPResponse $response
|
||||||
|
*/
|
||||||
|
protected function addCacheHeaders(HTTPResponse $response)
|
||||||
|
{
|
||||||
|
// Mock request
|
||||||
|
$session = new Session([]);
|
||||||
|
$request = new HTTPRequest('GET', '/');
|
||||||
|
$request->setSession($session);
|
||||||
|
|
||||||
|
// Run middleware
|
||||||
|
HTTPCacheControlMiddleware::singleton()
|
||||||
|
->process($request, function (HTTPRequest $request) use ($response) {
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user