120 lines
4.6 KiB
Java
120 lines
4.6 KiB
Java
package _11.asktpk.artisanconnectbackend;
|
|
|
|
import _11.asktpk.artisanconnectbackend.customExceptions.ClientAlreadyExistsException;
|
|
import _11.asktpk.artisanconnectbackend.customExceptions.WrongLoginPasswordException;
|
|
import _11.asktpk.artisanconnectbackend.dto.AuthResponseDTO;
|
|
import _11.asktpk.artisanconnectbackend.dto.ClientDTO;
|
|
import _11.asktpk.artisanconnectbackend.entities.Client;
|
|
import _11.asktpk.artisanconnectbackend.entities.Role;
|
|
import _11.asktpk.artisanconnectbackend.security.JwtUtil;
|
|
import _11.asktpk.artisanconnectbackend.service.AuthService;
|
|
import _11.asktpk.artisanconnectbackend.service.ClientService;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.mockito.Mockito;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import static org.mockito.Mockito.*;
|
|
|
|
public class AuthServiceTest {
|
|
|
|
private final ClientService clientService = Mockito.mock(ClientService.class);
|
|
private final PasswordEncoder passwordEncoder = Mockito.mock(PasswordEncoder.class);
|
|
private final JwtUtil jwtUtil = Mockito.mock(JwtUtil.class);
|
|
private final AuthService authService = new AuthService(clientService, jwtUtil, passwordEncoder);
|
|
|
|
|
|
@Test
|
|
@DisplayName("Test logowania - poprawne dane")
|
|
public void testLoginSuccess() throws Exception {
|
|
String email = "test@example.com";
|
|
String password = "password";
|
|
Client client = new Client();
|
|
client.setEmail(email);
|
|
client.setPassword("encodedPassword");
|
|
client.setRole(new Role());
|
|
|
|
when(clientService.getClientByEmail(email)).thenReturn(client);
|
|
when(passwordEncoder.matches(password, client.getPassword())).thenReturn(true);
|
|
when(jwtUtil.generateToken(email, client.getRole().getRole(), client.getId())).thenReturn("token");
|
|
|
|
AuthResponseDTO response = authService.login(email, password);
|
|
|
|
assertNotNull(response, "Odpowiedź nie powinna być null");
|
|
assertEquals("token", response.getToken(), "Token w odpowiedzi powinien być poprawny");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Test logowania - niepoprawne hasło")
|
|
public void testLoginWrongPassword() {
|
|
String email = "test@example.com";
|
|
String password = "wrongPassword";
|
|
Client client = new Client();
|
|
client.setEmail(email);
|
|
client.setPassword("encodedPassword");
|
|
|
|
when(clientService.getClientByEmail(email)).thenReturn(client);
|
|
when(passwordEncoder.matches(password, client.getPassword())).thenReturn(false);
|
|
|
|
assertThrows(WrongLoginPasswordException.class, () -> authService.login(email, password),
|
|
"Powinien zostać rzucony WrongLoginPasswordException");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Test rejestracji - nowy użytkownik")
|
|
public void testRegisterNewUser() throws Exception {
|
|
String email = "new@example.com";
|
|
String password = "password";
|
|
String firstName = "Jan";
|
|
String lastName = "Kowalski";
|
|
|
|
when(clientService.getClientByEmail(email)).thenReturn(null);
|
|
when(passwordEncoder.encode(password)).thenReturn("encodedPassword");
|
|
when(clientService.registerClient(any(Client.class))).thenReturn(new ClientDTO());
|
|
|
|
AuthResponseDTO response = authService.register(email, password, firstName, lastName);
|
|
|
|
assertNotNull(response, "Odpowiedź nie powinna być null");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Test rejestracji - użytkownik już istnieje")
|
|
public void testRegisterExistingUser() {
|
|
String email = "existing@example.com";
|
|
String password = "password";
|
|
String firstName = "Jan";
|
|
String lastName = "Kowalski";
|
|
|
|
when(clientService.getClientByEmail(email)).thenReturn(new Client());
|
|
|
|
assertThrows(ClientAlreadyExistsException.class, () -> authService.register(email, password, firstName, lastName),
|
|
"Powinien zostać rzucony ClientAlreadyExistsException");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Test wylogowania z poprawnym tokenem")
|
|
public void testLogoutWithValidToken() {
|
|
String token = "valid.token.here";
|
|
|
|
when(jwtUtil.isBlacklisted(token)).thenReturn(false);
|
|
|
|
authService.logout(token);
|
|
|
|
verify(jwtUtil, times(1)).blacklistToken(token);
|
|
|
|
when(jwtUtil.isBlacklisted(token)).thenReturn(true);
|
|
assertTrue(jwtUtil.isBlacklisted(token), "Token powinien być na czarnej liście po wylogowaniu");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Test wylogowania bez tokena")
|
|
public void testLogoutWithoutToken() {
|
|
authService.logout(null);
|
|
|
|
verify(jwtUtil, never()).blacklistToken(anyString());
|
|
|
|
}
|
|
|
|
|
|
} |