feat: user signup Service Layer Test Code Implement.
This commit is contained in:
@@ -6,7 +6,9 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
|
||||
|
||||
@@ -15,6 +17,10 @@ import org.springframework.security.web.authentication.HttpStatusEntryPoint;
|
||||
@EnableWebSecurity
|
||||
public class WebConfig {
|
||||
|
||||
@Bean
|
||||
PasswordEncoder passwordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
||||
|
||||
@@ -5,18 +5,21 @@ import com.io.realworld.Exception.CustomException;
|
||||
import com.io.realworld.Exception.Error;
|
||||
import com.io.realworld.repository.User;
|
||||
import com.io.realworld.repository.UserRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Transactional(readOnly = true)
|
||||
public class UserServiceImpl implements UserService {
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
private final UserRepository userRepository;
|
||||
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
|
||||
@Transactional
|
||||
@@ -24,15 +27,13 @@ public class UserServiceImpl implements UserService {
|
||||
if (userRepository.findByEmail(userSignupRequest.getEmail()) != null) {
|
||||
throw new CustomException(Error.DUPLICATE_USER);
|
||||
} else {
|
||||
String hashPw = madeHash(userSignupRequest.getPassword());
|
||||
return userRepository.save(User.of(userSignupRequest.getUsername(),
|
||||
userSignupRequest.getEmail(),
|
||||
hashPw));
|
||||
madeHash(userSignupRequest.getPassword())));
|
||||
}
|
||||
}
|
||||
|
||||
private String madeHash(String password){
|
||||
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
return passwordEncoder.encode(password);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ class RealworldApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,29 +1,73 @@
|
||||
package com.io.realworld.service;
|
||||
|
||||
import com.io.realworld.DTO.UserSignupRequest;
|
||||
import com.io.realworld.repository.User;
|
||||
import com.io.realworld.repository.UserRepository;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.Spy;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.internal.verification.VerificationModeFactory.times;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class UserServiceImplTest {
|
||||
|
||||
@InjectMocks
|
||||
UserServiceImpl userService;
|
||||
private UserServiceImpl userService;
|
||||
|
||||
@Mock
|
||||
UserRepository userRepository;
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Spy
|
||||
private BCryptPasswordEncoder passwordEncoder;
|
||||
|
||||
@Test
|
||||
@DisplayName("회원가입_서비스_테스트")
|
||||
void signup() {
|
||||
return;
|
||||
// given
|
||||
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
|
||||
UserSignupRequest request = getUserSignupRequest();
|
||||
String encryptedPw = encoder.encode(request.getPassword());
|
||||
|
||||
doReturn(new User(request.getUsername(), request.getEmail(), encryptedPw, "", "")).when(userRepository)
|
||||
.save(any(User.class));
|
||||
|
||||
// when
|
||||
User user = userService.signup(request);
|
||||
|
||||
// then
|
||||
assertThat(user.getEmail()).isEqualTo(request.getEmail());
|
||||
assertThat(encoder.matches(request.getPassword(), user.getPassword())).isTrue();
|
||||
|
||||
// verify
|
||||
verify(userRepository, times(1)).save(any(User.class));
|
||||
verify(passwordEncoder, times(1)).encode(any(String.class));
|
||||
}
|
||||
|
||||
|
||||
private UserSignupRequest getUserSignupRequest() {
|
||||
return UserSignupRequest.builder()
|
||||
.username("kms")
|
||||
.email("kms@gmail.com")
|
||||
.password("password")
|
||||
.build();
|
||||
}
|
||||
|
||||
private User getUserResponse() {
|
||||
return User.builder()
|
||||
.username("kms")
|
||||
.email("kms@gamil.com")
|
||||
.bio("1")
|
||||
.image("image")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user