3 use Wikimedia\TestingAccessWrapper
;
8 class ContribsPagerTest
extends MediaWikiTestCase
{
9 /** @var ContribsPager */
13 $context = new RequestContext();
14 $this->pager
= new ContribsPager( $context, [
15 'start' => '2017-01-01',
16 'end' => '2017-02-02',
23 * @covers ContribsPager::processDateFilter
24 * @dataProvider dateFilterOptionProcessingProvider
25 * @param array $inputOpts Input options
26 * @param array $expectedOpts Expected options
28 public function testDateFilterOptionProcessing( array $inputOpts, array $expectedOpts ) {
29 $this->assertArraySubset( $expectedOpts, ContribsPager
::processDateFilter( $inputOpts ) );
32 public static function dateFilterOptionProcessingProvider() {
34 [ [ 'start' => '2016-05-01',
35 'end' => '2016-06-01',
38 [ 'start' => '2016-05-01',
39 'end' => '2016-06-01' ] ],
40 [ [ 'start' => '2016-05-01',
41 'end' => '2016-06-01',
44 [ 'start' => '2016-05-01',
45 'end' => '2016-06-01' ] ],
46 [ [ 'start' => '2016-05-01',
47 'end' => '2016-06-01',
51 'end' => '2012-05-31' ] ],
57 'end' => '2012-05-31' ] ],
63 'end' => '2012-12-31' ] ],
68 * @covers ContribsPager::isQueryableRange
69 * @dataProvider provideQueryableRanges
71 public function testQueryableRanges( $ipRange ) {
72 $this->setMwGlobals( [
73 'wgRangeContributionsCIDRLimit' => [
80 $this->pager
->isQueryableRange( $ipRange ),
81 "$ipRange is a queryable IP range"
85 public function provideQueryableRanges() {
87 [ '116.17.184.5/32' ],
95 * @covers ContribsPager::isQueryableRange
96 * @dataProvider provideUnqueryableRanges
98 public function testUnqueryableRanges( $ipRange ) {
99 $this->setMwGlobals( [
100 'wgRangeContributionsCIDRLimit' => [
107 $this->pager
->isQueryableRange( $ipRange ),
108 "$ipRange is not a queryable IP range"
112 public function provideUnqueryableRanges() {
114 [ '116.17.184.5/33' ],
117 [ '2001:db8::/9999' ],
122 * @covers \ContribsPager::getExtraSortFields
123 * @covers \ContribsPager::getIndexField
124 * @covers \ContribsPager::getQueryInfo
126 public function testUniqueSortOrderWithoutIpChanges() {
127 $pager = new ContribsPager( new RequestContext(), [
132 /** @var ContribsPager $pager */
133 $pager = TestingAccessWrapper
::newFromObject( $pager );
134 $queryInfo = $pager->buildQueryInfo( '', 1, false );
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'] );
144 * @covers \ContribsPager::getExtraSortFields
145 * @covers \ContribsPager::getIndexField
146 * @covers \ContribsPager::getQueryInfo
148 public function testUniqueSortOrderOnIpChanges() {
149 $pager = new ContribsPager( new RequestContext(), [
150 'target' => '116.17.184.5/32',
155 /** @var ContribsPager $pager */
156 $pager = TestingAccessWrapper
::newFromObject( $pager );
157 $queryInfo = $pager->buildQueryInfo( '', 1, false );
159 $this->assertContains( 'ip_changes', $queryInfo[0] );
160 $this->assertArrayHasKey( 'ip_changes', $queryInfo[5] );
161 $this->assertSame( 'ipc_rev_timestamp', $queryInfo[1]['rev_timestamp'] );
162 $this->assertSame( 'ipc_rev_id', $queryInfo[1]['rev_id'] );
163 $this->assertSame( [ 'rev_timestamp DESC', 'rev_id DESC' ], $queryInfo[4]['ORDER BY'] );