2017-01-07 04:41:31 +00:00
|
|
|
<?php
|
|
|
|
|
|
2017-03-18 23:06:09 +00:00
|
|
|
/**
|
2018-03-29 19:53:10 +00:00
|
|
|
* @group medium
|
2017-03-18 23:06:09 +00:00
|
|
|
* @group Database
|
2018-03-20 16:14:34 +00:00
|
|
|
* @covers FormattedRCFeed
|
|
|
|
|
* @covers RecentChange
|
|
|
|
|
* @covers JSONRCFeedFormatter
|
|
|
|
|
* @covers MachineReadableRCFeedFormatter
|
|
|
|
|
* @covers RCFeed
|
2017-03-18 23:06:09 +00:00
|
|
|
*/
|
2020-06-30 15:09:24 +00:00
|
|
|
class RCFeedIntegrationTest extends MediaWikiIntegrationTestCase {
|
2021-07-22 03:11:47 +00:00
|
|
|
protected function setUp(): void {
|
2017-01-07 04:41:31 +00:00
|
|
|
parent::setUp();
|
|
|
|
|
$this->setMwGlobals( [
|
|
|
|
|
'wgCanonicalServer' => 'https://example.org',
|
|
|
|
|
'wgServerName' => 'example.org',
|
|
|
|
|
'wgScriptPath' => '/w',
|
|
|
|
|
'wgDBname' => 'example',
|
2019-08-12 17:43:21 +00:00
|
|
|
'wgDBprefix' => $this->dbPrefix(),
|
2017-01-07 04:41:31 +00:00
|
|
|
'wgRCFeeds' => [],
|
|
|
|
|
'wgRCEngines' => [],
|
|
|
|
|
] );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testNotify() {
|
2018-01-13 00:02:09 +00:00
|
|
|
$feed = $this->getMockBuilder( RCFeedEngine::class )
|
|
|
|
|
->setConstructorArgs( [ [ 'formatter' => JSONRCFeedFormatter::class ] ] )
|
2021-03-20 15:18:58 +00:00
|
|
|
->onlyMethods( [ 'send' ] )
|
2017-01-07 04:41:31 +00:00
|
|
|
->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',
|
2019-08-12 17:43:21 +00:00
|
|
|
'wiki' => 'example-' . $this->dbPrefix(),
|
2017-01-07 04:41:31 +00:00
|
|
|
] ),
|
|
|
|
|
$line
|
|
|
|
|
);
|
|
|
|
|
return true;
|
|
|
|
|
} ) );
|
|
|
|
|
|
|
|
|
|
$this->setMwGlobals( [
|
|
|
|
|
'wgRCFeeds' => [
|
|
|
|
|
'myfeed' => [
|
|
|
|
|
'uri' => 'test://localhost:1234',
|
2018-01-13 00:02:09 +00:00
|
|
|
'formatter' => JSONRCFeedFormatter::class,
|
2017-01-07 04:41:31 +00:00
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
'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();
|
|
|
|
|
}
|
|
|
|
|
}
|