summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/includes/auth/AuthenticationResponseTest.php
blob: 194b49e01acf7addc6d7cc3d4e76b3d4002ffcc9 (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
<?php

namespace MediaWiki\Auth;

/**
 * @group AuthManager
 * @covers MediaWiki\Auth\AuthenticationResponse
 */
class AuthenticationResponseTest extends \MediaWikiTestCase {
	/**
	 * @dataProvider provideConstructors
	 * @param string $constructor
	 * @param array $args
	 * @param array|Exception $expect
	 */
	public function testConstructors( $constructor, $args, $expect ) {
		if ( is_array( $expect ) ) {
			$res = new AuthenticationResponse();
			$res->messageType = 'warning';
			foreach ( $expect as $field => $value ) {
				$res->$field = $value;
			}
			$ret = call_user_func_array( "MediaWiki\\Auth\\AuthenticationResponse::$constructor", $args );
			$this->assertEquals( $res, $ret );
		} else {
			try {
				call_user_func_array( "MediaWiki\\Auth\\AuthenticationResponse::$constructor", $args );
				$this->fail( 'Expected exception not thrown' );
			} catch ( \Exception $ex ) {
				$this->assertEquals( $expect, $ex );
			}
		}
	}

	public function provideConstructors() {
		$req = $this->getMockForAbstractClass( AuthenticationRequest::class );
		$msg = new \Message( 'mainpage' );

		return [
			[ 'newPass', [], [
				'status' => AuthenticationResponse::PASS,
			] ],
			[ 'newPass', [ 'name' ], [
				'status' => AuthenticationResponse::PASS,
				'username' => 'name',
			] ],
			[ 'newPass', [ 'name', null ], [
				'status' => AuthenticationResponse::PASS,
				'username' => 'name',
			] ],

			[ 'newFail', [ $msg ], [
				'status' => AuthenticationResponse::FAIL,
				'message' => $msg,
				'messageType' => 'error',
			] ],

			[ 'newRestart', [ $msg ], [
				'status' => AuthenticationResponse::RESTART,
				'message' => $msg,
			] ],

			[ 'newAbstain', [], [
				'status' => AuthenticationResponse::ABSTAIN,
			] ],

			[ 'newUI', [ [ $req ], $msg ], [
				'status' => AuthenticationResponse::UI,
				'neededRequests' => [ $req ],
				'message' => $msg,
				'messageType' => 'warning',
			] ],

			[ 'newUI', [ [ $req ], $msg, 'warning' ], [
				'status' => AuthenticationResponse::UI,
				'neededRequests' => [ $req ],
				'message' => $msg,
				'messageType' => 'warning',
			] ],

			[ 'newUI', [ [ $req ], $msg, 'error' ], [
				'status' => AuthenticationResponse::UI,
				'neededRequests' => [ $req ],
				'message' => $msg,
				'messageType' => 'error',
			] ],
			[ 'newUI', [ [], $msg ],
				new \InvalidArgumentException( '$reqs may not be empty' )
			],

			[ 'newRedirect', [ [ $req ], 'http://example.org/redir' ], [
				'status' => AuthenticationResponse::REDIRECT,
				'neededRequests' => [ $req ],
				'redirectTarget' => 'http://example.org/redir',
			] ],
			[
				'newRedirect',
				[ [ $req ], 'http://example.org/redir', [ 'foo' => 'bar' ] ],
				[
					'status' => AuthenticationResponse::REDIRECT,
					'neededRequests' => [ $req ],
					'redirectTarget' => 'http://example.org/redir',
					'redirectApiData' => [ 'foo' => 'bar' ],
				]
			],
			[ 'newRedirect', [ [], 'http://example.org/redir' ],
				new \InvalidArgumentException( '$reqs may not be empty' )
			],
		];
	}

}