public function testGetUsernameFromRequests() { $mb = $this->getMockBuilder(AuthenticationRequest::class); for ($i = 0; $i < 3; $i++) { $req = $mb->getMockForAbstractClass(); $req->expects($this->any())->method('getFieldInfo')->will($this->returnValue(['username' => ['type' => 'string']])); $reqs[] = $req; } $req = $mb->getMockForAbstractClass(); $req->expects($this->any())->method('getFieldInfo')->will($this->returnValue([])); $req->username = '******'; $reqs[] = $req; $this->assertNull(AuthenticationRequest::getUsernameFromRequests($reqs)); $reqs[1]->username = '******'; $this->assertSame('foo', AuthenticationRequest::getUsernameFromRequests($reqs)); $reqs[0]->username = '******'; $reqs[2]->username = '******'; $this->assertSame('foo', AuthenticationRequest::getUsernameFromRequests($reqs)); $reqs[1]->username = '******'; try { AuthenticationRequest::getUsernameFromRequests($reqs); $this->fail('Expected exception not thrown'); } catch (\UnexpectedValueException $ex) { $this->assertSame('Conflicting username fields: "bar" from ' . get_class($reqs[1]) . '::$username vs. "foo" from ' . get_class($reqs[0]) . '::$username', $ex->getMessage()); } }