mediawiki-extensions-Echo/tests/phpunit/maintenance/SupressionMaintenanceTest.php
Thiemo Kreuz c36d2bd0e8 Prefer the …::class feature over hard-coded strings in all tests
The codebase already used the …::class feature in many places. So this
is more for consistency than anything. The …::class feature makes it
much easier to do refactoring in the future.

Note this patch is exclusively touching tests. That should make it
relatively easy to review this. As long as the CI is fine with it, it
should be ok. Right? ;-)

Change-Id: I4d2adee76b4adbc83b2061161fd4e863ba833fcb
2019-02-19 14:35:14 +00:00

134 lines
3.6 KiB
PHP

<?php
/**
* @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 ( $test, $gen ) use ( $id, $providedText, $providedNamespace ) {
$title = $test->getMock( Title::class );
$title->expects( $test->any() )
->method( 'getArticleId' )
->will( $test->returnValue( $id ) );
$titles = [ $providedNamespace => [ $providedText => $title ] ];
$gen->setNewTitleFromNsAndText( function ( $namespace, $text ) use ( $titles ) {
if ( isset( $titles[$namespace][$text] ) ) {
return $titles[$namespace][$text];
}
return Title::makeTitleSafe( $namespace, $text );
} );
};
}
/**
* @dataProvider provider_updateRow
*/
public function testUpdateRow( $message, $expected, $input, $callable = null ) {
$gen = new EchoSuppressionRowUpdateGenerator;
if ( $callable ) {
call_user_func( $callable, $this, $gen );
}
$update = $gen->update( (object)$input );
$this->assertEquals( $expected, $update, $message );
}
}