feat: user signup Service Layer Test Code Implement.

This commit is contained in:
kms
2022-09-11 16:31:41 +09:00
parent da2f589be0
commit bcd96446c9
4 changed files with 65 additions and 13 deletions

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -8,6 +8,7 @@ class RealworldApplicationTests {
@Test
void contextLoads() {
}
}

View File

@@ -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();
}
}