bilhej/backend/src/test/java/se/bilhalsning/security/UserDetailsServiceImplTest.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");
}
}