Skip to content

Commit 10a7d61

Browse files
authored
Merge pull request #18 from CorpusPHP/fix/ReplaceDefaultHeaders
ResponseSender - Replace default headers
2 parents 3a6cf96 + 29979a3 commit 10a7d61

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

src/ResponseSender.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,17 @@ public function send( ResponseInterface $response ) : void {
6262
http_response_code($response->getStatusCode());
6363
}
6464

65+
$sentHeaders = [];
6566
foreach( $response->getHeaders() as $name => $values ) {
6667
foreach( $values as $value ) {
68+
$lower = strtolower($name);
69+
6770
header(
6871
sprintf("%s: %s", $name, $value),
69-
false
72+
!isset($sentHeaders[$lower])
7073
);
74+
75+
$sentHeaders[$lower] = true;
7176
}
7277
}
7378

test/ResponseSenderTest.php

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,37 @@ public function testSend( bool $fullStmt ) : void {
2323
$version = '1.1'
2424
);
2525

26+
$response = $response->withHeader('X-Test', 'test')
27+
->withAddedHeader('X-Test', 'test2')
28+
->withAddedHeader('X-Test', 'test3');
29+
2630
$sent_headers = [];
2731
$header = $this->getFunctionMock(__NAMESPACE__, 'header');
2832

29-
$header->expects($this->any())->willReturnCallback(function ( $header, $replace ) use ( &$sent_headers ) {
30-
return $sent_headers[] = $header;
31-
});
33+
$header->expects($this->any())
34+
->willReturnCallback(function ( $header, $replace ) use ( &$sent_headers ) {
35+
return $sent_headers[] = [ $header, $replace ];
36+
});
3237

3338
$sender = new ResponseSender($fullStmt);
3439

3540
ob_start();
3641
$sender->send($response);
3742
$output = ob_get_clean();
3843

44+
$expectedHeaders = [
45+
[ 'Content-Type: text/plain', true ],
46+
[ 'X-Test: test', true ],
47+
[ 'X-Test: test2', false ],
48+
[ 'X-Test: test3', false ],
49+
];
50+
3951
if( $fullStmt ) {
40-
$this->assertSame([
41-
"HTTP/$version $status OK",
42-
"Content-Type: text/plain",
43-
], $sent_headers);
44-
} else {
45-
$this->assertSame([
46-
"Content-Type: text/plain",
47-
], $sent_headers);
52+
array_unshift($expectedHeaders, ["HTTP/$version $status OK", true]);
4853
}
4954

55+
$this->assertSame($expectedHeaders, $sent_headers);
56+
5057
$this->assertSame($body, $output);
5158
}
5259

0 commit comments

Comments
 (0)