summaryrefslogtreecommitdiff
blob: 51af6ac43eefae3def415197e83586a641d1c8d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php

namespace MediaWiki\CheckUser\Tests;

use ExtensionRegistry;
use MediaWiki\CheckUser\PreliminaryCheckPager;
use MediaWiki\CheckUser\PreliminaryCheckService;
use MediaWiki\CheckUser\TokenQueryManager;
use MediaWiki\MediaWikiServices;
use MediaWiki\User\UserGroupManagerFactory;
use MediaWikiIntegrationTestCase;
use RequestContext;
use Wikimedia\Rdbms\ILBFactory;

/**
 * @group CheckUser
 * @covers \MediaWiki\CheckUser\PreliminaryCheckPager
 */
class PreliminaryCheckPagerTest extends MediaWikiIntegrationTestCase {

	/**
	 * @return MockObject|ExtensionRegistry
	 */
	private function getMockExtensionRegistry() {
		return $this->getMockBuilder( ExtensionRegistry::class )
			->disableOriginalConstructor()->getMock();
	}

	/**
	 * @return MockObject|TokenQueryManager
	 */
	private function getMockTokenQueryManager() {
		return $this->getMockBuilder( TokenQueryManager::class )
			->disableOriginalConstructor()->getMock();
	}

	/**
	 * @return MockObject|PreliminaryCheckService
	 */
	private function getMockPreliminaryCheckService() {
		return $this->getMockBuilder( PreliminaryCheckService::class )
			->disableOriginalConstructor()->getMock();
	}

	public function testGetQueryInfoFiltersIPsFromTargets() {
		$registry = $this->getMockExtensionRegistry();
		$registry->method( 'isLoaded' )->willReturn( true );

		$tokenQueryManager = $this->getMockTokenQueryManager();
		$tokenQueryManager->method( 'getDataFromRequest' )->willReturn( [
			'targets' => [ 'UserA', 'UserB', '1.2.3.4' ]
		] );

		$lbf = $this->getMockBuilder( ILBFactory::class )
			->disableOriginalConstructor()->getMock();

		$preliminaryCheckService = new PreliminaryCheckService(
			$lbf,
			$registry,
			$this->createNoOpMock( UserGroupManagerFactory::class ),
			'testwiki'
		);

		$services = MediaWikiServices::getInstance();
		$pager = new PreliminaryCheckPager( RequestContext::getMain(),
			$services->getLinkRenderer(),
			$services->getNamespaceInfo(),
			$tokenQueryManager,
			$registry,
			$preliminaryCheckService
		);

		$result = $pager->getQueryInfo();

		$expected = [
			'tables' => 'localuser',
			'fields' => [
				'lu_name',
				'lu_wiki',
			],
			'conds' => [ 'lu_name' => [ 'UserA', 'UserB' ] ]
		];
		$this->assertSame( $expected, $result );
	}

	public function testGetIndexFieldLocal() {
		$services = MediaWikiServices::getInstance();
		$pager = new PreliminaryCheckPager(
			RequestContext::getMain(),
			$services->getLinkRenderer(),
			$services->getNamespaceInfo(),
			$services->get( 'CheckUserTokenQueryManager' ),
			$this->getMockExtensionRegistry(),
			$this->getMockPreliminaryCheckService()
		);
		$this->assertEquals( 'user_name', $pager->getIndexfield() );
	}

	public function testGetIndexFieldGlobal() {
		$services = MediaWikiServices::getInstance();
		$registry = $this->getMockExtensionRegistry();
		$preliminaryCheckService = $this->getMockPreliminaryCheckService();
		$pager = $this->getMockBuilder( PreliminaryCheckPager::class )
			->setConstructorArgs( [ RequestContext::getMain(),
				$services->getLinkRenderer(),
				$services->getNamespaceInfo(),
				$services->get( 'CheckUserTokenQueryManager' ),
				$registry,
				$preliminaryCheckService
			 ] )
			->setMethods( [ 'isGlobalCheck' ] )
			->getMock();

		$pager->method( 'isGlobalCheck' )->willReturn( true );
		$this->assertEquals( [ [ 'lu_name', 'lu_wiki' ] ], $pager->getIndexfield() );
	}
}