i18n: Rename 11 messages for case-compliance
[lhc/web/wiklou.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-for-recent-changes: 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 }