summaryrefslogtreecommitdiff
blob: 762daed0215cd21d1cc783d82124e50ebc837b1e (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
<?php

namespace MediaWiki\CheckUser\Tests;

use FauxRequest;
use MediaWiki\CheckUser\TokenManager;
use MediaWiki\CheckUser\TokenQueryManager;
use MediaWikiIntegrationTestCase;

/**
 * Test class for TokenQueryManager class
 *
 * @group CheckUser
 *
 * @covers \MediaWiki\CheckUser\TokenQueryManager
 */
class TokenQueryManagerTest extends MediaWikiIntegrationTestCase {

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

	public function testUpdateToken() {
		$tokenManager = $this->getMockTokenManager();
		$tokenQueryManager = $this->getMockBuilder( TokenQueryManager::class )
			->setConstructorArgs( [ $tokenManager ] )
			->setMethods( [ 'getDataFromRequest' ] )
			->getMock();

		$tokenData = [ 'foo' => true, 'bar' => false,  'baz' => 'test' ];

		$tokenQueryManager->method( 'getDataFromRequest' )->willReturn( $tokenData );
		$tokenManager->expects( $this->once() )
			->method( 'encode' )
			->with( $this->anything(), [ 'bar' => true, 'baz' => 'test' ] );

		$tokenQueryManager->updateToken( new FauxRequest(), [ 'foo' => null, 'bar' => true ] );
	}

	public function testGetDataFromRequest() {
		$request = new FauxRequest( [ 'token' => 'token' ] );

		$tokenManager = $this->getMockTokenManager();
		$tokenManager->expects( $this->once() )->method( 'decode' )->with( $this->anything(), 'token' );

		$tokenQueryManager = new TokenQueryManager( $tokenManager );
		$tokenQueryManager->getDataFromRequest( $request );
	}

	public function testGetDataFromRequestWithNoToken() {
		$request = new FauxRequest();

		$tokenManager = $this->getMockTokenManager();
		$tokenQueryManager = new TokenQueryManager( $tokenManager );
		$data = $tokenQueryManager->getDataFromRequest( $request );

		$this->assertSame( [], $data );
	}

	public function testGetDataFromRequestHandlesDecodeException() {
		$tokenManager = $this->getMockTokenManager();
		$tokenManager->method( 'decode' )->willThrowException( new \Exception() );

		$tokenQueryManager = new TokenQueryManager( $tokenManager );
		$request = new FauxRequest( [ 'token' => 'token' ] );
		$data = $tokenQueryManager->getDataFromRequest( $request );

		$this->assertSame( [], $data );
	}
}