package fr.openwide.core.test.jpa.security.business;
import static org.junit.Assert.assertEquals;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetailsService;
import fr.openwide.core.jpa.exception.SecurityServiceException;
import fr.openwide.core.jpa.exception.ServiceException;
import fr.openwide.core.jpa.security.business.authority.model.Authority;
import fr.openwide.core.jpa.security.business.authority.util.CoreAuthorityConstants;
import fr.openwide.core.test.AbstractJpaSecurityTestCase;
import fr.openwide.core.test.jpa.security.business.person.model.MockUser;
public class TestPersonService extends AbstractJpaSecurityTestCase {
@Autowired
private UserDetailsService userDetailsService;
@Test
public void testAuthorities() throws ServiceException, SecurityServiceException {
MockUser person1 = createMockPerson("login1", "firstName1", "lastName1");
MockUser person2 = createMockPerson("login2", "firstName2", "lastName2");
Authority adminAuthority = authorityService.getByName(CoreAuthorityConstants.ROLE_ADMIN);
Authority group1Authority = authorityService.getByName(ROLE_GROUP_1);
person1.addAuthority(adminAuthority);
person1.addAuthority(group1Authority);
mockUserService.update(person1);
assertEquals(3, person1.getAuthorities().size());
person2.addAuthority(adminAuthority);
person2.addAuthority(group1Authority);
mockUserService.update(person2);
assertEquals(3, person2.getAuthorities().size());
mockUserService.delete(person1);
assertEquals(3, person2.getAuthorities().size());
person2.removeAuthority(adminAuthority);
mockUserService.update(person2);
assertEquals(2, person2.getAuthorities().size());
}
@Test
public void testCaseInsensitiveUserNameFetch() throws ServiceException, SecurityServiceException {
MockUser person1 = createMockPerson("Login1", "firstName1", "lastName1");
MockUser person2 = createMockPerson("logIn2", "firstName2", "lastName2");
mockUserService.setPasswords(person1, "toto");
mockUserService.setPasswords(person2, "tata");
assertEquals(person1, mockUserService.getByUserNameCaseInsensitive("login1"));
assertEquals(person1, mockUserService.getByUserNameCaseInsensitive("Login1"));
assertEquals(person1, mockUserService.getByUserNameCaseInsensitive("LogIn1"));
assertEquals(person2, mockUserService.getByUserNameCaseInsensitive("login2"));
assertEquals(person2, mockUserService.getByUserNameCaseInsensitive("Login2"));
assertEquals(person2, mockUserService.getByUserNameCaseInsensitive("LogIn2"));
assertEquals("Login1", userDetailsService.loadUserByUsername("Login1").getUsername());
assertEquals("Login1", userDetailsService.loadUserByUsername("login1").getUsername());
assertEquals("logIn2", userDetailsService.loadUserByUsername("LOgiN2").getUsername());
assertEquals("logIn2", userDetailsService.loadUserByUsername("logIn2").getUsername());
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("Login1", "tata"));
Assert.fail("Le mot de passe est erroné");
} catch (AuthenticationException e) {}
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("Login1", "toto"));
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("Login2", "toto"));
Assert.fail("Le mot de passe est erroné");
} catch (AuthenticationException e) {}
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("Login2", "tata"));
}
}