File: HTMLUserTextFieldTest.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (134 lines) | stat: -rw-r--r-- 3,553 bytes parent folder | download
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php

namespace MediaWiki\Tests\Integration\HTMLForm\Field;

use MediaWiki\HTMLForm\Field\HTMLUserTextField;
use MediaWiki\HTMLForm\HTMLForm;
use MediaWiki\Message\Message;
use MediaWiki\User\UserFactory;
use MediaWikiIntegrationTestCase;

/**
 * @covers \MediaWiki\HTMLForm\Field\HTMLUserTextField
 */
class HTMLUserTextFieldTest extends MediaWikiIntegrationTestCase {

	/**
	 * @dataProvider provideInputs
	 */
	public function testInputs( array $config, string $value, $expected ) {
		$origUserFactory = $this->getServiceContainer()->getUserFactory();
		$userFactory = $this->createMock( UserFactory::class );
		$userFactory->method( 'newFromName' )->willReturnCallback( static function ( ...$params ) use ( $origUserFactory ) {
			$user = $origUserFactory->newFromName( ...$params );
			if ( $user ) {
				$user->mId = 0;
				$user->setItemLoaded( 'id' );
			}
			return $user;
		} );
		$this->setService( 'UserFactory', $userFactory );
		$htmlForm = $this->createMock( HTMLForm::class );
		$htmlForm->method( 'msg' )->willReturnCallback( 'wfMessage' );

		$field = new HTMLUserTextField( $config + [ 'fieldname' => 'foo', 'parent' => $htmlForm ] );
		$result = $field->validate( $value, [ 'foo' => $value ] );
		if ( $result instanceof Message ) {
			$this->assertSame( $expected, $result->getKey() );
		} else {
			$this->assertSame( $expected, $result );
		}
	}

	public static function provideInputs() {
		return [
			'valid username' => [
				[],
				'SomeUser',
				true
			],
			'external username when not allowed' => [
				[],
				'imported>SomeUser',
				'htmlform-user-not-valid'
			],
			'external username when allowed' => [
				[ 'external' => true ],
				'imported>SomeUser',
				true
			],
			'valid IP' => [
				[ 'ipallowed' => true ],
				'1.2.3.4',
				true
			],
			'valid IP, but not allowed' => [
				[ 'ipallowed' => false ],
				'1.2.3.4',
				'htmlform-user-not-valid'
			],
			'invalid IP' => [
				[ 'ipallowed' => true ],
				'1.2.3.456',
				'htmlform-user-not-valid'
			],
			'valid usemod IP' => [
				[ 'usemodwiki-ipallowed' => true, 'ipallowed' => true, 'exists' => true ],
				'1.2.3.xxx',
				true,
			],
			'valid usemod IP, but not allowed' => [
				[ 'usemodwiki-ipallowed' => false, 'ipallowed' => true, 'exists' => true ],
				'1.2.3.xxx',
				'htmlform-user-not-valid',
			],
			'invalid usemod IP because not enough "x"' => [
				[ 'usemodwiki-ipallowed' => true, 'ipallowed' => true, 'exists' => true ],
				'1.2.3.x',
				'htmlform-user-not-exists',
			],
			'invalid usemod IP because capital "x"' => [
				[ 'usemodwiki-ipallowed' => true, 'ipallowed' => true, 'exists' => true ],
				'1.2.3.XXX',
				'htmlform-user-not-exists',
			],
			'invalid usemod IP because first part not valid IPv4' => [
				[ 'usemodwiki-ipallowed' => true, 'ipallowed' => true, 'exists' => true ],
				'1.2.456.xxx',
				'htmlform-user-not-valid',
			],
			'valid IP range' => [
				[ 'iprange' => true ],
				'1.2.3.4/30',
				true
			],
			'valid IP range, but not allowed' => [
				[ 'iprange' => false ],
				'1.2.3.4/30',
				'htmlform-user-not-valid'
			],
			'invalid IP range (bad syntax)' => [
				[ 'iprange' => true ],
				'1.2.3.4/x',
				'htmlform-user-not-valid'
			],
			'invalid IP range (exceeds limits)' => [
				[
					'iprange' => true,
					'iprangelimits' => [
						'IPv4' => 11,
						'IPv6' => 11,
					],
				],
				'1.2.3.4/10',
				'ip_range_exceeded'
			],
			'valid username, but does not exist' => [
				[ 'exists' => true ],
				'SomeUser',
				'htmlform-user-not-exists'
			],
		];
	}

}