Skip to content

Commit acab3c2

Browse files
committed
refactor: make accept header content type preserving more robust
1 parent 0cb4fb4 commit acab3c2

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/Http/Middleware/EnforceExpectsJson.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Orion\Http\Middleware;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Support\Str;
67

78
class EnforceExpectsJson
89
{
@@ -13,8 +14,8 @@ class EnforceExpectsJson
1314
*/
1415
public function handle(Request $request, $next)
1516
{
16-
if (strpos($request->header('Accept'), 'application/json') !== 0) {
17-
$request->headers->add(['Accept' => 'application/json,' . $request->header('Accept')]);
17+
if (!Str::contains($request->header('Accept'), 'application/json')) {
18+
$request->headers->set('Accept', 'application/json, ' . $request->header('Accept'));
1819
}
1920

2021
return $next($request);

tests/Unit/Http/Middleware/EnforceExpectsJsonTest.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
class EnforceExpectsJsonTest extends TestCase
1010
{
1111
/** @test */
12-
public function adding_accept_header()
12+
public function adding_application_json_to_accept_header(): void
1313
{
1414
$request = Request::create('/api/posts');
1515

@@ -20,4 +20,18 @@ function ($processedRequest) {
2020
}
2121
);
2222
}
23+
24+
/** @test */
25+
public function preserving_existing_accept_header_content_types(): void
26+
{
27+
$request = Request::create('/api/posts');
28+
$request->headers->set('Accept', 'application/xml');
29+
30+
(new EnforceExpectsJson())->handle(
31+
$request,
32+
function ($processedRequest) {
33+
$this->assertSame('application/json, application/xml', $processedRequest->header('Accept'));
34+
}
35+
);
36+
}
2337
}

0 commit comments

Comments
 (0)