Allow wildcard Accepts

This commit is contained in:
Toby Zerner 2019-11-16 10:13:11 +10:30
parent 57ffa867c8
commit ce085c32f3
2 changed files with 20 additions and 4 deletions

View File

@ -110,11 +110,17 @@ final class JsonApi implements RequestHandlerInterface
{ {
$header = $request->getHeaderLine('Accept'); $header = $request->getHeaderLine('Accept');
if (empty($header) || $header === '*/*') { if (empty($header)) {
return; return;
} }
if ((new MediaTypes($header))->containsExactly(self::CONTENT_TYPE)) { $mediaTypes = new MediaTypes($header);
if ($mediaTypes->containsExactly('*/*')) {
return;
}
if ($mediaTypes->containsExactly(self::CONTENT_TYPE)) {
return; return;
} }

View File

@ -48,7 +48,7 @@ class ContentNegotiationTest extends AbstractTestCase
); );
} }
public function test_error_when_valid_request_content_type_has_parameters() public function test_error_when_request_content_type_has_parameters()
{ {
$request = $this->buildRequest('PATCH', '/users/1') $request = $this->buildRequest('PATCH', '/users/1')
->withHeader('Content-Type', 'application/vnd.api+json;profile="http://example.com/last-modified"'); ->withHeader('Content-Type', 'application/vnd.api+json;profile="http://example.com/last-modified"');
@ -58,7 +58,7 @@ class ContentNegotiationTest extends AbstractTestCase
$this->api->handle($request); $this->api->handle($request);
} }
public function test_error_when_all_valid_accepts_have_parameters() public function test_error_when_all_accepts_have_parameters()
{ {
$request = $this->buildRequest('GET', '/users/1') $request = $this->buildRequest('GET', '/users/1')
->withHeader('Accept', 'application/vnd.api+json;profile="http://example.com/last-modified", application/vnd.api+json;profile="http://example.com/versioning"'); ->withHeader('Accept', 'application/vnd.api+json;profile="http://example.com/last-modified", application/vnd.api+json;profile="http://example.com/versioning"');
@ -77,4 +77,14 @@ class ContentNegotiationTest extends AbstractTestCase
$this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(200, $response->getStatusCode());
} }
public function test_success_when_accepts_wildcard()
{
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
->withHeader('Accept', '*/*')
);
$this->assertEquals(200, $response->getStatusCode());
}
} }