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
|
<?php
namespace MediaWiki\Auth;
/**
* @group AuthManager
*/
abstract class AuthenticationRequestTestCase extends \MediaWikiTestCase {
abstract protected function getInstance( array $args = [] );
/**
* @dataProvider provideGetFieldInfo
*/
public function testGetFieldInfo( array $args ) {
$info = $this->getInstance( $args )->getFieldInfo();
$this->assertType( 'array', $info );
foreach ( $info as $field => $data ) {
$this->assertType( 'array', $data, "Field $field" );
$this->assertArrayHasKey( 'type', $data, "Field $field" );
$this->assertArrayHasKey( 'label', $data, "Field $field" );
$this->assertInstanceOf( \Message::class, $data['label'], "Field $field, label" );
if ( $data['type'] !== 'null' ) {
$this->assertArrayHasKey( 'help', $data, "Field $field" );
$this->assertInstanceOf( \Message::class, $data['help'], "Field $field, help" );
}
if ( isset( $data['optional'] ) ) {
$this->assertType( 'bool', $data['optional'], "Field $field, optional" );
}
if ( isset( $data['image'] ) ) {
$this->assertType( 'string', $data['image'], "Field $field, image" );
}
if ( isset( $data['sensitive'] ) ) {
$this->assertType( 'bool', $data['sensitive'], "Field $field, sensitive" );
}
if ( $data['type'] === 'password' ) {
$this->assertTrue( !empty( $data['sensitive'] ),
"Field $field, password field must be sensitive" );
}
switch ( $data['type'] ) {
case 'string':
case 'password':
case 'hidden':
break;
case 'select':
case 'multiselect':
$this->assertArrayHasKey( 'options', $data, "Field $field" );
$this->assertType( 'array', $data['options'], "Field $field, options" );
foreach ( $data['options'] as $val => $msg ) {
$this->assertInstanceOf( \Message::class, $msg, "Field $field, option $val" );
}
break;
case 'checkbox':
break;
case 'button':
break;
case 'null':
break;
default:
$this->fail( "Field $field, unknown type " . $data['type'] );
break;
}
}
}
public static function provideGetFieldInfo() {
return [
[ [] ]
];
}
/**
* @dataProvider provideLoadFromSubmission
* @param array $args
* @param array $data
* @param array|bool $expectState
*/
public function testLoadFromSubmission( array $args, array $data, $expectState ) {
$instance = $this->getInstance( $args );
$ret = $instance->loadFromSubmission( $data );
if ( is_array( $expectState ) ) {
$this->assertTrue( $ret );
$expect = call_user_func( [ get_class( $instance ), '__set_state' ], $expectState );
$this->assertEquals( $expect, $instance );
} else {
$this->assertFalse( $ret );
}
}
abstract public function provideLoadFromSubmission();
}
|