3 use MediaWiki\Linker\LinkRenderer
;
4 use MediaWiki\MediaWikiServices
;
7 * @covers RCCacheEntryFactory
11 * @author Katie Filbert < aude.wiki@gmail.com >
13 class RCCacheEntryFactoryTest
extends MediaWikiLangTestCase
{
16 * @var TestRecentChangesHelper
18 private $testRecentChangesHelper;
23 private $linkRenderer;
25 public function __construct( $name = null, array $data = [], $dataName = '' ) {
26 parent
::__construct( $name, $data, $dataName );
28 $this->testRecentChangesHelper
= new TestRecentChangesHelper();
31 protected function setUp() {
34 $this->setMwGlobals( [
35 'wgArticlePath' => '/wiki/$1'
38 $this->linkRenderer
= new LinkRenderer(
39 MediaWikiServices
::getInstance()->getTitleFormatter()
43 public function testNewFromRecentChange() {
44 $user = $this->getMutableTestUser()->getUser();
45 $recentChange = $this->testRecentChangesHelper
->makeEditRecentChange(
53 0 // number of watching users
55 $cacheEntryFactory = new RCCacheEntryFactory(
60 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false );
62 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
64 $this->assertEquals( false, $cacheEntry->watched
, 'watched' );
65 $this->assertEquals( '21:21', $cacheEntry->timestamp
, 'timestamp' );
66 $this->assertEquals( 0, $cacheEntry->numberofWatchingusers
, 'watching users' );
67 $this->assertEquals( false, $cacheEntry->unpatrolled
, 'unpatrolled' );
69 $this->assertUserLinks( $user->getName(), $cacheEntry );
70 $this->assertTitleLink( 'Xyz', $cacheEntry );
72 $diff = [ 'curid' => 5, 'diff' => 191, 'oldid' => 190 ];
73 $cur = [ 'curid' => 5, 'diff' => 0, 'oldid' => 191 ];
74 $this->assertQueryLink( 'cur', $cur, $cacheEntry->curlink
, 'cur link' );
75 $this->assertQueryLink( 'prev', $diff, $cacheEntry->lastlink
, 'prev link' );
76 $this->assertQueryLink( 'diff', $diff, $cacheEntry->difflink
, 'diff link' );
79 public function testNewForDeleteChange() {
82 'user' => 'TestRecentChangesUser',
83 'timestamp' => '21:21',
84 'numberofWatchingusers' => 0,
85 'unpatrolled' => false
87 $user = $this->getMutableTestUser()->getUser();
88 $recentChange = $this->testRecentChangesHelper
->makeLogRecentChange(
95 0 // number of watching users
97 $cacheEntryFactory = new RCCacheEntryFactory(
102 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false );
104 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
106 $this->assertEquals( false, $cacheEntry->watched
, 'watched' );
107 $this->assertEquals( '21:21', $cacheEntry->timestamp
, 'timestamp' );
108 $this->assertEquals( 0, $cacheEntry->numberofWatchingusers
, 'watching users' );
109 $this->assertEquals( false, $cacheEntry->unpatrolled
, 'unpatrolled' );
111 $this->assertDeleteLogLink( $cacheEntry );
112 $this->assertUserLinks( $user->getName(), $cacheEntry );
114 $this->assertEquals( 'cur', $cacheEntry->curlink
, 'cur link for delete log or rev' );
115 $this->assertEquals( 'diff', $cacheEntry->difflink
, 'diff link for delete log or rev' );
116 $this->assertEquals( 'prev', $cacheEntry->lastlink
, 'pref link for delete log or rev' );
119 public function testNewForRevUserDeleteChange() {
120 $user = $this->getMutableTestUser()->getUser();
121 $recentChange = $this->testRecentChangesHelper
->makeDeletedEditRecentChange(
129 0 // number of watching users
131 $cacheEntryFactory = new RCCacheEntryFactory(
133 $this->getMessages(),
136 $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false );
138 $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
140 $this->assertEquals( false, $cacheEntry->watched
, 'watched' );
141 $this->assertEquals( '21:21', $cacheEntry->timestamp
, 'timestamp' );
142 $this->assertEquals( 0, $cacheEntry->numberofWatchingusers
, 'watching users' );
143 $this->assertEquals( false, $cacheEntry->unpatrolled
, 'unpatrolled' );
145 $this->assertRevDel( $cacheEntry );
146 $this->assertTitleLink( 'Zzz', $cacheEntry );
148 $this->assertEquals( 'cur', $cacheEntry->curlink
, 'cur link for delete log or rev' );
149 $this->assertEquals( 'diff', $cacheEntry->difflink
, 'diff link for delete log or rev' );
150 $this->assertEquals( 'prev', $cacheEntry->lastlink
, 'pref link for delete log or rev' );
153 private function assertUserLinks( $user, $cacheEntry ) {
158 'class' => 'new mw-userlink'
162 $cacheEntry->userlink
,
170 'class' => 'mw-usertoollinks'
177 $cacheEntry->usertalklink
,
178 'verify user talk link'
185 'class' => 'mw-usertoollinks'
189 'content' => 'contribs',
192 $cacheEntry->usertalklink
,
193 'verify user tool links'
197 private function assertDeleteLogLink( $cacheEntry ) {
202 'href' => '/wiki/Special:Log/delete',
203 'title' => 'Special:Log/delete'
205 'content' => 'Deletion log'
208 'verify deletion log link'
212 private function assertRevDel( $cacheEntry ) {
217 'class' => 'history-deleted'
219 'content' => '(username removed)'
221 $cacheEntry->userlink
,
222 'verify user link for change with deleted revision and user'
226 private function assertTitleLink( $title, $cacheEntry ) {
231 'href' => '/wiki/' . $title,
241 private function assertQueryLink( $content, $params, $link ) {
245 'content' => $content
248 'assert query link element'
251 foreach ( $params as $key => $value ) {
252 $this->assertRegExp( '/' . $key . '=' . $value . '/', $link, "verify $key link params" );
256 private function getMessages() {
261 'enhancedrc-history' => 'history',
263 'blocklink' => 'block',
264 'history' => 'Page history',
265 'semicolon-separator' => '; ',
266 'pipe-separator' => ' | '
270 private function getContext() {
271 $user = $this->getMutableTestUser()->getUser();
272 $context = $this->testRecentChangesHelper
->getTestContext( $user );
274 $title = Title
::newFromText( 'RecentChanges', NS_SPECIAL
);
275 $context->setTitle( $title );