From 99a3ace09e306ee674dd266396a380d710672ecb Mon Sep 17 00:00:00 2001 From: MangKyu Date: Sat, 18 Feb 2023 18:31:43 +0900 Subject: [PATCH] Refactor MemberController --- ...ntroller.java => AddMemberController.java} | 9 +- .../{dto => controller}/AddMemberRequest.java | 2 +- .../controller/WebMemberController.java | 4 +- .../app/member/service/MemberService.java | 2 +- .../interview/config/web/WebMvcConfig.java | 2 +- src/main/resources/static/js/user/add.js | 2 +- ...Test.java => AddMemberControllerTest.java} | 103 +++++++----------- .../app/member/service/MemberServiceTest.java | 2 +- 8 files changed, 49 insertions(+), 77 deletions(-) rename src/main/java/com/mangkyu/employment/interview/app/member/controller/{MemberController.java => AddMemberController.java} (70%) rename src/main/java/com/mangkyu/employment/interview/app/member/{dto => controller}/AddMemberRequest.java (94%) rename src/test/java/com/mangkyu/employment/interview/app/member/controller/{MemberControllerTest.java => AddMemberControllerTest.java} (53%) diff --git a/src/main/java/com/mangkyu/employment/interview/app/member/controller/MemberController.java b/src/main/java/com/mangkyu/employment/interview/app/member/controller/AddMemberController.java similarity index 70% rename from src/main/java/com/mangkyu/employment/interview/app/member/controller/MemberController.java rename to src/main/java/com/mangkyu/employment/interview/app/member/controller/AddMemberController.java index 1d4647d..9085ce4 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/member/controller/MemberController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/member/controller/AddMemberController.java @@ -1,6 +1,5 @@ package com.mangkyu.employment.interview.app.member.controller; -import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest; import com.mangkyu.employment.interview.app.member.service.MemberService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -13,13 +12,13 @@ import javax.validation.Valid; @RestController @RequiredArgsConstructor -public class MemberController { +class AddMemberController { private final MemberService memberService; - @PostMapping("/user") - public ResponseEntity addUser(@RequestBody @Valid final AddMemberRequest addMemberRequest) { - memberService.addUser(addMemberRequest); + @PostMapping("/members") + public ResponseEntity add(@RequestBody @Valid final AddMemberRequest request) { + memberService.addUser(request); return ResponseEntity.status(HttpStatus.CREATED) .build(); diff --git a/src/main/java/com/mangkyu/employment/interview/app/member/dto/AddMemberRequest.java b/src/main/java/com/mangkyu/employment/interview/app/member/controller/AddMemberRequest.java similarity index 94% rename from src/main/java/com/mangkyu/employment/interview/app/member/dto/AddMemberRequest.java rename to src/main/java/com/mangkyu/employment/interview/app/member/controller/AddMemberRequest.java index 0a7c549..b7563e0 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/member/dto/AddMemberRequest.java +++ b/src/main/java/com/mangkyu/employment/interview/app/member/controller/AddMemberRequest.java @@ -1,4 +1,4 @@ -package com.mangkyu.employment.interview.app.member.dto; +package com.mangkyu.employment.interview.app.member.controller; import com.mangkyu.employment.interview.enums.value.QuizCategory; import com.mangkyu.employment.interview.enums.value.QuizDay; diff --git a/src/main/java/com/mangkyu/employment/interview/app/member/controller/WebMemberController.java b/src/main/java/com/mangkyu/employment/interview/app/member/controller/WebMemberController.java index 7682504..25ea670 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/member/controller/WebMemberController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/member/controller/WebMemberController.java @@ -11,11 +11,11 @@ import org.springframework.web.bind.annotation.GetMapping; @Controller @RequiredArgsConstructor -public class WebMemberController { +class WebMemberController { private final EnumMapperFactory factory; - @GetMapping("/user/addView") + @GetMapping("/members/addView") public String addUserPage(final Model model) { model.addAttribute("quizLevelList", factory.get(EnumMapperKey.QUIZ_LEVEL)); model.addAttribute("quizCategoryList", factory.get(EnumMapperKey.QUIZ_CATEGORY)); diff --git a/src/main/java/com/mangkyu/employment/interview/app/member/service/MemberService.java b/src/main/java/com/mangkyu/employment/interview/app/member/service/MemberService.java index 77797a0..1ac5980 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/member/service/MemberService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/member/service/MemberService.java @@ -1,6 +1,6 @@ package com.mangkyu.employment.interview.app.member.service; -import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest; +import com.mangkyu.employment.interview.app.member.controller.AddMemberRequest; import com.mangkyu.employment.interview.app.member.entity.Member; import com.mangkyu.employment.interview.app.member.repository.MemberRepository; import com.mangkyu.employment.interview.enums.value.QuizDay; diff --git a/src/main/java/com/mangkyu/employment/interview/config/web/WebMvcConfig.java b/src/main/java/com/mangkyu/employment/interview/config/web/WebMvcConfig.java index 43a735d..2719b88 100644 --- a/src/main/java/com/mangkyu/employment/interview/config/web/WebMvcConfig.java +++ b/src/main/java/com/mangkyu/employment/interview/config/web/WebMvcConfig.java @@ -27,7 +27,7 @@ public class WebMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(final ViewControllerRegistry registry) { // /에 해당하는 url mapping을 /common/test로 forward한다. - registry.addViewController( "/" ).setViewName( "forward:/user/addView" ); + registry.addViewController( "/" ).setViewName( "forward:/members/addView" ); // 우선순위를 가장 높게 잡는다. registry.setOrder(Ordered.HIGHEST_PRECEDENCE); } diff --git a/src/main/resources/static/js/user/add.js b/src/main/resources/static/js/user/add.js index b128093..270b781 100644 --- a/src/main/resources/static/js/user/add.js +++ b/src/main/resources/static/js/user/add.js @@ -31,7 +31,7 @@ function addUser() { } $.ajax({ - url: '/user', + url: '/members', type: 'POST', contentType: 'application/json', data: JSON.stringify({ diff --git a/src/test/java/com/mangkyu/employment/interview/app/member/controller/MemberControllerTest.java b/src/test/java/com/mangkyu/employment/interview/app/member/controller/AddMemberControllerTest.java similarity index 53% rename from src/test/java/com/mangkyu/employment/interview/app/member/controller/MemberControllerTest.java rename to src/test/java/com/mangkyu/employment/interview/app/member/controller/AddMemberControllerTest.java index aabc4ba..2760348 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/member/controller/MemberControllerTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/member/controller/AddMemberControllerTest.java @@ -1,12 +1,13 @@ package com.mangkyu.employment.interview.app.member.controller; -import com.google.gson.Gson; -import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest; -import com.mangkyu.employment.interview.app.member.service.MemberService; +import com.fasterxml.jackson.databind.ObjectMapper; import com.mangkyu.employment.interview.enums.value.QuizCategory; import com.mangkyu.employment.interview.enums.value.QuizDay; import com.mangkyu.employment.interview.enums.value.QuizLevel; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.http.MediaType; @@ -15,69 +16,34 @@ import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.HashSet; +import java.util.List; import java.util.Set; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @WebMvcTest -class MemberControllerTest { - - @Autowired - private MemberService memberService; +class AddMemberControllerTest { @Autowired private MockMvc mockMvc; - @Test - public void addUserFail_EmailIsEmpty() throws Exception { + @Autowired + private ObjectMapper objectMapper; + + + @MethodSource("invalidAddMemberRequest") + @ParameterizedTest + void addmember_Fail_invalidBody(String email, QuizLevel quizLevel) throws Exception { // given - final AddMemberRequest addMemberRequest = AddMemberRequest.builder() - .email("") - .quizLevel(QuizLevel.JUNIOR) + final AddMemberRequest request = AddMemberRequest.builder() + .email(email) + .quizLevel(quizLevel) .build(); // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post("/user") - .content(new Gson().toJson(addMemberRequest)) - .contentType(MediaType.APPLICATION_JSON) - ); - - // then - result.andExpect(status().isBadRequest()); - } - - @Test - public void addUserFail_NotEmailFormat() throws Exception { - // given - final AddMemberRequest addMemberRequest = AddMemberRequest.builder() - .email("asdas") - .quizLevel(QuizLevel.JUNIOR) - .build(); - - // when - final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post("/user") - .content(new Gson().toJson(addMemberRequest)) - .contentType(MediaType.APPLICATION_JSON) - ); - - // then - result.andExpect(status().isBadRequest()); - } - - @Test - public void addUserFail_QuizLevelIsNull() throws Exception { - // given - final AddMemberRequest addMemberRequest = AddMemberRequest.builder() - .email("whalsrb1226@gmail.com") - .quizLevel(null) - .build(); - - // when - final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post("/user") - .content(new Gson().toJson(addMemberRequest)) + MockMvcRequestBuilders.post("/members") + .content(objectMapper.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON) ); @@ -86,18 +52,26 @@ class MemberControllerTest { } + private static List invalidAddMemberRequest() { + return List.of( + Arguments.of("", QuizLevel.JUNIOR), + Arguments.of("asdas", QuizLevel.JUNIOR), + Arguments.of("whalsrb1226@gmail.com", null) + ); + } + @Test - public void addUserFail_QuizDaySetIsEmpty() throws Exception { + void addmember_Fail_QuizDaySetIsEmpty() throws Exception { // given - final AddMemberRequest addMemberRequest = AddMemberRequest.builder() + final AddMemberRequest request = AddMemberRequest.builder() .email("whalsrb1226@gmail.com") .quizLevel(QuizLevel.NEW) .build(); // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post("/user") - .content(new Gson().toJson(addMemberRequest)) + MockMvcRequestBuilders.post("/members") + .content(objectMapper.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON) ); @@ -107,14 +81,14 @@ class MemberControllerTest { } @Test - public void addUserFail_QuizCategorySetIsEmpty() throws Exception { + void addmember_Fail_QuizCategorySetIsEmpty() throws Exception { // given final Set quizDaySet = new HashSet<>(); quizDaySet.add(QuizDay.MONDAY); quizDaySet.add(QuizDay.WEDNESDAY); quizDaySet.add(QuizDay.FRIDAY); - final AddMemberRequest addMemberRequest = AddMemberRequest.builder() + final AddMemberRequest request = AddMemberRequest.builder() .email("whalsrb1226@gmail.com") .quizLevel(QuizLevel.JUNIOR) .quizDaySet(quizDaySet) @@ -122,8 +96,8 @@ class MemberControllerTest { // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post("/user") - .content(new Gson().toJson(addMemberRequest)) + MockMvcRequestBuilders.post("/members") + .content(objectMapper.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON) ); @@ -132,7 +106,7 @@ class MemberControllerTest { } @Test - public void addUserSuccess() throws Exception { + void addmember_Success() throws Exception { // given final Set quizDaySet = new HashSet<>(); quizDaySet.add(QuizDay.MONDAY); @@ -144,7 +118,7 @@ class MemberControllerTest { quizCategorySet.add(QuizCategory.DATABASE); quizCategorySet.add(QuizCategory.EXPERIENCE); - final AddMemberRequest addMemberRequest = AddMemberRequest.builder() + final AddMemberRequest request = AddMemberRequest.builder() .email("whalsrb1226@gmail.com") .quizLevel(QuizLevel.JUNIOR) .quizDaySet(quizDaySet) @@ -153,13 +127,12 @@ class MemberControllerTest { // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post("/user") - .content(new Gson().toJson(addMemberRequest)) + MockMvcRequestBuilders.post("/members") + .content(objectMapper.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON) ); // then result.andExpect(status().isCreated()); } - } \ No newline at end of file diff --git a/src/test/java/com/mangkyu/employment/interview/app/member/service/MemberServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/member/service/MemberServiceTest.java index ab195ea..c574eff 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/member/service/MemberServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/member/service/MemberServiceTest.java @@ -1,6 +1,6 @@ package com.mangkyu.employment.interview.app.member.service; -import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest; +import com.mangkyu.employment.interview.app.member.controller.AddMemberRequest; import com.mangkyu.employment.interview.app.member.entity.Member; import com.mangkyu.employment.interview.app.member.repository.MemberRepository; import com.mangkyu.employment.interview.config.modelmapper.ModelMapperConfig;