Merge "Use descriptive key for array of in a Special:EditWatchlist line"
[lhc/web/wiklou.git] / tests / phpunit / includes / changes / EnhancedChangesListTest.php
1 <?php
2
3 /**
4 * @covers EnhancedChangesList
5 *
6 * @group Database
7 *
8 * @licence GNU GPL v2+
9 * @author Katie Filbert < aude.wiki@gmail.com >
10 */
11 class EnhancedChangesListTest 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 public function testBeginRecentChangesList_styleModules() {
25 $enhancedChangesList = $this->newEnhancedChangesList();
26 $enhancedChangesList->beginRecentChangesList();
27
28 $styleModules = $enhancedChangesList->getOutput()->getModuleStyles();
29
30 $this->assertContains(
31 'mediawiki.special.changeslist',
32 $styleModules,
33 'has mediawiki.special.changeslist'
34 );
35
36 $this->assertContains(
37 'mediawiki.special.changeslist.enhanced',
38 $styleModules,
39 'has mediawiki.special.changeslist.enhanced'
40 );
41 }
42
43 public function testBeginRecentChangesList_jsModules() {
44 $enhancedChangesList = $this->newEnhancedChangesList();
45 $enhancedChangesList->beginRecentChangesList();
46
47 $modules = $enhancedChangesList->getOutput()->getModules();
48
49 $this->assertContains( 'jquery.makeCollapsible', $modules, 'has jquery.makeCollapsible' );
50 $this->assertContains( 'mediawiki.icon', $modules, 'has mediawiki.icon' );
51 }
52
53 public function testBeginRecentChangesList_html() {
54 $enhancedChangesList = $this->newEnhancedChangesList();
55 $html = $enhancedChangesList->beginRecentChangesList();
56
57 $this->assertEquals( '<div class="mw-changeslist">', $html );
58 }
59
60 /**
61 * @todo more tests
62 */
63 public function testRecentChangesLine() {
64 $enhancedChangesList = $this->newEnhancedChangesList();
65 $enhancedChangesList->beginRecentChangesList();
66
67 $recentChange = $this->getEditChange( '20131103092153' );
68 $html = $enhancedChangesList->recentChangesLine( $recentChange, false );
69
70 $this->assertInternalType( 'string', $html );
71
72 $recentChange2 = $this->getEditChange( '20131103092253' );
73 $html = $enhancedChangesList->recentChangesLine( $recentChange2, false );
74
75 $this->assertEquals( '', $html );
76 }
77
78 /**
79 * @todo more tests for actual formatting, this is more of a smoke test
80 */
81 public function testEndRecentChangesList() {
82 $enhancedChangesList = $this->newEnhancedChangesList();
83 $enhancedChangesList->beginRecentChangesList();
84
85 $recentChange = $this->getEditChange( '20131103092153' );
86 $enhancedChangesList->recentChangesLine( $recentChange, false );
87
88 $recentChange2 = $this->getEditChange( '20131103092253' );
89 $enhancedChangesList->recentChangesLine( $recentChange2, false );
90
91 $html = $enhancedChangesList->endRecentChangesList();
92
93 preg_match_all( '/td class="mw-enhanced-rc-nested"/', $html, $matches );
94 $this->assertCount( 2, $matches[0] );
95 }
96
97 /**
98 * @return EnhancedChangesList
99 */
100 private function newEnhancedChangesList() {
101 $user = User::newFromId( 0 );
102 $context = $this->testRecentChangesHelper->getTestContext( $user );
103
104 return new EnhancedChangesList( $context );
105 }
106
107 /**
108 * @return RecentChange
109 */
110 private function getEditChange( $timestamp ) {
111 $user = $this->getTestUser();
112 $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
113 $user, 'Cat', $timestamp, 5, 191, 190, 0, 0
114 );
115
116 return $recentChange;
117 }
118
119 /**
120 * @return User
121 */
122 private function getTestUser() {
123 $user = User::newFromName( 'TestRecentChangesUser' );
124
125 if ( !$user->getId() ) {
126 $user->addToDatabase();
127 }
128
129 return $user;
130 }
131
132 }