3 use MediaWiki\MediaWikiServices
;
6 * @covers ClearUserWatchlistJob
11 * @license GPL-2.0-or-later
14 class ClearUserWatchlistJobTest
extends MediaWikiTestCase
{
16 public function setUp() {
18 self
::$users['ClearUserWatchlistJobTestUser']
19 = new TestUser( 'ClearUserWatchlistJobTestUser' );
21 JobQueueGroup
::destroySingletons();
24 private function getUser() {
25 return self
::$users['ClearUserWatchlistJobTestUser']->getUser();
28 private function runJobs( $jobLimit = 9999 ) {
29 $runJobs = new RunJobs
;
30 $runJobs->loadParamsAndArgs( null, [ 'quiet' => true, 'maxjobs' => $jobLimit ] );
34 private function getWatchedItemStore() {
35 return MediaWikiServices
::getInstance()->getWatchedItemStore();
38 public function testRun() {
39 $user = $this->getUser();
40 $watchedItemStore = $this->getWatchedItemStore();
42 $watchedItemStore->addWatch( $user, new TitleValue( 0, 'A' ) );
43 $watchedItemStore->addWatch( $user, new TitleValue( 1, 'A' ) );
44 $watchedItemStore->addWatch( $user, new TitleValue( 0, 'B' ) );
45 $watchedItemStore->addWatch( $user, new TitleValue( 1, 'B' ) );
47 $maxId = $watchedItemStore->getMaxId();
49 $watchedItemStore->addWatch( $user, new TitleValue( 0, 'C' ) );
50 $watchedItemStore->addWatch( $user, new TitleValue( 1, 'C' ) );
52 $this->setMwGlobals( 'wgUpdateRowsPerQuery', 2 );
54 JobQueueGroup
::singleton()->push(
55 new ClearUserWatchlistJob( [
56 'userId' => $user->getId(), 'maxWatchlistId' => $maxId,
60 $this->assertEquals( 1, JobQueueGroup
::singleton()->getQueueSizes()['clearUserWatchlist'] );
61 $this->assertEquals( 6, $watchedItemStore->countWatchedItems( $user ) );
63 $this->assertEquals( 1, JobQueueGroup
::singleton()->getQueueSizes()['clearUserWatchlist'] );
64 $this->assertEquals( 4, $watchedItemStore->countWatchedItems( $user ) );
66 $this->assertEquals( 1, JobQueueGroup
::singleton()->getQueueSizes()['clearUserWatchlist'] );
67 $this->assertEquals( 2, $watchedItemStore->countWatchedItems( $user ) );
69 $this->assertSame( 0, JobQueueGroup
::singleton()->getQueueSizes()['clearUserWatchlist'] );
70 $this->assertEquals( 2, $watchedItemStore->countWatchedItems( $user ) );
72 $this->assertTrue( $watchedItemStore->isWatched( $user, new TitleValue( 0, 'C' ) ) );
73 $this->assertTrue( $watchedItemStore->isWatched( $user, new TitleValue( 1, 'C' ) ) );