-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1477 from jim-parry/testing7/http
Add Response send testing
- Loading branch information
Showing
3 changed files
with
109 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
<?php | ||
namespace CodeIgniter\HTTP; | ||
|
||
use CodeIgniter\HTTP\Response; | ||
use Config\App; | ||
|
||
/** | ||
* This test suite has been created separately from | ||
* TestCaseTest because it messes with output | ||
* buffering from PHPUnit, and the individual | ||
* test cases need to be run as separate processes. | ||
*/ | ||
class ResponseSendTest extends \CIUnitTestCase | ||
{ | ||
|
||
/** | ||
* These need to be run as a separate process, since phpunit | ||
* has already captured the "normal" output, and we will get | ||
* a "Cannot modify headers" message if we try to change | ||
* headers or cookies now. | ||
* | ||
* Furthermore, these tests needs to flush the output buffering | ||
* that might be in progress, and start our own output buffer | ||
* capture. | ||
* | ||
* The tests includes a basic sanity check, to make sure that | ||
* the body we thought would be sent actually was. | ||
*/ | ||
|
||
//-------------------------------------------------------------------- | ||
/** | ||
* @runInSeparateProcess | ||
* @preserveGlobalState disabled | ||
*/ | ||
public function testHeadersMissingDate() | ||
{ | ||
$response = new Response(new App()); | ||
$response->pretend(false); | ||
|
||
$body = 'Hello'; | ||
$response->setBody($body); | ||
|
||
$response->setCookie('foo', 'bar'); | ||
$this->assertTrue($response->hasCookie('foo')); | ||
$this->assertTrue($response->hasCookie('foo', 'bar')); | ||
|
||
// Drop the date header, to make sure it gets put back in | ||
$response->removeHeader('Date'); | ||
|
||
// send it | ||
ob_start(); | ||
$response->send(); | ||
|
||
$buffer = ob_clean(); | ||
if (ob_get_level() > 0) | ||
{ | ||
ob_end_clean(); | ||
} | ||
|
||
// and what actually got sent? | ||
$this->assertHeaderEmitted('Date:'); | ||
} | ||
|
||
//-------------------------------------------------------------------- | ||
/** | ||
* This test does not test that CSP is handled properly - | ||
* it makes sure that sending gives CSP a chance to do its thing. | ||
* | ||
* @runInSeparateProcess | ||
* @preserveGlobalState disabled | ||
*/ | ||
public function testHeadersWithCSP() | ||
{ | ||
$config = new App(); | ||
$config->CSPEnabled = true; | ||
$response = new Response($config); | ||
$response->pretend(false); | ||
|
||
$body = 'Hello'; | ||
$response->setBody($body); | ||
|
||
$response->setCookie('foo', 'bar'); | ||
$this->assertTrue($response->hasCookie('foo')); | ||
$this->assertTrue($response->hasCookie('foo', 'bar')); | ||
|
||
// send it | ||
ob_start(); | ||
$response->send(); | ||
|
||
$buffer = ob_clean(); | ||
if (ob_get_level() > 0) | ||
{ | ||
ob_end_clean(); | ||
} | ||
|
||
// and what actually got sent?; test both ways | ||
$this->assertHeaderEmitted('Content-Security-Policy:'); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters