2015-11-22 20:17:00 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace MediaWiki\Auth;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @group AuthManager
|
|
|
|
|
*/
|
2020-06-30 15:09:24 +00:00
|
|
|
abstract class AuthenticationRequestTestCase extends \MediaWikiIntegrationTestCase {
|
2020-03-24 08:59:02 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param array $args
|
|
|
|
|
*
|
|
|
|
|
* @return AuthenticationRequest
|
|
|
|
|
*/
|
2015-11-22 20:17:00 +00:00
|
|
|
abstract protected function getInstance( array $args = [] );
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideGetFieldInfo
|
|
|
|
|
*/
|
|
|
|
|
public function testGetFieldInfo( array $args ) {
|
|
|
|
|
$info = $this->getInstance( $args )->getFieldInfo();
|
2019-12-13 17:44:39 +00:00
|
|
|
$this->assertIsArray( $info );
|
2015-11-22 20:17:00 +00:00
|
|
|
|
|
|
|
|
foreach ( $info as $field => $data ) {
|
2019-12-13 17:44:39 +00:00
|
|
|
$this->assertIsArray( $data, "Field $field" );
|
2015-11-22 20:17:00 +00:00
|
|
|
$this->assertArrayHasKey( 'type', $data, "Field $field" );
|
|
|
|
|
$this->assertArrayHasKey( 'label', $data, "Field $field" );
|
2018-01-13 00:02:09 +00:00
|
|
|
$this->assertInstanceOf( \Message::class, $data['label'], "Field $field, label" );
|
2015-11-22 20:17:00 +00:00
|
|
|
|
|
|
|
|
if ( $data['type'] !== 'null' ) {
|
|
|
|
|
$this->assertArrayHasKey( 'help', $data, "Field $field" );
|
2018-01-13 00:02:09 +00:00
|
|
|
$this->assertInstanceOf( \Message::class, $data['help'], "Field $field, help" );
|
2015-11-22 20:17:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( isset( $data['optional'] ) ) {
|
2019-12-13 17:44:39 +00:00
|
|
|
$this->assertIsBool( $data['optional'], "Field $field, optional" );
|
2015-11-22 20:17:00 +00:00
|
|
|
}
|
|
|
|
|
if ( isset( $data['image'] ) ) {
|
2019-12-13 17:44:39 +00:00
|
|
|
$this->assertIsString( $data['image'], "Field $field, image" );
|
2015-11-22 20:17:00 +00:00
|
|
|
}
|
2016-08-18 17:03:10 +00:00
|
|
|
if ( isset( $data['sensitive'] ) ) {
|
2019-12-13 17:44:39 +00:00
|
|
|
$this->assertIsBool( $data['sensitive'], "Field $field, sensitive" );
|
2016-08-18 17:03:10 +00:00
|
|
|
}
|
|
|
|
|
if ( $data['type'] === 'password' ) {
|
|
|
|
|
$this->assertTrue( !empty( $data['sensitive'] ),
|
|
|
|
|
"Field $field, password field must be sensitive" );
|
|
|
|
|
}
|
2015-11-22 20:17:00 +00:00
|
|
|
|
|
|
|
|
switch ( $data['type'] ) {
|
|
|
|
|
case 'string':
|
|
|
|
|
case 'password':
|
|
|
|
|
case 'hidden':
|
|
|
|
|
break;
|
|
|
|
|
case 'select':
|
|
|
|
|
case 'multiselect':
|
|
|
|
|
$this->assertArrayHasKey( 'options', $data, "Field $field" );
|
2019-12-13 17:44:39 +00:00
|
|
|
$this->assertIsArray( $data['options'], "Field $field, options" );
|
2015-11-22 20:17:00 +00:00
|
|
|
foreach ( $data['options'] as $val => $msg ) {
|
2018-01-13 00:02:09 +00:00
|
|
|
$this->assertInstanceOf( \Message::class, $msg, "Field $field, option $val" );
|
2015-11-22 20:17:00 +00:00
|
|
|
}
|
|
|
|
|
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 );
|
2020-05-29 06:46:30 +00:00
|
|
|
$expect = $instance::__set_state( $expectState );
|
2015-11-22 20:17:00 +00:00
|
|
|
$this->assertEquals( $expect, $instance );
|
|
|
|
|
} else {
|
|
|
|
|
$this->assertFalse( $ret );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
abstract public function provideLoadFromSubmission();
|
|
|
|
|
}
|