Sanitizer::escapeId: Decode entity before replacing spaces
[lhc/web/wiklou.git] / tests / phpunit / includes / changes / OldChangesListTest.php
1 <?php
2
3 /**
4 * @covers OldChangesList
5 *
6 * @group Database
7 *
8 * @licence GNU GPL v2+
9 * @author Katie Filbert < aude.wiki@gmail.com >
10 */
11 class OldChangesListTest extends MediaWikiLangTestCase {
12
13 /**
14 * @var TestRecentChangesHelper
15 */
16 private $testRecentChangesHelper;
17
18 public function __construct( $name = null, array $data = array(), $dataName = '' ) {
19 parent::__construct( $name, $data, $dataName );
20
21 $this->testRecentChangesHelper = new TestRecentChangesHelper();
22 }
23
24 protected function setUp() {
25 parent::setUp();
26
27 $this->setMwGlobals( array(
28 'wgArticlePath' => '/wiki/$1'
29 ) );
30 }
31
32 /**
33 * @dataProvider recentChangesLine_CssForLineNumberProvider
34 */
35 public function testRecentChangesLine_CssForLineNumber( $expected, $linenumber, $message ) {
36 $oldChangesList = $this->getOldChangesList();
37 $recentChange = $this->getEditChange();
38
39 $line = $oldChangesList->recentChangesLine( $recentChange, false, $linenumber );
40
41 $this->assertRegExp( $expected, $line, $message );
42 }
43
44 public function recentChangesLine_CssForLineNumberProvider() {
45 return array(
46 array( '/mw-line-odd/', 1, 'odd line number' ),
47 array( '/mw-line-even/', 2, 'even line number' )
48 );
49 }
50
51 public function testRecentChangesLine_NotWatchedCssClass() {
52 $oldChangesList = $this->getOldChangesList();
53 $recentChange = $this->getEditChange();
54
55 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
56
57 $this->assertRegExp( '/mw-changeslist-line-not-watched/', $line );
58 }
59
60 public function testRecentChangesLine_WatchedCssClass() {
61 $oldChangesList = $this->getOldChangesList();
62 $recentChange = $this->getEditChange();
63
64 $line = $oldChangesList->recentChangesLine( $recentChange, true, 1 );
65
66 $this->assertRegExp( '/mw-changeslist-line-watched/', $line );
67 }
68
69 public function testRecentChangesLine_LogTitle() {
70 $oldChangesList = $this->getOldChangesList();
71 $recentChange = $this->getLogChange( 'delete' );
72
73 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
74
75 $message = new Message( 'dellogpage' );
76 $expectedLinkText = $message->inLanguage( 'en' )->text();
77
78 $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
79 $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
80 $this->assertRegExp( "/$expectedLinkText/", $line, 'link text' );
81 }
82
83 public function testRecentChangesLine_DiffHistLinks() {
84 $oldChangesList = $this->getOldChangesList();
85 $recentChange = $this->getEditChange();
86
87 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
88
89 $this->assertRegExp(
90 '/title=Cat&amp;curid=20131103212153&amp;diff=5&amp;oldid=191/',
91 $line,
92 'assert diff link'
93 );
94
95 $this->assertRegExp( '/tabindex="0"/', $line, 'assert tab index' );
96 $this->assertRegExp(
97 '/title=Cat&amp;curid=20131103212153&amp;action=history"/',
98 $line,
99 'assert history link'
100 );
101 }
102
103 private function getNewBotEditChange() {
104 $user = $this->getTestUser();
105
106 $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
107 $user, 'Abc', '20131103212153', 0, 0
108 );
109
110 return $recentChange;
111 }
112
113 private function getLogChange( $logType ) {
114 $user = $this->getTestUser();
115
116 $recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
117 $logType, $user, 'Abc', '20131103212153', 0, 0
118 );
119
120 return $recentChange;
121 }
122
123 private function getEditChange() {
124 $user = $this->getTestUser();
125 $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
126 $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0
127 );
128
129 return $recentChange;
130 }
131
132 private function getOldChangesList() {
133 $context = $this->getContext();
134 return new OldChangesList( $context );
135 }
136
137 private function getTestUser() {
138 $user = User::newFromName( 'TestRecentChangesUser' );
139
140 if ( !$user->getId() ) {
141 $user->addToDatabase();
142 }
143
144 return $user;
145 }
146
147 private function getContext() {
148 $user = $this->getTestUser();
149 $context = $this->testRecentChangesHelper->getTestContext( $user );
150
151 $title = Title::newFromText( 'RecentChanges', NS_SPECIAL );
152 $context->setTitle( $title );
153
154 return $context;
155 }
156
157 }