package com.pollex.pam.security;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|
import com.pollex.pam.IntegrationTest;
|
import com.pollex.pam.domain.User;
|
import com.pollex.pam.repository.UserRepository;
|
import java.util.Locale;
|
import org.apache.commons.lang3.RandomStringUtils;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.transaction.annotation.Transactional;
|
|
/**
|
* Integrations tests for {@link DomainUserDetailsService}.
|
*/
|
@Transactional
|
@IntegrationTest
|
class DomainUserDetailsServiceIT {
|
|
private static final String USER_ONE_LOGIN = "test-user-one";
|
private static final String USER_ONE_EMAIL = "test-user-one@localhost";
|
private static final String USER_TWO_LOGIN = "test-user-two";
|
private static final String USER_TWO_EMAIL = "test-user-two@localhost";
|
private static final String USER_THREE_LOGIN = "test-user-three";
|
private static final String USER_THREE_EMAIL = "test-user-three@localhost";
|
|
@Autowired
|
private UserRepository userRepository;
|
|
@Autowired
|
private UserDetailsService domainUserDetailsService;
|
|
@BeforeEach
|
public void init() {
|
User userOne = new User();
|
userOne.setLogin(USER_ONE_LOGIN);
|
userOne.setPassword(RandomStringUtils.random(60));
|
userOne.setActivated(true);
|
userOne.setEmail(USER_ONE_EMAIL);
|
userOne.setFirstName("userOne");
|
userOne.setLastName("doe");
|
userOne.setLangKey("en");
|
userRepository.save(userOne);
|
|
User userTwo = new User();
|
userTwo.setLogin(USER_TWO_LOGIN);
|
userTwo.setPassword(RandomStringUtils.random(60));
|
userTwo.setActivated(true);
|
userTwo.setEmail(USER_TWO_EMAIL);
|
userTwo.setFirstName("userTwo");
|
userTwo.setLastName("doe");
|
userTwo.setLangKey("en");
|
userRepository.save(userTwo);
|
|
User userThree = new User();
|
userThree.setLogin(USER_THREE_LOGIN);
|
userThree.setPassword(RandomStringUtils.random(60));
|
userThree.setActivated(false);
|
userThree.setEmail(USER_THREE_EMAIL);
|
userThree.setFirstName("userThree");
|
userThree.setLastName("doe");
|
userThree.setLangKey("en");
|
userRepository.save(userThree);
|
}
|
|
@Test
|
void assertThatUserCanBeFoundByLogin() {
|
UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN);
|
assertThat(userDetails).isNotNull();
|
assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN);
|
}
|
|
@Test
|
void assertThatUserCanBeFoundByLoginIgnoreCase() {
|
UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN.toUpperCase(Locale.ENGLISH));
|
assertThat(userDetails).isNotNull();
|
assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN);
|
}
|
|
@Test
|
void assertThatUserCanBeFoundByEmail() {
|
UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL);
|
assertThat(userDetails).isNotNull();
|
assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN);
|
}
|
|
@Test
|
void assertThatUserCanBeFoundByEmailIgnoreCase() {
|
UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL.toUpperCase(Locale.ENGLISH));
|
assertThat(userDetails).isNotNull();
|
assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN);
|
}
|
|
@Test
|
void assertThatEmailIsPrioritizedOverLogin() {
|
UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_EMAIL);
|
assertThat(userDetails).isNotNull();
|
assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN);
|
}
|
|
@Test
|
void assertThatUserNotActivatedExceptionIsThrownForNotActivatedUsers() {
|
assertThatExceptionOfType(UserNotActivatedException.class)
|
.isThrownBy(() -> domainUserDetailsService.loadUserByUsername(USER_THREE_LOGIN));
|
}
|
}
|