Merge pull request #555 from BelleNottelling/fix/head-requests

Also register the HEAD method alongside GET
pull/560/head
n0nag0n 10 months ago committed by GitHub
commit d3782393dd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -56,7 +56,7 @@
},
"scripts": {
"test": "phpunit",
"test-coverage": "rm clover.xml && XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-html=coverage --coverage-clover=clover.xml && vendor/bin/coverage-check clover.xml 100",
"test-coverage": "rm -f clover.xml && XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-html=coverage --coverage-clover=clover.xml && vendor/bin/coverage-check clover.xml 100",
"test-server": "echo \"Running Test Server\" && php -S localhost:8000 -t tests/server/",
"test-server-v2": "echo \"Running Test Server\" && php -S localhost:8000 -t tests/server-v2/",
"test-coverage:win": "del clover.xml && phpunit --coverage-html=coverage --coverage-clover=clover.xml && coverage-check clover.xml 100",

@ -533,6 +533,11 @@ class Engine
$dispatched = false;
}
// HEAD requests should be identical to GET requests but have no body
if ($request->method === 'HEAD') {
$response->clearBody();
}
if ($failed_middleware_check === true) {
$this->halt(403, 'Forbidden', empty(getenv('PHPUNIT_TEST')));
} elseif ($dispatched === false) {

@ -105,6 +105,11 @@ class Router
[$method, $url] = explode(' ', $url, 2);
$url = trim($url);
$methods = explode('|', $method);
// Add head requests to get methods, should they come in as a get request
if (in_array('GET', $methods, true) === true && in_array('HEAD', $methods, true) === false) {
$methods[] = 'HEAD';
}
}
// And this finishes it off.

@ -263,6 +263,20 @@ class EngineTest extends TestCase
$this->assertEquals('/someRoute', $routes[0]->pattern);
}
public function testHeadRoute()
{
$engine = new Engine();
$engine->route('GET /someRoute', function () {
echo 'i ran';
}, true);
$engine->request()->method = 'HEAD';
$engine->request()->url = '/someRoute';
$engine->start();
// No body should be sent
$this->expectOutputString('');
}
public function testHalt()
{
$engine = new class extends Engine {

@ -81,6 +81,10 @@ class RouterTest extends TestCase
$dispatched = false;
}
if ($this->request->method === 'HEAD') {
ob_clean();
}
if (!$dispatched) {
echo '404';
}
@ -122,6 +126,15 @@ class RouterTest extends TestCase
$this->check('OK');
}
public function testHeadRouteShortcut()
{
$route = $this->router->get('/path', [$this, 'ok']);
$this->assertEquals(['GET', 'HEAD'], $route->methods);
$this->request->url = '/path';
$this->request->method = 'HEAD';
$this->check('');
}
// POST route
public function testPostRoute()
{

Loading…
Cancel
Save