mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-11-28 01:30:15 +00:00
713f60aaa5
Use mocks when possible, and add the test to the Database group otherwise. Also rename 2 test files to avoid a PHPUnit deprecation of file name not matching class name. Change-Id: I16b2392daf01f63511c82b4ed0e67a38e35ddbe1
146 lines
3.7 KiB
PHP
146 lines
3.7 KiB
PHP
<?php
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* @group Echo
|
|
* @covers \EchoSuppressionRowUpdateGenerator
|
|
* @group Database
|
|
*/
|
|
class SuppressionMaintenanceTest extends MediaWikiIntegrationTestCase {
|
|
|
|
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-existent 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 static function (
|
|
TestCase $test,
|
|
EchoSuppressionRowUpdateGenerator $gen
|
|
) use ( $id, $providedText, $providedNamespace ) {
|
|
$title = $test->createMock( Title::class );
|
|
$title->expects( $test->any() )
|
|
->method( 'getArticleId' )
|
|
->willReturn( $id );
|
|
|
|
$titles = [ $providedNamespace => [ $providedText => $title ] ];
|
|
|
|
$gen->setNewTitleFromNsAndText( static 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 );
|
|
}
|
|
}
|