public function testAuthentication() { $req = new PasswordAuthenticationRequest(); $req->action = AuthManager::ACTION_LOGIN; $reqs = [PasswordAuthenticationRequest::class => $req]; $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['authenticate'])->getMock(); $plugin->expects($this->never())->method('authenticate'); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $this->assertEquals(AuthenticationResponse::newAbstain(), $provider->beginPrimaryAuthentication([])); $req->username = '******'; $req->password = null; $this->assertEquals(AuthenticationResponse::newAbstain(), $provider->beginPrimaryAuthentication($reqs)); $req->username = null; $req->password = '******'; $this->assertEquals(AuthenticationResponse::newAbstain(), $provider->beginPrimaryAuthentication($reqs)); $req->username = '******'; $req->password = '******'; $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['userExists', 'authenticate'])->getMock(); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(true)); $plugin->expects($this->once())->method('authenticate')->with($this->equalTo('Foo'), $this->equalTo('bar'))->will($this->returnValue(true)); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $this->assertEquals(AuthenticationResponse::newPass('Foo', $req), $provider->beginPrimaryAuthentication($reqs)); $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['userExists', 'authenticate'])->getMock(); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(false)); $plugin->expects($this->never())->method('authenticate'); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $this->assertEquals(AuthenticationResponse::newAbstain(), $provider->beginPrimaryAuthentication($reqs)); $pluginUser = $this->getMockBuilder('AuthPluginUser')->setMethods(['isLocked'])->disableOriginalConstructor()->getMock(); $pluginUser->expects($this->once())->method('isLocked')->will($this->returnValue(true)); $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['userExists', 'getUserInstance', 'authenticate'])->getMock(); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(true)); $plugin->expects($this->once())->method('getUserInstance')->will($this->returnValue($pluginUser)); $plugin->expects($this->never())->method('authenticate'); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $this->assertEquals(AuthenticationResponse::newAbstain(), $provider->beginPrimaryAuthentication($reqs)); $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['userExists', 'authenticate'])->getMock(); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(true)); $plugin->expects($this->once())->method('authenticate')->with($this->equalTo('Foo'), $this->equalTo('bar'))->will($this->returnValue(false)); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $this->assertEquals(AuthenticationResponse::newAbstain(), $provider->beginPrimaryAuthentication($reqs)); $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['userExists', 'authenticate', 'strict'])->getMock(); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(true)); $plugin->expects($this->once())->method('authenticate')->with($this->equalTo('Foo'), $this->equalTo('bar'))->will($this->returnValue(false)); $plugin->expects($this->any())->method('strict')->will($this->returnValue(true)); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $ret = $provider->beginPrimaryAuthentication($reqs); $this->assertSame(AuthenticationResponse::FAIL, $ret->status); $this->assertSame('wrongpassword', $ret->message->getKey()); $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['userExists', 'authenticate', 'strictUserAuth'])->getMock(); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(true)); $plugin->expects($this->once())->method('authenticate')->with($this->equalTo('Foo'), $this->equalTo('bar'))->will($this->returnValue(false)); $plugin->expects($this->any())->method('strictUserAuth')->with($this->equalTo('Foo'))->will($this->returnValue(true)); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); $ret = $provider->beginPrimaryAuthentication($reqs); $this->assertSame(AuthenticationResponse::FAIL, $ret->status); $this->assertSame('wrongpassword', $ret->message->getKey()); $plugin = $this->getMockBuilder('AuthPlugin')->setMethods(['domainList', 'validDomain', 'setDomain', 'userExists', 'authenticate'])->getMock(); $plugin->expects($this->any())->method('domainList')->will($this->returnValue(['Domain1', 'Domain2'])); $plugin->expects($this->any())->method('validDomain')->will($this->returnCallback(function ($domain) { return in_array($domain, ['Domain1', 'Domain2']); })); $plugin->expects($this->once())->method('setDomain')->with($this->equalTo('Domain2')); $plugin->expects($this->once())->method('userExists')->will($this->returnValue(true)); $plugin->expects($this->once())->method('authenticate')->with($this->equalTo('Foo'), $this->equalTo('bar'))->will($this->returnValue(true)); $provider = new AuthPluginPrimaryAuthenticationProvider($plugin); list($req) = $provider->getAuthenticationRequests(AuthManager::ACTION_LOGIN, []); $req->username = '******'; $req->password = '******'; $req->domain = 'Domain2'; $provider->beginPrimaryAuthentication([$req]); }