Merge "Use display name in category page subheadings if provided"
[lhc/web/wiklou.git] / tests / phpunit / includes / WatchedItemIntegrationTest.php
1 <?php
2 use MediaWiki\MediaWikiServices;
3
4 /**
5 * @author Addshore
6 *
7 * @group Database
8 *
9 * @covers WatchedItem
10 */
11 class WatchedItemIntegrationTest extends MediaWikiTestCase {
12
13 public function setUp() {
14 parent::setUp();
15 self::$users['WatchedItemIntegrationTestUser']
16 = new TestUser( 'WatchedItemIntegrationTestUser' );
17
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' );
25 }
26
27 private function getUser() {
28 return self::$users['WatchedItemIntegrationTestUser']->getUser();
29 }
30
31 public function testWatchAndUnWatchItem() {
32
33 $user = $this->getUser();
34 $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
35 // Cleanup after previous tests
36 WatchedItem::fromUserTitle( $user, $title )->removeWatch();
37
38 $this->assertFalse(
39 WatchedItem::fromUserTitle( $user, $title )->isWatched(),
40 'Page should not initially be watched'
41 );
42 WatchedItem::fromUserTitle( $user, $title )->addWatch();
43 $this->assertTrue(
44 WatchedItem::fromUserTitle( $user, $title )->isWatched(),
45 'Page should be watched'
46 );
47 WatchedItem::fromUserTitle( $user, $title )->removeWatch();
48 $this->assertFalse(
49 WatchedItem::fromUserTitle( $user, $title )->isWatched(),
50 'Page should be unwatched'
51 );
52 }
53
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() );
60
61 EmailNotification::updateWatchlistTimestamp( $otherUser, $title, '20150202010101' );
62 $this->assertEquals(
63 '20150202010101',
64 WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
65 );
66
67 MediaWikiServices::getInstance()->getWatchedItemStore()->resetNotificationTimestamp(
68 $user, $title
69 );
70 $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
71 }
72
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();
82
83 WatchedItem::duplicateEntries( $titleOld, $titleNew );
84
85 $this->assertTrue(
86 WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->isWatched()
87 );
88 $this->assertTrue(
89 WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->isWatched()
90 );
91 $this->assertTrue(
92 WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->isWatched()
93 );
94 $this->assertTrue(
95 WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->isWatched()
96 );
97 }
98
99 public function testIsWatched_falseOnNotAllowed() {
100 $user = $this->getUser();
101 $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
102 WatchedItem::fromUserTitle( $user, $title )->addWatch();
103
104 $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
105 $user->mRights = [];
106 $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
107 }
108
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(
114 $user, $title
115 );
116
117 $this->assertEquals(
118 null,
119 WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
120 );
121 $user->mRights = [];
122 $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
123 }
124
125 public function testRemoveWatch_falseOnNotAllowed() {
126 $user = $this->getUser();
127 $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
128 WatchedItem::fromUserTitle( $user, $title )->addWatch();
129
130 $previousRights = $user->mRights;
131 $user->mRights = [];
132 $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
133 $user->mRights = $previousRights;
134 $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
135 }
136
137 public function testGetNotificationTimestamp_falseOnNotWatched() {
138 $user = $this->getUser();
139 $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
140
141 WatchedItem::fromUserTitle( $user, $title )->removeWatch();
142 $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
143
144 $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
145 }
146
147 }