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