mediawiki-extensions-Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php
2019-10-24 18:37:15 +00:00

135 lines
3.6 KiB
PHP

<?php
use PHPUnit\Framework\TestCase;
/**
* @group Echo
* @covers \EchoSuppressionRowUpdateGenerator
*/
class SuppressionMaintenanceTest extends MediaWikiTestCase {
public static function provider_updateRow() {
$input = [
'event_id' => 2,
'event_type' => 'mention',
'event_variant' => null,
'event_agent_id' => 3,
'event_agent_ip' => null,
'event_page_title' => '',
'event_page_namespace' => 0,
'event_page_extra' => null,
'event_extra' => null,
'event_page_id' => null,
];
return [
[ 'Unrelated row must result in no update', [], $input ],
[
'Page title and namespace for non-existant page must move into event_extra',
[ // expected update
'event_extra' => serialize( [
'page_title' => 'Yabba Dabba Do',
'page_namespace' => NS_MAIN
] ),
],
[ // input row
'event_page_title' => 'Yabba Dabba Do',
'event_page_namespace' => NS_MAIN,
] + $input,
],
[
'Page title and namespace for existing page must be result in update to event_page_id',
[ // expected update
'event_page_id' => 42,
],
[ // input row
'event_page_title' => 'Mount Rushmore',
'event_page_namespace' => NS_MAIN,
] + $input,
self::attachTitleFor( 42, 'Mount Rushmore', NS_MAIN )
],
[
'When updating non-existant page must keep old extra data',
[ // expected update
'event_extra' => serialize( [
'foo' => 'bar',
'page_title' => 'Yabba Dabba Do',
'page_namespace' => NS_MAIN
] ),
],
[ // input row
'event_page_title' => 'Yabba Dabba Do',
'event_page_namespace' => NS_MAIN,
'event_extra' => serialize( [ 'foo' => 'bar' ] ),
] + $input,
],
[
'Must update link-from-title/namespace to link-from-page-id for page-linked events',
[ // expected update
'event_extra' => serialize( [ 'link-from-page-id' => 99 ] ),
],
[ // input row
'event_type' => 'page-linked',
'event_extra' => serialize( [
'link-from-title' => 'Horse',
'link-from-namespace' => NS_USER_TALK
] ),
] + $input,
self::attachTitleFor( 99, 'Horse', NS_USER_TALK )
],
[
'Must perform both generic update and page-linked update at same time',
[ // expected update
'event_extra' => serialize( [ 'link-from-page-id' => 8675309 ] ),
'event_page_id' => 8675309,
],
[ // input row
'event_type' => 'page-linked',
'event_extra' => serialize( [
'link-from-title' => 'Jenny',
'link-from-namespace' => NS_MAIN,
] ),
'event_page_title' => 'Jenny',
'event_page_namespace' => NS_MAIN,
] + $input,
self::attachTitleFor( 8675309, 'Jenny', NS_MAIN ),
],
];
}
protected static function attachTitleFor( $id, $providedText, $providedNamespace ) {
return function (
TestCase $test,
EchoSuppressionRowUpdateGenerator $gen
) use ( $id, $providedText, $providedNamespace ) {
$title = $test->createMock( Title::class );
$title->expects( $test->any() )
->method( 'getArticleId' )
->will( $test->returnValue( $id ) );
$titles = [ $providedNamespace => [ $providedText => $title ] ];
$gen->setNewTitleFromNsAndText( function ( $namespace, $text ) use ( $titles ) {
return $titles[$namespace][$text] ?? Title::makeTitleSafe( $namespace, $text );
} );
};
}
/**
* @dataProvider provider_updateRow
*/
public function testUpdateRow( $message, array $expected, array $input, callable $callable = null ) {
$gen = new EchoSuppressionRowUpdateGenerator;
if ( $callable ) {
call_user_func( $callable, $this, $gen );
}
$update = $gen->update( (object)$input );
$this->assertEquals( $expected, $update, $message );
}
}