public function testRetrieveByCredentials()
 {
     $credentialsFields = ['username' => 'user', 'password' => 'pass'];
     $this->baseLdapUserProvider->setCredentialsFields($credentialsFields);
     $ldapServer = Mockery::mock('LaravelAuthLdap\\Contracts\\LdapServer');
     $this->baseLdapUserProvider->setLdapServer($ldapServer);
     $ldapUser = Mockery::mock('LaravelAuthLdap\\Contracts\\LdapUser');
     $ldapServer->shouldReceive('retrieveByUsername')->andReturn($ldapUser);
     $credentials = ['user' => 'foobar', 'pass' => 'foopass'];
     // if not using provider, should retrieve from LDAP server
     $this->assertEquals($ldapUser, $this->baseLdapUserProvider->retrieveByCredentials($credentials));
     // now using provider
     $provider = Mockery::mock('Illuminate\\Contracts\\Auth\\UserProvider');
     $this->baseLdapUserProvider->setProvider($provider);
     $provider->shouldReceive('retrieveByCredentials')->times(2)->andReturn(null);
     // if not found in provider and doesn't matter if it exists, should default back to LDAP
     $this->baseLdapUserProvider->setUserMustExistInProvider(false);
     $this->assertEquals($ldapUser, $this->baseLdapUserProvider->retrieveByCredentials($credentials));
     // if not found in provider and must exist
     $this->baseLdapUserProvider->setUserMustExistInProvider(true);
     $this->assertNull($this->baseLdapUserProvider->retrieveByCredentials($credentials));
     $providerUser = Mockery::mock('Illuminate\\Contracts\\Auth\\Authenticatable');
     $provider->shouldReceive('retrieveByCredentials')->times(2)->andReturn($providerUser);
     // if found in provider, should always return from the provider
     $this->assertEquals($providerUser, $this->baseLdapUserProvider->retrieveByCredentials($credentials));
     $this->baseLdapUserProvider->setUserMustExistInProvider(false);
     $this->assertEquals($providerUser, $this->baseLdapUserProvider->retrieveByCredentials($credentials));
 }