Merge "Add cURL constants test"
[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 'wgLang' => Language::factory( 'qqx' )
34 ) );
35 }
36
37 /**
38 * @dataProvider recentChangesLine_CssForLineNumberProvider
39 */
40 public function testRecentChangesLine_CssForLineNumber( $expected, $linenumber, $message ) {
41 $oldChangesList = $this->getOldChangesList();
42 $recentChange = $this->getEditChange();
43
44 $line = $oldChangesList->recentChangesLine( $recentChange, false, $linenumber );
45
46 $this->assertRegExp( $expected, $line, $message );
47 }
48
49 public function recentChangesLine_CssForLineNumberProvider() {
50 return array(
51 array( '/mw-line-odd/', 1, 'odd line number' ),
52 array( '/mw-line-even/', 2, 'even line number' )
53 );
54 }
55
56 public function testRecentChangesLine_NotWatchedCssClass() {
57 $oldChangesList = $this->getOldChangesList();
58 $recentChange = $this->getEditChange();
59
60 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
61
62 $this->assertRegExp( '/mw-changeslist-line-not-watched/', $line );
63 }
64
65 public function testRecentChangesLine_WatchedCssClass() {
66 $oldChangesList = $this->getOldChangesList();
67 $recentChange = $this->getEditChange();
68
69 $line = $oldChangesList->recentChangesLine( $recentChange, true, 1 );
70
71 $this->assertRegExp( '/mw-changeslist-line-watched/', $line );
72 }
73
74 public function testRecentChangesLine_LogTitle() {
75 $oldChangesList = $this->getOldChangesList();
76 $recentChange = $this->getLogChange( 'delete', 'delete' );
77
78 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
79
80 $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
81 $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
82 $this->assertRegExp( "/dellogpage/", $line, 'link text' );
83 }
84
85 public function testRecentChangesLine_DiffHistLinks() {
86 $oldChangesList = $this->getOldChangesList();
87 $recentChange = $this->getEditChange();
88
89 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
90
91 $this->assertRegExp(
92 '/title=Cat&amp;curid=20131103212153&amp;diff=5&amp;oldid=191/',
93 $line,
94 'assert diff link'
95 );
96
97 $this->assertRegExp( '/tabindex="0"/', $line, 'assert tab index' );
98 $this->assertRegExp(
99 '/title=Cat&amp;curid=20131103212153&amp;action=history"/',
100 $line,
101 'assert history link'
102 );
103 }
104
105 public function testRecentChangesLine_Flags() {
106 $oldChangesList = $this->getOldChangesList();
107 $recentChange = $this->getNewBotEditChange();
108
109 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
110
111 $this->assertContains(
112 "<abbr class='newpage' title='(recentchanges-label-newpage)'>(newpageletter)</abbr>",
113 $line,
114 'new page flag'
115 );
116
117 $this->assertContains(
118 "<abbr class='botedit' title='(recentchanges-label-bot)'>(boteditletter)</abbr>",
119 $line,
120 'bot flag'
121 );
122 }
123
124 public function testRecentChangesLine_Tags() {
125 $recentChange = $this->getEditChange();
126 $recentChange->mAttribs['ts_tags'] = 'vandalism,newbie';
127
128 $oldChangesList = $this->getOldChangesList();
129 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
130
131 $this->assertRegExp( '/<li class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/', $line );
132 $this->assertRegExp( '/<li class="[\w\s-]*mw-tag-newbie[\w\s-]*">/', $line );
133 }
134
135 private function getNewBotEditChange() {
136 $user = $this->getTestUser();
137
138 $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
139 $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
140 );
141
142 return $recentChange;
143 }
144
145 private function getLogChange( $logType, $logAction ) {
146 $user = $this->getTestUser();
147
148 $recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
149 $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
150 );
151
152 return $recentChange;
153 }
154
155 private function getEditChange() {
156 $user = $this->getTestUser();
157 $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
158 $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0
159 );
160
161 return $recentChange;
162 }
163
164 private function getOldChangesList() {
165 $context = $this->getContext();
166 return new OldChangesList( $context );
167 }
168
169 private function getTestUser() {
170 $user = User::newFromName( 'TestRecentChangesUser' );
171
172 if ( !$user->getId() ) {
173 $user->addToDatabase();
174 }
175
176 return $user;
177 }
178
179 private function getContext() {
180 $user = $this->getTestUser();
181 $context = $this->testRecentChangesHelper->getTestContext( $user );
182 $context->setLanguage( Language::factory( 'qqx' ) );
183
184 return $context;
185 }
186
187 }