1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
<?php
namespace MediaWiki\Tests\Api;
use MediaWiki\Api\ApiWatchlistTrait;
use MediaWiki\Title\Title;
use MediaWiki\User\Options\UserOptionsLookup;
use MediaWiki\User\User;
use MediaWiki\Watchlist\WatchlistManager;
use MediaWikiUnitTestCase;
use Wikimedia\TestingAccessWrapper;
/**
* @group API
* @covers \MediaWiki\Api\ApiWatchlistTrait
*/
class ApiWatchlistTraitTest extends MediaWikiUnitTestCase {
/**
* @dataProvider provideWatchlistValue
*/
public function testWatchlistValue( $watchlistValue, $setOption, $isBot, $isWatched, $expect ) {
// TODO we don't currently test any of the logic that depends on if the title exists
$user = $this->createMock( User::class );
$user->method( 'isBot' )->willReturn( $isBot );
$userOptionsLookup = $this->createMock( UserOptionsLookup::class );
$userOptionsLookup->method( 'getBoolOption' )->willReturnCallback(
static function ( $unused, $optionName ) use ( $setOption ) {
if ( $optionName === 'watchdefault' ) {
return (bool)$setOption;
}
// watchcreations is not currently tested, by default it is enabled
return true;
}
);
$watchlistManager = $this->createMock( WatchlistManager::class );
$watchlistManager->method( 'isWatchable' )->willReturn( true );
$watchlistManager->method( 'isWatchedIgnoringRights' )->willReturn( $isWatched );
$title = $this->createMock( Title::class );
$title->method( 'exists' )->willReturn( true );
$trait = TestingAccessWrapper::newFromObject( $this->getMockForTrait( ApiWatchlistTrait::class ) );
$trait->watchlistManager = $watchlistManager;
$trait->userOptionsLookup = $userOptionsLookup;
$watch = $trait->getWatchlistValue( $watchlistValue, $title, $user, 'watchdefault' );
$this->assertEquals( $expect, $watch );
}
public static function provideWatchlistValue() {
return [
'watch option on unwatched page' => [ 'watch', null, false, false, true ],
'watch option on watched page' => [ 'watch', null, false, true, true ],
'unwatch option on unwatched page' => [ 'unwatch', null, false, false, false ],
'unwatch option on watched page' => [ 'unwatch', null, false, true, false ],
'preferences set to true on unwatched page' => [ 'preferences', true, false, false, true ],
'preferences set to false on unwatched page' => [ 'preferences', false, false, false, false ],
'preferences set to true on unwatched page (bot group)' => [ 'preferences', true, true, false, false ],
'preferences set to true on watched page (bot group)' => [ 'preferences', true, true, true, true ],
'preferences set to false on unwatched page (bot group)' => [ 'preferences', false, true, false, false ],
'preferences set to false on watched page (bot group)' => [ 'preferences', false, true, true, true ],
'nochange option on watched page' => [ 'nochange', null, false, true, true ],
'nochange option on unwatched page' => [ 'nochange', null, false, false, false ],
];
}
}
|