]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - tests/phpunit/includes/changes/RecentChangeTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / includes / changes / RecentChangeTest.php
1 <?php
2 use Wikimedia\ScopedCallback;
3
4 /**
5  * @group Database
6  */
7 class RecentChangeTest extends MediaWikiTestCase {
8         protected $title;
9         protected $target;
10         protected $user;
11         protected $user_comment;
12         protected $context;
13
14         public function setUp() {
15                 parent::setUp();
16
17                 $this->title = Title::newFromText( 'SomeTitle' );
18                 $this->target = Title::newFromText( 'TestTarget' );
19                 $this->user = User::newFromName( 'UserName' );
20
21                 $this->user_comment = '<User comment about action>';
22                 $this->context = RequestContext::newExtraneousContext( $this->title );
23         }
24
25         /**
26          * @covers RecentChange::newFromRow
27          * @covers RecentChange::loadFromRow
28          */
29         public function testNewFromRow() {
30                 $row = new stdClass();
31                 $row->rc_foo = 'AAA';
32                 $row->rc_timestamp = '20150921134808';
33                 $row->rc_deleted = 'bar';
34                 $row->rc_comment_text = 'comment';
35                 $row->rc_comment_data = null;
36
37                 $rc = RecentChange::newFromRow( $row );
38
39                 $expected = [
40                         'rc_foo' => 'AAA',
41                         'rc_timestamp' => '20150921134808',
42                         'rc_deleted' => 'bar',
43                         'rc_comment' => 'comment',
44                         'rc_comment_text' => 'comment',
45                         'rc_comment_data' => null,
46                 ];
47                 $this->assertEquals( $expected, $rc->getAttributes() );
48
49                 $row = new stdClass();
50                 $row->rc_foo = 'AAA';
51                 $row->rc_timestamp = '20150921134808';
52                 $row->rc_deleted = 'bar';
53                 $row->rc_comment = 'comment';
54
55                 MediaWiki\suppressWarnings();
56                 $rc = RecentChange::newFromRow( $row );
57                 MediaWiki\restoreWarnings();
58
59                 $expected = [
60                         'rc_foo' => 'AAA',
61                         'rc_timestamp' => '20150921134808',
62                         'rc_deleted' => 'bar',
63                         'rc_comment' => 'comment',
64                         'rc_comment_text' => 'comment',
65                         'rc_comment_data' => null,
66                 ];
67                 $this->assertEquals( $expected, $rc->getAttributes() );
68         }
69
70         /**
71          * @covers RecentChange::parseParams
72          */
73         public function testParseParams() {
74                 $params = [
75                         'root' => [
76                                 'A' => 1,
77                                 'B' => 'two'
78                         ]
79                 ];
80
81                 $this->assertParseParams(
82                         $params,
83                         'a:1:{s:4:"root";a:2:{s:1:"A";i:1;s:1:"B";s:3:"two";}}'
84                 );
85
86                 $this->assertParseParams(
87                         null,
88                         null
89                 );
90
91                 $this->assertParseParams(
92                         null,
93                         serialize( false )
94                 );
95
96                 $this->assertParseParams(
97                         null,
98                         'not-an-array'
99                 );
100         }
101
102         /**
103          * @param array $expectedParseParams
104          * @param string|null $rawRcParams
105          */
106         protected function assertParseParams( $expectedParseParams, $rawRcParams ) {
107                 $rc = new RecentChange;
108                 $rc->setAttribs( [ 'rc_params' => $rawRcParams ] );
109
110                 $actualParseParams = $rc->parseParams();
111
112                 $this->assertEquals( $expectedParseParams, $actualParseParams );
113         }
114
115         /**
116          * @return array
117          */
118         public function provideIsInRCLifespan() {
119                 return [
120                         [ 6000, -3000, 0, true ],
121                         [ 3000, -6000, 0, false ],
122                         [ 6000, -3000, 6000, true ],
123                         [ 3000, -6000, 6000, true ],
124                 ];
125         }
126
127         /**
128          * @covers RecentChange::isInRCLifespan
129          * @dataProvider provideIsInRCLifespan
130          */
131         public function testIsInRCLifespan( $maxAge, $offset, $tolerance, $expected ) {
132                 $this->setMwGlobals( 'wgRCMaxAge', $maxAge );
133                 // Calculate this here instead of the data provider because the provider
134                 // is expanded early on and the full test suite may take longer than 100 minutes
135                 // when coverage is enabled.
136                 $timestamp = time() + $offset;
137                 $this->assertEquals( $expected, RecentChange::isInRCLifespan( $timestamp, $tolerance ) );
138         }
139
140         public function provideRCTypes() {
141                 return [
142                         [ RC_EDIT, 'edit' ],
143                         [ RC_NEW, 'new' ],
144                         [ RC_LOG, 'log' ],
145                         [ RC_EXTERNAL, 'external' ],
146                         [ RC_CATEGORIZE, 'categorize' ],
147                 ];
148         }
149
150         /**
151          * @dataProvider provideRCTypes
152          * @covers RecentChange::parseFromRCType
153          */
154         public function testParseFromRCType( $rcType, $type ) {
155                 $this->assertEquals( $type, RecentChange::parseFromRCType( $rcType ) );
156         }
157
158         /**
159          * @dataProvider provideRCTypes
160          * @covers RecentChange::parseToRCType
161          */
162         public function testParseToRCType( $rcType, $type ) {
163                 $this->assertEquals( $rcType, RecentChange::parseToRCType( $type ) );
164         }
165
166         /**
167          * @return PHPUnit_Framework_MockObject_MockObject|PageProps
168          */
169         private function getMockPageProps() {
170                 return $this->getMockBuilder( PageProps::class )
171                         ->disableOriginalConstructor()
172                         ->getMock();
173         }
174
175         public function provideCategoryContent() {
176                 return [
177                         [ true ],
178                         [ false ],
179                 ];
180         }
181
182         /**
183          * @dataProvider provideCategoryContent
184          * @covers RecentChange::newForCategorization
185          */
186         public function testHiddenCategoryChange( $isHidden ) {
187                 $categoryTitle = Title::newFromText( 'CategoryPage', NS_CATEGORY );
188
189                 $pageProps = $this->getMockPageProps();
190                 $pageProps->expects( $this->once() )
191                         ->method( 'getProperties' )
192                         ->with( $categoryTitle, 'hiddencat' )
193                         ->will( $this->returnValue( $isHidden ? [ $categoryTitle->getArticleID() => '' ] : [] ) );
194
195                 $scopedOverride = PageProps::overrideInstance( $pageProps );
196
197                 $rc = RecentChange::newForCategorization(
198                         '0',
199                         $categoryTitle,
200                         $this->user,
201                         $this->user_comment,
202                         $this->title,
203                         $categoryTitle->getLatestRevID(),
204                         $categoryTitle->getLatestRevID(),
205                         '0',
206                         false
207                 );
208
209                 $this->assertEquals( $isHidden, $rc->getParam( 'hidden-cat' ) );
210
211                 ScopedCallback::consume( $scopedOverride );
212         }
213 }