2 use MediaWiki\MediaWikiServices
;
11 class WatchedItemIntegrationTest
extends MediaWikiTestCase
{
13 public function setUp() {
15 self
::$users['WatchedItemIntegrationTestUser']
16 = new TestUser( 'WatchedItemIntegrationTestUser' );
18 $this->hideDeprecated( 'WatchedItem::fromUserTitle' );
19 $this->hideDeprecated( 'WatchedItem::addWatch' );
20 $this->hideDeprecated( 'WatchedItem::removeWatch' );
21 $this->hideDeprecated( 'WatchedItem::isWatched' );
22 $this->hideDeprecated( 'WatchedItem::resetNotificationTimestamp' );
23 $this->hideDeprecated( 'WatchedItem::duplicateEntries' );
24 $this->hideDeprecated( 'WatchedItem::batchAddWatch' );
27 private function getUser() {
28 return self
::$users['WatchedItemIntegrationTestUser']->getUser();
31 public function testWatchAndUnWatchItem() {
33 $user = $this->getUser();
34 $title = Title
::newFromText( 'WatchedItemIntegrationTestPage' );
35 // Cleanup after previous tests
36 WatchedItem
::fromUserTitle( $user, $title )->removeWatch();
39 WatchedItem
::fromUserTitle( $user, $title )->isWatched(),
40 'Page should not initially be watched'
42 WatchedItem
::fromUserTitle( $user, $title )->addWatch();
44 WatchedItem
::fromUserTitle( $user, $title )->isWatched(),
45 'Page should be watched'
47 WatchedItem
::fromUserTitle( $user, $title )->removeWatch();
49 WatchedItem
::fromUserTitle( $user, $title )->isWatched(),
50 'Page should be unwatched'
54 public function testUpdateAndResetNotificationTimestamp() {
55 $user = $this->getUser();
56 $otherUser = ( new TestUser( 'WatchedItemIntegrationTestUser_otherUser' ) )->getUser();
57 $title = Title
::newFromText( 'WatchedItemIntegrationTestPage' );
58 WatchedItem
::fromUserTitle( $user, $title )->addWatch();
59 $this->assertNull( WatchedItem
::fromUserTitle( $user, $title )->getNotificationTimestamp() );
61 EmailNotification
::updateWatchlistTimestamp( $otherUser, $title, '20150202010101' );
64 WatchedItem
::fromUserTitle( $user, $title )->getNotificationTimestamp()
67 MediaWikiServices
::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
70 $this->assertNull( WatchedItem
::fromUserTitle( $user, $title )->getNotificationTimestamp() );
73 public function testDuplicateAllAssociatedEntries() {
74 $user = $this->getUser();
75 $titleOld = Title
::newFromText( 'WatchedItemIntegrationTestPageOld' );
76 $titleNew = Title
::newFromText( 'WatchedItemIntegrationTestPageNew' );
77 WatchedItem
::fromUserTitle( $user, $titleOld->getSubjectPage() )->addWatch();
78 WatchedItem
::fromUserTitle( $user, $titleOld->getTalkPage() )->addWatch();
79 // Cleanup after previous tests
80 WatchedItem
::fromUserTitle( $user, $titleNew->getSubjectPage() )->removeWatch();
81 WatchedItem
::fromUserTitle( $user, $titleNew->getTalkPage() )->removeWatch();
83 WatchedItem
::duplicateEntries( $titleOld, $titleNew );
86 WatchedItem
::fromUserTitle( $user, $titleOld->getSubjectPage() )->isWatched()
89 WatchedItem
::fromUserTitle( $user, $titleOld->getTalkPage() )->isWatched()
92 WatchedItem
::fromUserTitle( $user, $titleNew->getSubjectPage() )->isWatched()
95 WatchedItem
::fromUserTitle( $user, $titleNew->getTalkPage() )->isWatched()
99 public function testIsWatched_falseOnNotAllowed() {
100 $user = $this->getUser();
101 $title = Title
::newFromText( 'WatchedItemIntegrationTestPage' );
102 WatchedItem
::fromUserTitle( $user, $title )->addWatch();
104 $this->assertTrue( WatchedItem
::fromUserTitle( $user, $title )->isWatched() );
106 $this->assertFalse( WatchedItem
::fromUserTitle( $user, $title )->isWatched() );
109 public function testGetNotificationTimestamp_falseOnNotAllowed() {
110 $user = $this->getUser();
111 $title = Title
::newFromText( 'WatchedItemIntegrationTestPage' );
112 WatchedItem
::fromUserTitle( $user, $title )->addWatch();
113 MediaWikiServices
::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
119 WatchedItem
::fromUserTitle( $user, $title )->getNotificationTimestamp()
122 $this->assertFalse( WatchedItem
::fromUserTitle( $user, $title )->getNotificationTimestamp() );
125 public function testRemoveWatch_falseOnNotAllowed() {
126 $user = $this->getUser();
127 $title = Title
::newFromText( 'WatchedItemIntegrationTestPage' );
128 WatchedItem
::fromUserTitle( $user, $title )->addWatch();
130 $previousRights = $user->mRights
;
132 $this->assertFalse( WatchedItem
::fromUserTitle( $user, $title )->removeWatch() );
133 $user->mRights
= $previousRights;
134 $this->assertTrue( WatchedItem
::fromUserTitle( $user, $title )->removeWatch() );
137 public function testGetNotificationTimestamp_falseOnNotWatched() {
138 $user = $this->getUser();
139 $title = Title
::newFromText( 'WatchedItemIntegrationTestPage' );
141 WatchedItem
::fromUserTitle( $user, $title )->removeWatch();
142 $this->assertFalse( WatchedItem
::fromUserTitle( $user, $title )->isWatched() );
144 $this->assertFalse( WatchedItem
::fromUserTitle( $user, $title )->getNotificationTimestamp() );