dc47e359ee8d8ea2e72c8323fe025d93798ca36f
3 * @covers RCCacheEntryFactory
8 * @author Katie Filbert < aude.wiki@gmail.com >
10 class RCCacheEntryFactoryTest
extends MediaWikiLangTestCase
{
12 protected function setUp() {
15 $this->setMwGlobals( array(
16 'wgArticlePath' => '/wiki/$1'
21 * @dataProvider editChangeProvider
23 public function testNewFromRecentChange( $expected, $context, $messages, $recentChange, $watched ) {
24 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
25 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
27 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
29 $this->assertEquals( $watched, $cacheEntry->watched
, 'watched' );
30 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp
, 'timestamp' );
31 $this->assertEquals( $expected['numberofWatchingusers'], $cacheEntry->numberofWatchingusers
, 'watching users' );
32 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled
, 'unpatrolled' );
34 $this->assertUserLinks( 'Mary', $cacheEntry );
35 $this->assertTitleLink( 'Xyz', $cacheEntry );
37 $this->assertQueryLink( 'cur', $expected['cur'], $cacheEntry->curlink
, 'cur link' );
38 $this->assertQueryLink( 'prev', $expected['diff'], $cacheEntry->lastlink
, 'prev link' );
39 $this->assertQueryLink( 'diff', $expected['diff'], $cacheEntry->difflink
, 'diff link' );
42 public function editChangeProvider() {
48 'diff' => array( 'curid' => 5, 'diff' => 191, 'oldid' => 190 ),
49 'cur' => array( 'curid' => 5, 'diff' => 0, 'oldid' => 191 ),
50 'timestamp' => '21:21',
51 'numberofWatchingusers' => 0,
52 'unpatrolled' => false
56 $this->makeEditRecentChange(
64 0 // number of watching users
72 private function makeEditRecentChange( $title, $user, $curid, $thisid, $lastid,
73 $timestamp, $counter, $watchingUsers
76 $attribs = array_merge(
77 $this->getDefaultAttributes( $title, $timestamp ),
79 'rc_user' => $user->getId(),
80 'rc_user_text' => $user->getName(),
81 'rc_this_oldid' => $thisid,
82 'rc_last_oldid' => $lastid,
87 return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
91 * @dataProvider deleteChangeProvider
93 public function testNewForDeleteChange( $expected, $context, $messages, $recentChange, $watched ) {
94 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
95 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
97 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
99 $this->assertEquals( $watched, $cacheEntry->watched
, 'watched' );
100 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp
, 'timestamp' );
101 $this->assertEquals( $expected['numberofWatchingusers'], $cacheEntry->numberofWatchingusers
, 'watching users' );
102 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled
, 'unpatrolled' );
104 $this->assertDeleteLogLink( $cacheEntry );
105 $this->assertUserLinks( 'Mary', $cacheEntry );
107 $this->assertEquals( 'cur', $cacheEntry->curlink
, 'cur link for delete log or rev' );
108 $this->assertEquals( 'diff', $cacheEntry->difflink
, 'diff link for delete log or rev' );
109 $this->assertEquals( 'prev', $cacheEntry->lastlink
, 'pref link for delete log or rev' );
112 public function deleteChangeProvider() {
118 'timestamp' => '21:21',
119 'numberofWatchingusers' => 0,
120 'unpatrolled' => false
123 $this->getMessages(),
124 $this->makeLogRecentChange(
126 $this->getTestUser(),
129 0 // number of watching users
137 private function makeLogRecentChange( $title, $user, $timestamp, $counter, $watchingUsers ) {
138 $attribs = array_merge(
139 $this->getDefaultAttributes( $title, $timestamp ),
142 'rc_user' => $user->getId(),
143 'rc_user_text' => $user->getName(),
144 'rc_this_oldid' => 0,
145 'rc_last_oldid' => 0,
146 'rc_old_len' => null,
147 'rc_new_len' => null,
150 'rc_log_type' => 'delete',
151 'rc_log_action' => 'delete'
155 return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
159 * @dataProvider revUserDeleteProvider
161 public function testNewForRevUserDeleteChange( $expected, $context, $messages,
162 $recentChange, $watched
164 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
165 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
167 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
169 $this->assertEquals( $watched, $cacheEntry->watched
, 'watched' );
170 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp
, 'timestamp' );
171 $this->assertEquals( $expected['numberofWatchingusers'], $cacheEntry->numberofWatchingusers
, 'watching users' );
172 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled
, 'unpatrolled' );
174 $this->assertRevDel( $cacheEntry );
175 $this->assertTitleLink( 'Zzz', $cacheEntry );
177 $this->assertEquals( 'cur', $cacheEntry->curlink
, 'cur link for delete log or rev' );
178 $this->assertEquals( 'diff', $cacheEntry->difflink
, 'diff link for delete log or rev' );
179 $this->assertEquals( 'prev', $cacheEntry->lastlink
, 'pref link for delete log or rev' );
182 public function revUserDeleteProvider() {
190 'timestamp' => '21:21',
191 'numberofWatchingusers' => 0,
192 'unpatrolled' => false
195 $this->getMessages(),
196 $this->makeDeletedEditRecentChange(
198 $this->getTestUser(),
204 0 // number of watching users
212 private function makeDeletedEditRecentChange( $title, $user, $timestamp, $curid, $thisid,
213 $lastid, $counter, $watchingUsers
215 $attribs = array_merge(
216 $this->getDefaultAttributes( $title, $timestamp ),
218 'rc_user' => $user->getId(),
219 'rc_user_text' => $user->getName(),
221 'rc_cur_id' => $curid,
222 'rc_this_oldid' => $thisid,
223 'rc_last_oldid' => $lastid
227 return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
230 private function assertUserLinks( $user, $cacheEntry ) {
234 'attributes' => array(
235 'class' => 'new mw-userlink'
239 $cacheEntry->userlink
,
246 'attributes' => array(
247 'class' => 'mw-usertoollinks'
254 $cacheEntry->usertalklink
,
255 'verify user talk link'
261 'attributes' => array(
262 'class' => 'mw-usertoollinks'
266 'content' => 'contribs',
269 $cacheEntry->usertalklink
,
270 'verify user tool links'
274 private function assertDeleteLogLink( $cacheEntry ) {
278 'attributes' => array(
279 'href' => '/wiki/Special:Log/delete',
280 'title' => 'Special:Log/delete'
282 'content' => 'Deletion log'
285 'verify deletion log link'
289 private function assertRevDel( $cacheEntry ) {
293 'attributes' => array(
294 'class' => 'history-deleted'
296 'content' => '(username removed)'
298 $cacheEntry->userlink
,
299 'verify user link for change with deleted revision and user'
303 private function assertTitleLink( $title, $cacheEntry ) {
307 'attributes' => array(
308 'href' => '/wiki/' . $title,
318 private function assertQueryLink( $content, $params, $link ) {
322 'content' => $content
325 'assert query link element'
328 foreach( $params as $key => $value ) {
329 $this->assertRegExp( '/' . $key . '=' . $value . '/', $link, "verify $key link params" );
333 private function makeRecentChange( $attribs, $counter, $watchingUsers ) {
334 $change = new RecentChange();
335 $change->setAttribs( $attribs );
336 $change->counter
= $counter;
337 $change->numberofWatchingusers
= $watchingUsers;
342 private function getDefaultAttributes( $title, $timestamp ) {
346 'rc_user_text' => '127.0.0.1',
347 'rc_ip' => '127.0.0.1',
348 'rc_title' => $title,
350 'rc_timestamp' => $timestamp,
351 'rc_cur_time' => $timestamp,
361 'rc_log_type' => null,
362 'rc_log_action' => '',
364 'rc_source' => 'mw.edit'
368 private function getTestUser() {
369 $user = User
::newFromName( 'Mary' );
371 if ( ! $user->getId() ) {
372 $user->addToDatabase();
378 private function getMessages() {
383 'enhancedrc-history' => 'history',
385 'blocklink' => 'block',
386 'history' => 'Page history',
387 'semicolon-separator' => '; ',
388 'pipe-separator' => ' | '
392 private function getContext() {
393 $title = Title
::newFromText( 'RecentChanges', NS_SPECIAL
);
395 $context = new RequestContext();
396 $context->setTitle( $title );
397 $context->setLanguage( Language
::factory( 'en' ) );
399 $user = $this->getTestUser();
400 $context->setUser( $user );