61 lines
2.1 KiB
Java
61 lines
2.1 KiB
Java
package se.bilhalsning.security;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.mockito.ArgumentMatchers.anyString;
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
import java.util.Optional;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.mockito.InjectMocks;
|
|
import org.mockito.Mock;
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|
import se.bilhalsning.entity.User;
|
|
import se.bilhalsning.repository.UserRepository;
|
|
|
|
@ExtendWith(MockitoExtension.class)
|
|
class UserDetailsServiceImplTest {
|
|
|
|
@Mock
|
|
private UserRepository userRepository;
|
|
|
|
@InjectMocks
|
|
private UserDetailsServiceImpl userDetailsService;
|
|
|
|
@Test
|
|
void shouldReturnUserDetailsWhenUserExists() {
|
|
User user = new User();
|
|
user.setEmail("test@example.com");
|
|
user.setPasswordHash("hashed-password");
|
|
when(userRepository.findByEmail("test@example.com")).thenReturn(Optional.of(user));
|
|
|
|
UserDetails result = userDetailsService.loadUserByUsername("test@example.com");
|
|
|
|
assertEquals("test@example.com", result.getUsername());
|
|
assertEquals("hashed-password", result.getPassword());
|
|
}
|
|
|
|
@Test
|
|
void shouldThrowUsernameNotFoundExceptionWhenUserMissing() {
|
|
when(userRepository.findByEmail(anyString())).thenReturn(Optional.empty());
|
|
|
|
assertThrows(UsernameNotFoundException.class, () ->
|
|
userDetailsService.loadUserByUsername("missing@example.com"));
|
|
}
|
|
|
|
@Test
|
|
void shouldNormalizeEmailToLowercase() {
|
|
User user = new User();
|
|
user.setEmail("uppercase@example.com");
|
|
user.setPasswordHash("hashed-password");
|
|
when(userRepository.findByEmail("uppercase@example.com")).thenReturn(Optional.of(user));
|
|
|
|
userDetailsService.loadUserByUsername("UPPERCASE@EXAMPLE.COM");
|
|
|
|
verify(userRepository).findByEmail("uppercase@example.com");
|
|
}
|
|
}
|