]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - tests/phpunit/includes/changes/OldChangesListTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / includes / changes / OldChangesListTest.php
1 <?php
2
3 /**
4  * @covers OldChangesList
5  *
6  * @todo add tests to cover article link, timestamp, character difference,
7  *       log entry, user tool links, direction marks, tags, rollback,
8  *       watching users, and date header.
9  *
10  * @group Database
11  *
12  * @author Katie Filbert < aude.wiki@gmail.com >
13  */
14 class OldChangesListTest extends MediaWikiLangTestCase {
15
16         /**
17          * @var TestRecentChangesHelper
18          */
19         private $testRecentChangesHelper;
20
21         public function __construct( $name = null, array $data = [], $dataName = '' ) {
22                 parent::__construct( $name, $data, $dataName );
23
24                 $this->testRecentChangesHelper = new TestRecentChangesHelper();
25         }
26
27         protected function setUp() {
28                 parent::setUp();
29
30                 $this->setMwGlobals( [
31                         'wgArticlePath' => '/wiki/$1',
32                 ] );
33                 $this->setUserLang( 'qqx' );
34         }
35
36         /**
37          * @dataProvider recentChangesLine_CssForLineNumberProvider
38          */
39         public function testRecentChangesLine_CssForLineNumber( $expected, $linenumber, $message ) {
40                 $oldChangesList = $this->getOldChangesList();
41                 $recentChange = $this->getEditChange();
42
43                 $line = $oldChangesList->recentChangesLine( $recentChange, false, $linenumber );
44
45                 $this->assertRegExp( $expected, $line, $message );
46         }
47
48         public function recentChangesLine_CssForLineNumberProvider() {
49                 return [
50                         [ '/mw-line-odd/', 1, 'odd line number' ],
51                         [ '/mw-line-even/', 2, 'even line number' ]
52                 ];
53         }
54
55         public function testRecentChangesLine_NotWatchedCssClass() {
56                 $oldChangesList = $this->getOldChangesList();
57                 $recentChange = $this->getEditChange();
58
59                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
60
61                 $this->assertRegExp( '/mw-changeslist-line-not-watched/', $line );
62         }
63
64         public function testRecentChangesLine_WatchedCssClass() {
65                 $oldChangesList = $this->getOldChangesList();
66                 $recentChange = $this->getEditChange();
67
68                 $line = $oldChangesList->recentChangesLine( $recentChange, true, 1 );
69
70                 $this->assertRegExp( '/mw-changeslist-line-watched/', $line );
71         }
72
73         public function testRecentChangesLine_LogTitle() {
74                 $oldChangesList = $this->getOldChangesList();
75                 $recentChange = $this->getLogChange( 'delete', 'delete' );
76
77                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
78
79                 $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
80                 $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
81                 $this->assertRegExp( "/dellogpage/", $line, 'link text' );
82         }
83
84         public function testRecentChangesLine_DiffHistLinks() {
85                 $oldChangesList = $this->getOldChangesList();
86                 $recentChange = $this->getEditChange();
87
88                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
89
90                 $this->assertRegExp(
91                         '/title=Cat&amp;curid=20131103212153&amp;diff=5&amp;oldid=191/',
92                         $line,
93                         'assert diff link'
94                 );
95
96                 $this->assertRegExp(
97                         '/title=Cat&amp;curid=20131103212153&amp;action=history"/',
98                         $line,
99                         'assert history link'
100                 );
101         }
102
103         public function testRecentChangesLine_Flags() {
104                 $oldChangesList = $this->getOldChangesList();
105                 $recentChange = $this->getNewBotEditChange();
106
107                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
108
109                 $this->assertContains(
110                         '<abbr class="newpage" title="(recentchanges-label-newpage)">(newpageletter)</abbr>',
111                         $line,
112                         'new page flag'
113                 );
114
115                 $this->assertContains(
116                         '<abbr class="botedit" title="(recentchanges-label-bot)">(boteditletter)</abbr>',
117                         $line,
118                         'bot flag'
119                 );
120         }
121
122         public function testRecentChangesLine_Attribs() {
123                 $recentChange = $this->getEditChange();
124                 $recentChange->mAttribs['ts_tags'] = 'vandalism,newbie';
125
126                 $oldChangesList = $this->getOldChangesList();
127                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
128
129                 $this->assertRegExp(
130                         '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/',
131                         $line
132                 );
133                 $this->assertRegExp(
134                         '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-newbie[\w\s-]*">/',
135                         $line
136                 );
137         }
138
139         public function testRecentChangesLine_numberOfWatchingUsers() {
140                 $oldChangesList = $this->getOldChangesList();
141
142                 $recentChange = $this->getEditChange();
143                 $recentChange->numberofWatchingusers = 100;
144
145                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
146                 $this->assertRegExp( "/(number_of_watching_users_RCview: 100)/", $line );
147         }
148
149         public function testRecentChangesLine_watchlistCssClass() {
150                 $oldChangesList = $this->getOldChangesList();
151                 $oldChangesList->setWatchlistDivs( true );
152
153                 $recentChange = $this->getEditChange();
154                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
155                 $this->assertRegExp( "/watchlist-0-Cat/", $line );
156         }
157
158         public function testRecentChangesLine_dataAttribute() {
159                 $oldChangesList = $this->getOldChangesList();
160                 $oldChangesList->setWatchlistDivs( true );
161
162                 $recentChange = $this->getEditChange();
163                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
164                 $this->assertRegExp( '/data-target-page=\"Cat\"/', $line );
165
166                 $recentChange = $this->getLogChange( 'delete', 'delete' );
167                 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
168                 $this->assertRegExp( '/data-target-page="Abc"/', $line );
169         }
170
171         public function testRecentChangesLine_prefix() {
172                 $mockContext = $this->getMockBuilder( RequestContext::class )
173                         ->setMethods( [ 'getTitle' ] )
174                         ->getMock();
175                 $mockContext->method( 'getTitle' )
176                         ->will( $this->returnValue( Title::newFromText( 'Expected Context Title' ) ) );
177
178                 $oldChangesList = $this->getOldChangesList();
179                 $oldChangesList->setContext( $mockContext );
180                 $recentChange = $this->getEditChange();
181
182                 $oldChangesList->setChangeLinePrefixer( function ( $rc, $changesList ) {
183                         // Make sure RecentChange and ChangesList objects are the same
184                         $this->assertEquals( 'Expected Context Title', $changesList->getContext()->getTitle() );
185                         $this->assertEquals( 'Cat', $rc->getTitle() );
186                         return 'I am a prefix';
187                 } );
188                 $line = $oldChangesList->recentChangesLine( $recentChange );
189                 $this->assertRegExp( "/I am a prefix/", $line );
190         }
191
192         private function getNewBotEditChange() {
193                 $user = $this->getMutableTestUser()->getUser();
194
195                 $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
196                         $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
197                 );
198
199                 return $recentChange;
200         }
201
202         private function getLogChange( $logType, $logAction ) {
203                 $user = $this->getMutableTestUser()->getUser();
204
205                 $recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
206                         $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
207                 );
208
209                 return $recentChange;
210         }
211
212         private function getEditChange() {
213                 $user = $this->getMutableTestUser()->getUser();
214                 $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
215                         $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0
216                 );
217
218                 return $recentChange;
219         }
220
221         private function getOldChangesList() {
222                 $context = $this->getContext();
223                 return new OldChangesList( $context );
224         }
225
226         private function getContext() {
227                 $user = $this->getMutableTestUser()->getUser();
228                 $context = $this->testRecentChangesHelper->getTestContext( $user );
229                 $context->setLanguage( 'qqx' );
230
231                 return $context;
232         }
233
234 }