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
|
<?php
namespace MediaWiki\Tests\Auth;
use MediaWiki\Auth\AuthenticationRequest;
use MediaWiki\Message\Message;
use MediaWikiIntegrationTestCase;
use ReflectionMethod;
use const E_USER_DEPRECATED;
/**
* @group AuthManager
*/
abstract class AuthenticationRequestTestCase extends MediaWikiIntegrationTestCase {
/**
* @param array $args
*
* @return AuthenticationRequest
*/
abstract protected function getInstance( array $args = [] );
/**
* @dataProvider provideGetFieldInfo
*/
public function testGetFieldInfo( array $args ) {
$info = $this->getInstance( $args )->getFieldInfo();
$this->assertIsArray( $info );
foreach ( $info as $field => $data ) {
$this->assertIsArray( $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->assertIsBool( $data['optional'], "Field $field, optional" );
}
if ( isset( $data['image'] ) ) {
$this->assertIsString( $data['image'], "Field $field, image" );
}
if ( isset( $data['sensitive'] ) ) {
$this->assertIsBool( $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->assertIsArray( $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 provideLoadFromSubmissionStatically
* @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 = $instance::__set_state( $expectState );
$this->assertEquals( $expect, $instance );
} else {
$this->assertFalse( $ret );
}
}
// abstract public static function provideLoadFromSubmission();
/**
* Tempory override to make provideLoadFromSubmission static.
* See T332865.
*/
final public static function provideLoadFromSubmissionStatically() {
$reflectionMethod = new ReflectionMethod( static::class, 'provideLoadFromSubmission' );
if ( $reflectionMethod->isStatic() ) {
return $reflectionMethod->invoke( null );
}
trigger_error(
'overriding provideLoadFromSubmission as an instance method is deprecated. (' .
$reflectionMethod->getFileName() . ':' . $reflectionMethod->getEndLine() . ')',
E_USER_DEPRECATED
);
return $reflectionMethod->invoke( new static() );
}
}
/** @deprecated class alias since 1.42 */
class_alias( AuthenticationRequestTestCase::class, 'MediaWiki\\Auth\\AuthenticationRequestTestCase' );
|