INC-1 add login function

This commit is contained in:
vladp
2025-11-25 11:59:37 +07:00
parent 3626a51b57
commit 74ae769de0
9 changed files with 139 additions and 41 deletions
@@ -2,23 +2,29 @@ package ru.soune.no_copy.service;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.context.MessageSource;
import org.springframework.security.crypto.password.PasswordEncoder;
import ru.soune.no_copy.dto.LoginRequest;
import ru.soune.no_copy.dto.RegisterRequest;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.no_copy.entity.User;
import ru.soune.no_copy.exception.NotValidationPasswordException;
import ru.soune.no_copy.exception.UserAlreadyExistsException;
import ru.soune.no_copy.exception.UserNotFoundException;
import ru.soune.no_copy.repository.AuthTokenRepository;
import ru.soune.no_copy.repository.UserRepository;
import java.util.Locale;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class AuthServiceTest {
@@ -45,7 +51,8 @@ public class AuthServiceTest {
@Test
void registerSuccess() {
RegisterRequest request = new RegisterRequest("John","A.","Doe","john@example.com","password123");
RegisterRequest request = new RegisterRequest("John","A.","Doe",
"john@example.com", "password123");
when(userRepository.existsByEmail(request.email())).thenReturn(false);
when(passwordEncoder.encode(request.password())).thenReturn("hashed");
@@ -65,14 +72,71 @@ public class AuthServiceTest {
@Test
void registerExistingEmailThrows() {
RegisterRequest request = new RegisterRequest("John","A.","Doe","john@example.com","123");
RegisterRequest request = new RegisterRequest("John","A.","Doe",
"john@example.com", "password123");
when(userRepository.existsByEmail(request.email())).thenReturn(true);
when(messageSource.getMessage(anyString(), any(), any(Locale.class))).thenReturn("User exists");
when(userRepository.existsByEmail(request.email()))
.thenReturn(true);
when(messageSource.getMessage(anyString(), any(), any(Locale.class)))
.thenReturn("User exists");
UserAlreadyExistsException ex = assertThrows(UserAlreadyExistsException.class,
() -> authService.register(request));
assertEquals("User exists", ex.getMessage());
}
@Test
void login_success() {
LoginRequest request = new LoginRequest("test@mail.com", "password");
User user = new User();
user.setUserId(1L);
user.setEmail("test@mail.com");
user.setPassword("encoded_pass");
when(userRepository.findByEmail("test@mail.com"))
.thenReturn(Optional.of(user));
when(passwordEncoder.matches("password", "encoded_pass"))
.thenReturn(true);
when(authTokenRepository.save(any(AuthToken.class)))
.thenAnswer(invocation -> invocation.getArgument(0));
AuthToken token = authService.login(request);
assertNotNull(token);
assertNotNull(token.getToken());
assertEquals(user, token.getUser());
ArgumentCaptor<AuthToken> captor = ArgumentCaptor.forClass(AuthToken.class);
verify(authTokenRepository).save(captor.capture());
assertEquals(user, captor.getValue().getUser());
assertNotNull(captor.getValue().getToken());
}
@Test
void login_userNotFound() {
LoginRequest request = new LoginRequest("missing@mail.com", "pwd");
when(userRepository.findByEmail("missing@mail.com")).thenReturn(Optional.empty());
assertThrows(UserNotFoundException.class, () -> authService.login(request));
}
@Test
void login_invalidPassword() {
LoginRequest request = new LoginRequest("test@mail.com", "wrong");
User user = new User();
user.setEmail("test@mail.com");
user.setPassword("encoded_pass");
when(userRepository.findByEmail("test@mail.com")).thenReturn(Optional.of(user));
when(passwordEncoder.matches("wrong", "encoded_pass")).thenReturn(false);
assertThrows(NotValidationPasswordException.class, () -> authService.login(request));
}
}