Merge "i18n: Drop number_of_watching_users_pageview, unused since wgPageShowWatchingU...
[lhc/web/wiklou.git] / tests / phpunit / includes / specials / ContribsPagerTest.php
1 <?php
2
3 use Wikimedia\TestingAccessWrapper;
4
5 /**
6 * @group Database
7 */
8 class ContribsPagerTest extends MediaWikiTestCase {
9 /** @var ContribsPager */
10 private $pager;
11
12 function setUp() {
13 $context = new RequestContext();
14 $this->pager = new ContribsPager( $context, [
15 'start' => '2017-01-01',
16 'end' => '2017-02-02',
17 ] );
18
19 parent::setUp();
20 }
21
22 /**
23 * @covers ContribsPager::processDateFilter
24 * @dataProvider dateFilterOptionProcessingProvider
25 * @param array $inputOpts Input options
26 * @param array $expectedOpts Expected options
27 */
28 public function testDateFilterOptionProcessing( array $inputOpts, array $expectedOpts ) {
29 $this->assertArraySubset( $expectedOpts, ContribsPager::processDateFilter( $inputOpts ) );
30 }
31
32 public static function dateFilterOptionProcessingProvider() {
33 return [
34 [ [ 'start' => '2016-05-01',
35 'end' => '2016-06-01',
36 'year' => null,
37 'month' => null ],
38 [ 'start' => '2016-05-01',
39 'end' => '2016-06-01' ] ],
40 [ [ 'start' => '2016-05-01',
41 'end' => '2016-06-01',
42 'year' => '',
43 'month' => '' ],
44 [ 'start' => '2016-05-01',
45 'end' => '2016-06-01' ] ],
46 [ [ 'start' => '2016-05-01',
47 'end' => '2016-06-01',
48 'year' => '2012',
49 'month' => '5' ],
50 [ 'start' => '',
51 'end' => '2012-05-31' ] ],
52 [ [ 'start' => '',
53 'end' => '',
54 'year' => '2012',
55 'month' => '5' ],
56 [ 'start' => '',
57 'end' => '2012-05-31' ] ],
58 [ [ 'start' => '',
59 'end' => '',
60 'year' => '2012',
61 'month' => '' ],
62 [ 'start' => '',
63 'end' => '2012-12-31' ] ],
64 ];
65 }
66
67 /**
68 * @covers ContribsPager::isQueryableRange
69 * @dataProvider provideQueryableRanges
70 */
71 public function testQueryableRanges( $ipRange ) {
72 $this->setMwGlobals( [
73 'wgRangeContributionsCIDRLimit' => [
74 'IPv4' => 16,
75 'IPv6' => 32,
76 ],
77 ] );
78
79 $this->assertTrue(
80 $this->pager->isQueryableRange( $ipRange ),
81 "$ipRange is a queryable IP range"
82 );
83 }
84
85 public function provideQueryableRanges() {
86 return [
87 [ '116.17.184.5/32' ],
88 [ '0.17.184.5/16' ],
89 [ '2000::/32' ],
90 [ '2001:db8::/128' ],
91 ];
92 }
93
94 /**
95 * @covers ContribsPager::isQueryableRange
96 * @dataProvider provideUnqueryableRanges
97 */
98 public function testUnqueryableRanges( $ipRange ) {
99 $this->setMwGlobals( [
100 'wgRangeContributionsCIDRLimit' => [
101 'IPv4' => 16,
102 'IPv6' => 32,
103 ],
104 ] );
105
106 $this->assertFalse(
107 $this->pager->isQueryableRange( $ipRange ),
108 "$ipRange is not a queryable IP range"
109 );
110 }
111
112 public function provideUnqueryableRanges() {
113 return [
114 [ '116.17.184.5/33' ],
115 [ '0.17.184.5/15' ],
116 [ '2000::/31' ],
117 [ '2001:db8::/9999' ],
118 ];
119 }
120
121 /**
122 * @covers \ContribsPager::getExtraSortFields
123 * @covers \ContribsPager::getIndexField
124 * @covers \ContribsPager::getQueryInfo
125 */
126 public function testUniqueSortOrderWithoutIpChanges() {
127 $pager = new ContribsPager( new RequestContext(), [
128 'start' => '',
129 'end' => '',
130 ] );
131
132 /** @var ContribsPager $pager */
133 $pager = TestingAccessWrapper::newFromObject( $pager );
134 $queryInfo = $pager->buildQueryInfo( '', 1, false );
135
136 $this->assertNotContains( 'ip_changes', $queryInfo[0] );
137 $this->assertArrayNotHasKey( 'ip_changes', $queryInfo[5] );
138 $this->assertContains( 'rev_timestamp', $queryInfo[1] );
139 $this->assertContains( 'rev_id', $queryInfo[1] );
140 $this->assertSame( [ 'rev_timestamp DESC', 'rev_id DESC' ], $queryInfo[4]['ORDER BY'] );
141 }
142
143 /**
144 * @covers \ContribsPager::getExtraSortFields
145 * @covers \ContribsPager::getIndexField
146 * @covers \ContribsPager::getQueryInfo
147 */
148 public function testUniqueSortOrderOnIpChanges() {
149 $pager = new ContribsPager( new RequestContext(), [
150 'target' => '116.17.184.5/32',
151 'start' => '',
152 'end' => '',
153 ] );
154
155 /** @var ContribsPager $pager */
156 $pager = TestingAccessWrapper::newFromObject( $pager );
157 $queryInfo = $pager->buildQueryInfo( '', 1, false );
158
159 $this->assertContains( 'ip_changes', $queryInfo[0] );
160 $this->assertArrayHasKey( 'ip_changes', $queryInfo[5] );
161 $this->assertSame( [ 'ipc_rev_timestamp DESC', 'ipc_rev_id DESC' ], $queryInfo[4]['ORDER BY'] );
162 }
163
164 }