From: Timo Tijhof Date: Sat, 7 Jan 2017 04:41:31 +0000 (-0800) Subject: rcfeed: Add basic PHPUnit integration test X-Git-Tag: 1.31.0-rc.0~4219^2 X-Git-Url: http://git.cyclocoop.org/%22%20.%20%20%20%24self2%20.%20%20%20%22&var_mode_affiche=boucle?a=commitdiff_plain;h=717f4b0dfff0f36736581e64b320e24b1eed8bd3;p=lhc%2Fweb%2Fwiklou.git rcfeed: Add basic PHPUnit integration test Change-Id: Ifb5ddd4bda6cd1be050da7a5419ebe90f5ecf60f --- diff --git a/includes/changes/RecentChange.php b/includes/changes/RecentChange.php index 81f64a8176..13a5fc7b80 100644 --- a/includes/changes/RecentChange.php +++ b/includes/changes/RecentChange.php @@ -451,6 +451,9 @@ class RecentChange { throw new MWException( __FUNCTION__ . ": Unknown stream logger URI scheme: $scheme" ); } + if ( defined( 'MW_PHPUNIT_TEST' ) && is_object( $wgRCEngines[$scheme] ) ) { + return $wgRCEngines[$scheme]; + } return new $wgRCEngines[$scheme]; } diff --git a/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php b/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php new file mode 100644 index 0000000000..97ea23cd8a --- /dev/null +++ b/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php @@ -0,0 +1,96 @@ +setMwGlobals( [ + 'wgCanonicalServer' => 'https://example.org', + 'wgServerName' => 'example.org', + 'wgScriptPath' => '/w', + 'wgDBname' => 'example', + 'wgDBprefix' => '', + 'wgRCFeeds' => [], + 'wgRCEngines' => [], + ] ); + } + + /** + * @covers RecentChange::notifyRCFeeds + * @covers RecentChange::getEngine + * @covers RCFeedEngine + * @covers JSONRCFeedFormatter::formatArray + * @covers MachineReadableRCFeedFormatter::getLine + */ + public function testNotify() { + $feed = $this->getMockBuilder( 'RCFeedEngine' ) + ->setConstructorArgs( [ [ 'formatter' => 'JSONRCFeedFormatter' ] ] ) + ->setMethods( [ 'send' ] ) + ->getMock(); + + $feed->method( 'send' ) + ->willReturn( true ); + + $feed->expects( $this->once() ) + ->method( 'send' ) + ->with( $this->anything(), $this->callback( function ( $line ) { + $this->assertJsonStringEqualsJsonString( + json_encode( [ + 'id' => null, + 'type' => 'log', + 'namespace' => 0, + 'title' => 'Example', + 'comment' => '', + 'timestamp' => 1301644800, + 'user' => 'UTSysop', + 'bot' => false, + 'log_id' => 0, + 'log_type' => 'move', + 'log_action' => 'move', + 'log_params' => [ + 'color' => 'green', + 'nr' => 42, + 'pet' => 'cat', + ], + 'log_action_comment' => '', + 'server_url' => 'https://example.org', + 'server_name' => 'example.org', + 'server_script_path' => '/w', + 'wiki' => 'example', + ] ), + $line + ); + return true; + } ) ); + + $this->setMwGlobals( [ + 'wgRCFeeds' => [ + 'myfeed' => [ + 'uri' => 'test://localhost:1234', + 'formatter' => 'JSONRCFeedFormatter', + ], + ], + 'wgRCEngines' => [ + 'test' => $feed, + ], + ] ); + $logpage = SpecialPage::getTitleFor( 'Log', 'move' ); + $user = $this->getTestSysop()->getUser(); + $rc = RecentChange::newLogEntry( + '20110401080000', + $logpage, // &$title + $user, // &$user + '', // $actionComment + '127.0.0.1', // $ip + 'move', // $type + 'move', // $action + Title::makeTitle( 0, 'Example' ), // $target + '', // $logComment + LogEntryBase::makeParamBlob( [ + '4::color' => 'green', + '5:number:nr' => 42, + 'pet' => 'cat', + ] ) + ); + $rc->notifyRCFeeds(); + } +}