MediaWiki
REL1_24
|
00001 <?php 00002 00011 class RCCacheEntryFactoryTest extends MediaWikiLangTestCase { 00012 00016 private $testRecentChangesHelper; 00017 00018 public function __construct( $name = null, array $data = array(), $dataName = '' ) { 00019 parent::__construct( $name, $data, $dataName ); 00020 00021 $this->testRecentChangesHelper = new TestRecentChangesHelper(); 00022 } 00023 00024 protected function setUp() { 00025 parent::setUp(); 00026 00027 $this->setMwGlobals( array( 00028 'wgArticlePath' => '/wiki/$1' 00029 ) ); 00030 } 00031 00035 public function testNewFromRecentChange( $expected, $context, $messages, 00036 $recentChange, $watched 00037 ) { 00038 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages ); 00039 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched ); 00040 00041 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry ); 00042 00043 $this->assertEquals( $watched, $cacheEntry->watched, 'watched' ); 00044 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp, 'timestamp' ); 00045 $this->assertEquals( 00046 $expected['numberofWatchingusers'], $cacheEntry->numberofWatchingusers, 00047 'watching users' 00048 ); 00049 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled, 'unpatrolled' ); 00050 00051 $this->assertUserLinks( 'TestRecentChangesUser', $cacheEntry ); 00052 $this->assertTitleLink( 'Xyz', $cacheEntry ); 00053 00054 $this->assertQueryLink( 'cur', $expected['cur'], $cacheEntry->curlink, 'cur link' ); 00055 $this->assertQueryLink( 'prev', $expected['diff'], $cacheEntry->lastlink, 'prev link' ); 00056 $this->assertQueryLink( 'diff', $expected['diff'], $cacheEntry->difflink, 'diff link' ); 00057 } 00058 00059 public function editChangeProvider() { 00060 return array( 00061 array( 00062 array( 00063 'title' => 'Xyz', 00064 'user' => 'TestRecentChangesUser', 00065 'diff' => array( 'curid' => 5, 'diff' => 191, 'oldid' => 190 ), 00066 'cur' => array( 'curid' => 5, 'diff' => 0, 'oldid' => 191 ), 00067 'timestamp' => '21:21', 00068 'numberofWatchingusers' => 0, 00069 'unpatrolled' => false 00070 ), 00071 $this->getContext(), 00072 $this->getMessages(), 00073 $this->testRecentChangesHelper->makeEditRecentChange( 00074 $this->getTestUser(), 00075 'Xyz', 00076 5, // curid 00077 191, // thisid 00078 190, // lastid 00079 '20131103212153', 00080 0, // counter 00081 0 // number of watching users 00082 ), 00083 false 00084 ) 00085 ); 00086 } 00087 00091 public function testNewForDeleteChange( $expected, $context, $messages, $recentChange, $watched ) { 00092 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages ); 00093 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched ); 00094 00095 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry ); 00096 00097 $this->assertEquals( $watched, $cacheEntry->watched, 'watched' ); 00098 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp, 'timestamp' ); 00099 $this->assertEquals( 00100 $expected['numberofWatchingusers'], 00101 $cacheEntry->numberofWatchingusers, 'watching users' 00102 ); 00103 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled, 'unpatrolled' ); 00104 00105 $this->assertDeleteLogLink( $cacheEntry ); 00106 $this->assertUserLinks( 'TestRecentChangesUser', $cacheEntry ); 00107 00108 $this->assertEquals( 'cur', $cacheEntry->curlink, 'cur link for delete log or rev' ); 00109 $this->assertEquals( 'diff', $cacheEntry->difflink, 'diff link for delete log or rev' ); 00110 $this->assertEquals( 'prev', $cacheEntry->lastlink, 'pref link for delete log or rev' ); 00111 } 00112 00113 public function deleteChangeProvider() { 00114 return array( 00115 array( 00116 array( 00117 'title' => 'Abc', 00118 'user' => 'TestRecentChangesUser', 00119 'timestamp' => '21:21', 00120 'numberofWatchingusers' => 0, 00121 'unpatrolled' => false 00122 ), 00123 $this->getContext(), 00124 $this->getMessages(), 00125 $this->testRecentChangesHelper->makeLogRecentChange( 00126 'delete', 00127 'delete', 00128 $this->getTestUser(), 00129 'Abc', 00130 '20131103212153', 00131 0, // counter 00132 0 // number of watching users 00133 ), 00134 false 00135 ) 00136 ); 00137 } 00138 00142 public function testNewForRevUserDeleteChange( $expected, $context, $messages, 00143 $recentChange, $watched 00144 ) { 00145 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages ); 00146 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched ); 00147 00148 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry ); 00149 00150 $this->assertEquals( $watched, $cacheEntry->watched, 'watched' ); 00151 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp, 'timestamp' ); 00152 $this->assertEquals( 00153 $expected['numberofWatchingusers'], 00154 $cacheEntry->numberofWatchingusers, 'watching users' 00155 ); 00156 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled, 'unpatrolled' ); 00157 00158 $this->assertRevDel( $cacheEntry ); 00159 $this->assertTitleLink( 'Zzz', $cacheEntry ); 00160 00161 $this->assertEquals( 'cur', $cacheEntry->curlink, 'cur link for delete log or rev' ); 00162 $this->assertEquals( 'diff', $cacheEntry->difflink, 'diff link for delete log or rev' ); 00163 $this->assertEquals( 'prev', $cacheEntry->lastlink, 'pref link for delete log or rev' ); 00164 } 00165 00166 public function revUserDeleteProvider() { 00167 return array( 00168 array( 00169 array( 00170 'title' => 'Zzz', 00171 'user' => 'TestRecentChangesUser', 00172 'diff' => '', 00173 'cur' => '', 00174 'timestamp' => '21:21', 00175 'numberofWatchingusers' => 0, 00176 'unpatrolled' => false 00177 ), 00178 $this->getContext(), 00179 $this->getMessages(), 00180 $this->testRecentChangesHelper->makeDeletedEditRecentChange( 00181 $this->getTestUser(), 00182 'Zzz', 00183 '20131103212153', 00184 191, // thisid 00185 190, // lastid 00186 '20131103212153', 00187 0, // counter 00188 0 // number of watching users 00189 ), 00190 false 00191 ) 00192 ); 00193 } 00194 00195 private function assertUserLinks( $user, $cacheEntry ) { 00196 $this->assertTag( 00197 array( 00198 'tag' => 'a', 00199 'attributes' => array( 00200 'class' => 'new mw-userlink' 00201 ), 00202 'content' => $user 00203 ), 00204 $cacheEntry->userlink, 00205 'verify user link' 00206 ); 00207 00208 $this->assertTag( 00209 array( 00210 'tag' => 'span', 00211 'attributes' => array( 00212 'class' => 'mw-usertoollinks' 00213 ), 00214 'child' => array( 00215 'tag' => 'a', 00216 'content' => 'Talk', 00217 ) 00218 ), 00219 $cacheEntry->usertalklink, 00220 'verify user talk link' 00221 ); 00222 00223 $this->assertTag( 00224 array( 00225 'tag' => 'span', 00226 'attributes' => array( 00227 'class' => 'mw-usertoollinks' 00228 ), 00229 'child' => array( 00230 'tag' => 'a', 00231 'content' => 'contribs', 00232 ) 00233 ), 00234 $cacheEntry->usertalklink, 00235 'verify user tool links' 00236 ); 00237 } 00238 00239 private function assertDeleteLogLink( $cacheEntry ) { 00240 $this->assertTag( 00241 array( 00242 'tag' => 'a', 00243 'attributes' => array( 00244 'href' => '/wiki/Special:Log/delete', 00245 'title' => 'Special:Log/delete' 00246 ), 00247 'content' => 'Deletion log' 00248 ), 00249 $cacheEntry->link, 00250 'verify deletion log link' 00251 ); 00252 } 00253 00254 private function assertRevDel( $cacheEntry ) { 00255 $this->assertTag( 00256 array( 00257 'tag' => 'span', 00258 'attributes' => array( 00259 'class' => 'history-deleted' 00260 ), 00261 'content' => '(username removed)' 00262 ), 00263 $cacheEntry->userlink, 00264 'verify user link for change with deleted revision and user' 00265 ); 00266 } 00267 00268 private function assertTitleLink( $title, $cacheEntry ) { 00269 $this->assertTag( 00270 array( 00271 'tag' => 'a', 00272 'attributes' => array( 00273 'href' => '/wiki/' . $title, 00274 'title' => $title 00275 ), 00276 'content' => $title 00277 ), 00278 $cacheEntry->link, 00279 'verify title link' 00280 ); 00281 } 00282 00283 private function assertQueryLink( $content, $params, $link ) { 00284 $this->assertTag( 00285 array( 00286 'tag' => 'a', 00287 'content' => $content 00288 ), 00289 $link, 00290 'assert query link element' 00291 ); 00292 00293 foreach ( $params as $key => $value ) { 00294 $this->assertRegExp( '/' . $key . '=' . $value . '/', $link, "verify $key link params" ); 00295 } 00296 } 00297 00298 private function getMessages() { 00299 return array( 00300 'cur' => 'cur', 00301 'diff' => 'diff', 00302 'hist' => 'hist', 00303 'enhancedrc-history' => 'history', 00304 'last' => 'prev', 00305 'blocklink' => 'block', 00306 'history' => 'Page history', 00307 'semicolon-separator' => '; ', 00308 'pipe-separator' => ' | ' 00309 ); 00310 } 00311 00312 private function getTestUser() { 00313 $user = User::newFromName( 'TestRecentChangesUser' ); 00314 00315 if ( !$user->getId() ) { 00316 $user->addToDatabase(); 00317 } 00318 00319 return $user; 00320 } 00321 00322 private function getContext() { 00323 $user = $this->getTestUser(); 00324 $context = $this->testRecentChangesHelper->getTestContext( $user ); 00325 00326 $title = Title::newFromText( 'RecentChanges', NS_SPECIAL ); 00327 $context->setTitle( $title ); 00328 00329 return $context; 00330 } 00331 }