X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FMediaWikiTest.php;h=7d7e63767347eef26c5dc8f000d3abe492f17f70;hb=03608896716851972cc22d28d432d233be10edba;hp=a8d1e3395017ec9260791105dac74b7a16a3ba7e;hpb=37751ee23e7b7019307eafe36f18c8450bf2e420;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/MediaWikiTest.php b/tests/phpunit/includes/MediaWikiTest.php index a8d1e33950..7d7e637673 100644 --- a/tests/phpunit/includes/MediaWikiTest.php +++ b/tests/phpunit/includes/MediaWikiTest.php @@ -154,4 +154,53 @@ class MediaWikiTest extends MediaWikiTestCase { $context->getOutput()->getRedirect() ); } + + /** + * Test a post-send job can not set cookies (T191537). + */ + public function testPostSendJobDoesNotSetCookie() { + // Prevent updates from running + $this->setMwGlobals( 'wgCommandLineMode', false ); + + $response = new WebResponse; + + // A job that attempts to set a cookie + $jobHasRun = false; + DeferredUpdates::addCallableUpdate( function () use ( $response, &$jobHasRun ) { + $jobHasRun = true; + $response->setCookie( 'JobCookie', 'yes' ); + $response->header( 'Foo: baz' ); + } ); + + $hookWasRun = false; + $this->setTemporaryHook( 'WebResponseSetCookie', function () use ( &$hookWasRun ) { + $hookWasRun = true; + return true; + } ); + + $logger = new TestLogger(); + $logger->setCollect( true ); + $this->setLogger( 'cookie', $logger ); + $this->setLogger( 'header', $logger ); + + $mw = new MediaWiki(); + $mw->doPostOutputShutdown(); + // restInPeace() might have been registered to a callback of + // register_postsend_function() and thus can not be triggered from + // PHPUnit. + if ( $jobHasRun === false ) { + $mw->restInPeace(); + } + + $this->assertTrue( $jobHasRun, 'post-send job has run' ); + $this->assertFalse( $hookWasRun, + 'post-send job must not trigger WebResponseSetCookie hook' ); + $this->assertEquals( + [ + [ 'info', 'ignored post-send cookie {cookie}' ], + [ 'info', 'ignored post-send header {header}' ], + ], + $logger->getBuffer() + ); + } }