X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/tests/phpunit/includes/auth/PasswordDomainAuthenticationRequestTest.php diff --git a/tests/phpunit/includes/auth/PasswordDomainAuthenticationRequestTest.php b/tests/phpunit/includes/auth/PasswordDomainAuthenticationRequestTest.php new file mode 100644 index 00000000..f746515b --- /dev/null +++ b/tests/phpunit/includes/auth/PasswordDomainAuthenticationRequestTest.php @@ -0,0 +1,159 @@ +action = $args[0]; + return $ret; + } + + public static function provideGetFieldInfo() { + return [ + [ [ AuthManager::ACTION_LOGIN ] ], + [ [ AuthManager::ACTION_CREATE ] ], + [ [ AuthManager::ACTION_CHANGE ] ], + [ [ AuthManager::ACTION_REMOVE ] ], + ]; + } + + public function testGetFieldInfo2() { + $info = []; + foreach ( [ + AuthManager::ACTION_LOGIN, + AuthManager::ACTION_CREATE, + AuthManager::ACTION_CHANGE, + AuthManager::ACTION_REMOVE, + ] as $action ) { + $req = new PasswordDomainAuthenticationRequest( [ 'd1', 'd2' ] ); + $req->action = $action; + $info[$action] = $req->getFieldInfo(); + } + + $this->assertSame( [], $info[AuthManager::ACTION_REMOVE], 'No data needed to remove' ); + + $this->assertArrayNotHasKey( 'retype', $info[AuthManager::ACTION_LOGIN], + 'No need to retype password on login' ); + $this->assertArrayHasKey( 'domain', $info[AuthManager::ACTION_LOGIN], + 'Domain needed on login' ); + $this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CREATE], + 'Need to retype when creating new password' ); + $this->assertArrayHasKey( 'domain', $info[AuthManager::ACTION_CREATE], + 'Domain needed on account creation' ); + $this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CHANGE], + 'Need to retype when changing password' ); + $this->assertArrayNotHasKey( 'domain', $info[AuthManager::ACTION_CHANGE], + 'Domain not needed on account creation' ); + + $this->assertNotEquals( + $info[AuthManager::ACTION_LOGIN]['password']['label'], + $info[AuthManager::ACTION_CHANGE]['password']['label'], + 'Password field for change is differentiated from login' + ); + $this->assertNotEquals( + $info[AuthManager::ACTION_CREATE]['password']['label'], + $info[AuthManager::ACTION_CHANGE]['password']['label'], + 'Password field for change is differentiated from create' + ); + $this->assertNotEquals( + $info[AuthManager::ACTION_CREATE]['retype']['label'], + $info[AuthManager::ACTION_CHANGE]['retype']['label'], + 'Retype field for change is differentiated from create' + ); + } + + public function provideLoadFromSubmission() { + $domainList = [ 'domainList' => [ 'd1', 'd2' ] ]; + return [ + 'Empty request, login' => [ + [ AuthManager::ACTION_LOGIN ], + [], + false, + ], + 'Empty request, change' => [ + [ AuthManager::ACTION_CHANGE ], + [], + false, + ], + 'Empty request, remove' => [ + [ AuthManager::ACTION_REMOVE ], + [], + false, + ], + 'Username + password, login' => [ + [ AuthManager::ACTION_LOGIN ], + $data = [ 'username' => 'User', 'password' => 'Bar' ], + false, + ], + 'Username + password + domain, login' => [ + [ AuthManager::ACTION_LOGIN ], + $data = [ 'username' => 'User', 'password' => 'Bar', 'domain' => 'd1' ], + $data + [ 'action' => AuthManager::ACTION_LOGIN ] + $domainList, + ], + 'Username + password + bad domain, login' => [ + [ AuthManager::ACTION_LOGIN ], + $data = [ 'username' => 'User', 'password' => 'Bar', 'domain' => 'd5' ], + false, + ], + 'Username + password + domain, change' => [ + [ AuthManager::ACTION_CHANGE ], + [ 'username' => 'User', 'password' => 'Bar', 'domain' => 'd1' ], + false, + ], + 'Username + password + domain + retype' => [ + [ AuthManager::ACTION_CHANGE ], + [ 'username' => 'User', 'password' => 'Bar', 'retype' => 'baz', 'domain' => 'd1' ], + [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ] + + $domainList, + ], + 'Username empty, login' => [ + [ AuthManager::ACTION_LOGIN ], + [ 'username' => '', 'password' => 'Bar', 'domain' => 'd1' ], + false, + ], + 'Username empty, change' => [ + [ AuthManager::ACTION_CHANGE ], + [ 'username' => '', 'password' => 'Bar', 'retype' => 'baz', 'domain' => 'd1' ], + [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ] + + $domainList, + ], + 'Password empty, login' => [ + [ AuthManager::ACTION_LOGIN ], + [ 'username' => 'User', 'password' => '', 'domain' => 'd1' ], + false, + ], + 'Password empty, login, with retype' => [ + [ AuthManager::ACTION_LOGIN ], + [ 'username' => 'User', 'password' => '', 'retype' => 'baz', 'domain' => 'd1' ], + false, + ], + 'Retype empty' => [ + [ AuthManager::ACTION_CHANGE ], + [ 'username' => 'User', 'password' => 'Bar', 'retype' => '', 'domain' => 'd1' ], + false, + ], + ]; + } + + public function testDescribeCredentials() { + $req = new PasswordDomainAuthenticationRequest( [ 'd1', 'd2' ] ); + $req->action = AuthManager::ACTION_LOGIN; + $req->username = 'UTSysop'; + $req->domain = 'd2'; + $ret = $req->describeCredentials(); + $this->assertInternalType( 'array', $ret ); + $this->assertArrayHasKey( 'provider', $ret ); + $this->assertInstanceOf( 'Message', $ret['provider'] ); + $this->assertSame( 'authmanager-provider-password-domain', $ret['provider']->getKey() ); + $this->assertArrayHasKey( 'account', $ret ); + $this->assertInstanceOf( 'Message', $ret['account'] ); + $this->assertSame( 'authmanager-account-password-domain', $ret['account']->getKey() ); + $this->assertSame( [ 'UTSysop', 'd2' ], $ret['account']->getParams() ); + } +}