Add addUser Method

This commit is contained in:
MangKyu
2021-12-16 21:40:34 +09:00
parent 5713101ca0
commit 9155d312f0
4 changed files with 163 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
package com.mangkyu.employment.interview.app.user.controller;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PostMapping("/user")
public ResponseEntity<Void> addUser(@RequestBody @Valid final AddUserRequest addUserRequest) {
userService.addUser(addUserRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.build();
}
}

View File

@@ -1,8 +1,10 @@
package com.mangkyu.employment.interview.app.user.service;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -14,6 +16,13 @@ import java.util.List;
public class UserService {
private final UserRepository userRepository;
private final ModelMapper modelMapper;
@Transactional
public void addUser(final AddUserRequest addUserRequest) {
final User user = modelMapper.map(addUserRequest, User.class);
userRepository.save(user);
}
@Transactional
public void disableUser(final User user) {

View File

@@ -0,0 +1,98 @@
package com.mangkyu.employment.interview.app.user.controller;
import com.google.gson.Gson;
import com.mangkyu.employment.interview.app.quiz.enums.QuizLevel;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.service.UserService;
import org.junit.jupiter.api.BeforeEach;
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.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@ExtendWith(MockitoExtension.class)
class UserControllerTest {
@InjectMocks
private UserController target;
@Mock
private UserService userService;
private MockMvc mockMvc;
@BeforeEach
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(target).build();
}
@Test
public void addUserFail_EmailIsEmpty() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
.email("")
.quizLevel(QuizLevel.JUNIOR)
.build();
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.contentType(MediaType.APPLICATION_JSON)
);
// then
result.andExpect(status().isBadRequest());
}
@Test
public void addUserFail_QuizLevelIsNull() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(null)
.build();
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.contentType(MediaType.APPLICATION_JSON)
);
// then
result.andExpect(status().isBadRequest());
}
@Test
public void addUserSuccess() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(QuizLevel.JUNIOR)
.build();
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.contentType(MediaType.APPLICATION_JSON)
);
// then
result.andExpect(status().isCreated());
// then
}
}

View File

@@ -1,13 +1,18 @@
package com.mangkyu.employment.interview.app.user.service;
import com.mangkyu.employment.interview.app.quiz.enums.QuizLevel;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.repository.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
import org.modelmapper.ModelMapper;
import org.modelmapper.config.Configuration;
import java.util.Arrays;
import java.util.List;
@@ -23,6 +28,29 @@ class UserServiceTest {
@Mock
private UserRepository userRepository;
@Spy
private ModelMapper modelMapper;
@BeforeEach
public void init() {
modelMapper.getConfiguration()
.setFieldAccessLevel(Configuration.AccessLevel.PRIVATE)
.setFieldMatchingEnabled(true);
}
@Test
public void addUserSuccess() {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(QuizLevel.JUNIOR)
.build();
// when
target.addUser(addUserRequest);
// then
}
@Test
public void disableUserSuccess() {