3 use MediaWiki\MediaWikiServices
;
4 use Wikimedia\TestingAccessWrapper
;
9 class ContribsPagerTest
extends MediaWikiTestCase
{
10 /** @var ContribsPager */
13 /** @var LinkRenderer */
14 private $linkRenderer;
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
);
28 * @covers ContribsPager::processDateFilter
29 * @dataProvider dateFilterOptionProcessingProvider
30 * @param array $inputOpts Input options
31 * @param array $expectedOpts Expected options
33 public function testDateFilterOptionProcessing( array $inputOpts, array $expectedOpts ) {
34 $this->assertArraySubset( $expectedOpts, ContribsPager
::processDateFilter( $inputOpts ) );
37 public static function dateFilterOptionProcessingProvider() {
39 [ [ 'start' => '2016-05-01',
40 'end' => '2016-06-01',
43 [ 'start' => '2016-05-01',
44 'end' => '2016-06-01' ] ],
45 [ [ 'start' => '2016-05-01',
46 'end' => '2016-06-01',
49 [ 'start' => '2016-05-01',
50 'end' => '2016-06-01' ] ],
51 [ [ 'start' => '2016-05-01',
52 'end' => '2016-06-01',
56 'end' => '2012-05-31' ] ],
62 'end' => '2012-05-31' ] ],
68 'end' => '2012-12-31' ] ],
73 * @covers ContribsPager::isQueryableRange
74 * @dataProvider provideQueryableRanges
76 public function testQueryableRanges( $ipRange ) {
77 $this->setMwGlobals( [
78 'wgRangeContributionsCIDRLimit' => [
85 $this->pager
->isQueryableRange( $ipRange ),
86 "$ipRange is a queryable IP range"
90 public function provideQueryableRanges() {
92 [ '116.17.184.5/32' ],
100 * @covers ContribsPager::isQueryableRange
101 * @dataProvider provideUnqueryableRanges
103 public function testUnqueryableRanges( $ipRange ) {
104 $this->setMwGlobals( [
105 'wgRangeContributionsCIDRLimit' => [
112 $this->pager
->isQueryableRange( $ipRange ),
113 "$ipRange is not a queryable IP range"
117 public function provideUnqueryableRanges() {
119 [ '116.17.184.5/33' ],
122 [ '2001:db8::/9999' ],
127 * @covers \ContribsPager::getExtraSortFields
128 * @covers \ContribsPager::getIndexField
129 * @covers \ContribsPager::getQueryInfo
131 public function testUniqueSortOrderWithoutIpChanges() {
132 $pager = new ContribsPager( new RequestContext(), [
135 ], $this->linkRenderer
);
137 /** @var ContribsPager $pager */
138 $pager = TestingAccessWrapper
::newFromObject( $pager );
139 $queryInfo = $pager->buildQueryInfo( '', 1, false );
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'] );
149 * @covers \ContribsPager::getExtraSortFields
150 * @covers \ContribsPager::getIndexField
151 * @covers \ContribsPager::getQueryInfo
153 public function testUniqueSortOrderOnIpChanges() {
154 $pager = new ContribsPager( new RequestContext(), [
155 'target' => '116.17.184.5/32',
158 ], $this->linkRenderer
);
160 /** @var ContribsPager $pager */
161 $pager = TestingAccessWrapper
::newFromObject( $pager );
162 $queryInfo = $pager->buildQueryInfo( '', 1, false );
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'] );