4 * @covers RCCacheEntryFactory
9 * @author Katie Filbert < aude.wiki@gmail.com >
11 class RCCacheEntryFactoryTest
extends MediaWikiLangTestCase
{
14 * @var TestRecentChangesHelper
16 private $testRecentChangesHelper;
18 public function __construct( $name = null, array $data = array(), $dataName = '' ) {
19 parent
::__construct( $name, $data, $dataName );
21 $this->testRecentChangesHelper
= new TestRecentChangesHelper();
24 protected function setUp() {
27 $this->setMwGlobals( array(
28 'wgArticlePath' => '/wiki/$1'
33 * @dataProvider editChangeProvider
35 public function testNewFromRecentChange( $expected, $context, $messages,
36 $recentChange, $watched
38 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
39 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
41 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
43 $this->assertEquals( $watched, $cacheEntry->watched
, 'watched' );
44 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp
, 'timestamp' );
46 $expected['numberofWatchingusers'], $cacheEntry->numberofWatchingusers
,
49 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled
, 'unpatrolled' );
51 $this->assertUserLinks( 'TestRecentChangesUser', $cacheEntry );
52 $this->assertTitleLink( 'Xyz', $cacheEntry );
54 $this->assertQueryLink( 'cur', $expected['cur'], $cacheEntry->curlink
, 'cur link' );
55 $this->assertQueryLink( 'prev', $expected['diff'], $cacheEntry->lastlink
, 'prev link' );
56 $this->assertQueryLink( 'diff', $expected['diff'], $cacheEntry->difflink
, 'diff link' );
59 public function editChangeProvider() {
60 $user = $this->testRecentChangesHelper
->getTestUser();
66 'user' => 'TestRecentChangesUser',
67 'diff' => array( 'curid' => 5, 'diff' => 191, 'oldid' => 190 ),
68 'cur' => array( 'curid' => 5, 'diff' => 0, 'oldid' => 191 ),
69 'timestamp' => '21:21',
70 'numberofWatchingusers' => 0,
71 'unpatrolled' => false
75 $this->testRecentChangesHelper
->makeEditRecentChange(
83 0 // number of watching users
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' );
102 $expected['numberofWatchingusers'],
103 $cacheEntry->numberofWatchingusers
, 'watching users'
105 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled
, 'unpatrolled' );
107 $this->assertDeleteLogLink( $cacheEntry );
108 $this->assertUserLinks( 'TestRecentChangesUser', $cacheEntry );
110 $this->assertEquals( 'cur', $cacheEntry->curlink
, 'cur link for delete log or rev' );
111 $this->assertEquals( 'diff', $cacheEntry->difflink
, 'diff link for delete log or rev' );
112 $this->assertEquals( 'prev', $cacheEntry->lastlink
, 'pref link for delete log or rev' );
115 public function deleteChangeProvider() {
116 $user = $this->testRecentChangesHelper
->getTestUser();
122 'user' => 'TestRecentChangesUser',
123 'timestamp' => '21:21',
124 'numberofWatchingusers' => 0,
125 'unpatrolled' => false
128 $this->getMessages(),
129 $this->testRecentChangesHelper
->makeLogRecentChange(
134 0 // number of watching users
142 * @dataProvider revUserDeleteProvider
144 public function testNewForRevUserDeleteChange( $expected, $context, $messages,
145 $recentChange, $watched
147 $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
148 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
150 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
152 $this->assertEquals( $watched, $cacheEntry->watched
, 'watched' );
153 $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp
, 'timestamp' );
155 $expected['numberofWatchingusers'],
156 $cacheEntry->numberofWatchingusers
, 'watching users'
158 $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled
, 'unpatrolled' );
160 $this->assertRevDel( $cacheEntry );
161 $this->assertTitleLink( 'Zzz', $cacheEntry );
163 $this->assertEquals( 'cur', $cacheEntry->curlink
, 'cur link for delete log or rev' );
164 $this->assertEquals( 'diff', $cacheEntry->difflink
, 'diff link for delete log or rev' );
165 $this->assertEquals( 'prev', $cacheEntry->lastlink
, 'pref link for delete log or rev' );
168 public function revUserDeleteProvider() {
169 $user = $this->testRecentChangesHelper
->getTestUser();
175 'user' => 'TestRecentChangesUser',
178 'timestamp' => '21:21',
179 'numberofWatchingusers' => 0,
180 'unpatrolled' => false
183 $this->getMessages(),
184 $this->testRecentChangesHelper
->makeDeletedEditRecentChange(
192 0 // number of watching users
199 private function assertUserLinks( $user, $cacheEntry ) {
203 'attributes' => array(
204 'class' => 'new mw-userlink'
208 $cacheEntry->userlink
,
215 'attributes' => array(
216 'class' => 'mw-usertoollinks'
223 $cacheEntry->usertalklink
,
224 'verify user talk link'
230 'attributes' => array(
231 'class' => 'mw-usertoollinks'
235 'content' => 'contribs',
238 $cacheEntry->usertalklink
,
239 'verify user tool links'
243 private function assertDeleteLogLink( $cacheEntry ) {
247 'attributes' => array(
248 'href' => '/wiki/Special:Log/delete',
249 'title' => 'Special:Log/delete'
251 'content' => 'Deletion log'
254 'verify deletion log link'
258 private function assertRevDel( $cacheEntry ) {
262 'attributes' => array(
263 'class' => 'history-deleted'
265 'content' => '(username removed)'
267 $cacheEntry->userlink
,
268 'verify user link for change with deleted revision and user'
272 private function assertTitleLink( $title, $cacheEntry ) {
276 'attributes' => array(
277 'href' => '/wiki/' . $title,
287 private function assertQueryLink( $content, $params, $link ) {
291 'content' => $content
294 'assert query link element'
297 foreach ( $params as $key => $value ) {
298 $this->assertRegExp( '/' . $key . '=' . $value . '/', $link, "verify $key link params" );
302 private function getMessages() {
307 'enhancedrc-history' => 'history',
309 'blocklink' => 'block',
310 'history' => 'Page history',
311 'semicolon-separator' => '; ',
312 'pipe-separator' => ' | '
316 private function getContext() {
317 $context = $this->testRecentChangesHelper
->getTestContext();
319 $title = Title
::newFromText( 'RecentChanges', NS_SPECIAL
);
320 $context->setTitle( $title );