Merge "Don't list nonexistent groups as addable or removable"
[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 * @licence GNU GPL v2+
13 * @author Katie Filbert < aude.wiki@gmail.com >
14 */
15 class OldChangesListTest extends MediaWikiLangTestCase {
16
17 /**
18 * @var TestRecentChangesHelper
19 */
20 private $testRecentChangesHelper;
21
22 public function __construct( $name = null, array $data = array(), $dataName = '' ) {
23 parent::__construct( $name, $data, $dataName );
24
25 $this->testRecentChangesHelper = new TestRecentChangesHelper();
26 }
27
28 protected function setUp() {
29 parent::setUp();
30
31 $this->setMwGlobals( array(
32 'wgArticlePath' => '/wiki/$1'
33 ) );
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 array(
50 array( '/mw-line-odd/', 1, 'odd line number' ),
51 array( '/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 $message = new Message( 'dellogpage' );
80 $expectedLinkText = $message->inLanguage( 'en' )->text();
81
82 $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
83 $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
84 $this->assertRegExp( "/$expectedLinkText/", $line, 'link text' );
85 }
86
87 public function testRecentChangesLine_DiffHistLinks() {
88 $oldChangesList = $this->getOldChangesList();
89 $recentChange = $this->getEditChange();
90
91 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
92
93 $this->assertRegExp(
94 '/title=Cat&amp;curid=20131103212153&amp;diff=5&amp;oldid=191/',
95 $line,
96 'assert diff link'
97 );
98
99 $this->assertRegExp( '/tabindex="0"/', $line, 'assert tab index' );
100 $this->assertRegExp(
101 '/title=Cat&amp;curid=20131103212153&amp;action=history"/',
102 $line,
103 'assert history link'
104 );
105 }
106
107 public function testRecentChangesLine_Flags() {
108 $oldChangesList = $this->getOldChangesList();
109 $recentChange = $this->getNewBotEditChange();
110
111 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
112
113 $this->assertRegExp(
114 "/<abbr class='newpage' title='This edit created a new page'>N<\/abbr>/",
115 $line,
116 'new page flag'
117 );
118
119 $this->assertRegExp(
120 "/<abbr class='botedit' title='This edit was performed by a bot'>b<\/abbr>/",
121 $line,
122 'bot flag'
123 );
124 }
125
126 public function testRecentChangesLine_Tags() {
127 $recentChange = $this->getEditChange();
128 $recentChange->mAttribs['ts_tags'] = 'vandalism,newbie';
129
130 $oldChangesList = $this->getOldChangesList();
131 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
132
133 $this->assertRegExp( '/<li class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/', $line );
134 $this->assertRegExp( '/<li class="[\w\s-]*mw-tag-newbie[\w\s-]*">/', $line );
135 }
136
137 private function getNewBotEditChange() {
138 $user = $this->getTestUser();
139
140 $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
141 $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
142 );
143
144 return $recentChange;
145 }
146
147 private function getLogChange( $logType, $logAction ) {
148 $user = $this->getTestUser();
149
150 $recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
151 $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
152 );
153
154 return $recentChange;
155 }
156
157 private function getEditChange() {
158 $user = $this->getTestUser();
159 $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
160 $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0
161 );
162
163 return $recentChange;
164 }
165
166 private function getOldChangesList() {
167 $context = $this->getContext();
168 return new OldChangesList( $context );
169 }
170
171 private function getTestUser() {
172 $user = User::newFromName( 'TestRecentChangesUser' );
173
174 if ( !$user->getId() ) {
175 $user->addToDatabase();
176 }
177
178 return $user;
179 }
180
181 private function getContext() {
182 $user = $this->getTestUser();
183 $context = $this->testRecentChangesHelper->getTestContext( $user );
184
185 $title = Title::newFromText( 'RecentChanges', NS_SPECIAL );
186 $context->setTitle( $title );
187
188 return $context;
189 }
190
191 }