From c5b2ec112d53a819996414083f396e235b15050a Mon Sep 17 00:00:00 2001 From: bum12ark Date: Mon, 7 Mar 2022 11:19:17 +0900 Subject: [PATCH] =?UTF-8?q?refactor(order-service):=20=EC=A3=BC=EB=AC=B8,?= =?UTF-8?q?=20=EC=A7=80=EB=82=9C=20=EC=A3=BC=EB=AC=B8=20url=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - api controller 추가 - 테스트 클래스 이관 --- .../domain/order/web/OrderController.java | 147 ------------------ ....java => OrderOwnerApiControllerTest.java} | 86 +++++----- 2 files changed, 47 insertions(+), 186 deletions(-) rename order-service/src/test/java/com/justpickup/orderservice/domain/order/web/{OrderControllerTest.java => OrderOwnerApiControllerTest.java} (81%) diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java index 1ce5ff5..a626a48 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java @@ -1,159 +1,12 @@ package com.justpickup.orderservice.domain.order.web; -import com.justpickup.orderservice.domain.order.dto.OrderDto; -import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; -import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; -import com.justpickup.orderservice.domain.order.entity.OrderStatus; -import com.justpickup.orderservice.domain.order.service.OrderService; -import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator; -import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; -import com.justpickup.orderservice.global.dto.Result; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.web.PageableDefault; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindException; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.List; -import java.util.stream.Collectors; - @RestController @RequiredArgsConstructor @Slf4j public class OrderController { - private final OrderService orderService; - private final PrevOrderSearchValidator prevOrderSearchValidator; - - @GetMapping("/orderMain") - public ResponseEntity orderMain(@Valid OrderSearchCondition condition) { - // TODO: 2022/02/04 JWT 구현 시 변경 요망 - Long userId = 1L; - Long storeId = 1L; - - List orderDto = orderService.findOrderMain(condition, storeId); - - List orderMainResponses = orderDto.stream() - .map(OrderMainResponse::new) - .collect(Collectors.toList()); - - return ResponseEntity.status(HttpStatus.OK) - .body(Result.createSuccessResult(orderMainResponses)); - } - - @Data @NoArgsConstructor @AllArgsConstructor - static class OrderMainResponse { - private Long orderId; - private Long userId; - private String userName; - private List orderItemResponses; - private OrderStatus orderStatus; - private String orderTime; - - public OrderMainResponse(OrderDto orderDto) { - List orderItemDtoList = orderDto.getOrderItemDtoList() - .stream() - .map(OrderItemResponse::new) - .collect(Collectors.toList()); - - this.orderId = orderDto.getId(); - this.userId = orderDto.getUserId(); - this.userName = orderDto.getUserName(); - this.orderItemResponses = orderItemDtoList; - this.orderStatus = orderDto.getOrderStatus(); - this.orderTime = orderDto.getOrderTime() - .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } - } - - @Data - static class OrderItemResponse { - private Long orderItemId; - private Long itemId; - private String itemName; - - public OrderItemResponse(OrderItemDto orderItemDto) { - this.orderItemId = orderItemDto.getId(); - this.itemId = orderItemDto.getItemId(); - this.itemName = orderItemDto.getItemName(); - } - } - - @GetMapping("/prevOrder") - public ResponseEntity findPrevOrder(@Valid PrevOrderSearch prevOrderSearch, - @PageableDefault(page = 0, size = 10) Pageable pageable, - BindingResult bindingResult) throws BindException { - // validation - if (bindingResult.hasErrors()) throw new BindException(bindingResult); - prevOrderSearchValidator.validate(prevOrderSearch, bindingResult); - if (bindingResult.hasErrors()) throw new BindException(bindingResult); - - // get data - Page prevOrderMain = orderService.findPrevOrderMain(prevOrderSearch, pageable, 1L); - - // format data - ResponsePrevOrder responsePrevOrder = - new ResponsePrevOrder(prevOrderMain.getContent(), prevOrderMain.getNumber(), prevOrderMain.getTotalPages()); - return ResponseEntity.ok(Result.createSuccessResult(responsePrevOrder)); - } - - @Data @AllArgsConstructor @NoArgsConstructor - static class ResponsePrevOrder { - private List orders; - private Page page; - - public ResponsePrevOrder(List orderDtoList, int startPage, int totalPage) { - orders = orderDtoList.stream().map(OrderVo::new).collect(Collectors.toList()); - page = new Page(startPage, totalPage); - } - - @Data - static class OrderVo { - private Long orderId; - private OrderStatus orderStatus; - private String orderTime; - private Long orderPrice; - private String userName; - private List orderItems; - - public OrderVo(OrderDto orderDto) { - this.orderId = orderDto.getId(); - this.orderStatus = orderDto.getOrderStatus(); - this.orderTime = orderDto.getOrderTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - this.orderPrice = orderDto.getOrderPrice(); - this.userName = orderDto.getUserName(); - this.orderItems = orderDto.getOrderItemDtoList() - .stream().map(OrderItemVo::new).collect(Collectors.toList()); - } - } - - @Data - static class OrderItemVo { - private Long orderItemId; - private String orderItemName; - - public OrderItemVo(OrderItemDto orderItemDto) { - this.orderItemId = orderItemDto.getId(); - this.orderItemName = orderItemDto.getItemName(); - } - } - - @Data @AllArgsConstructor - static class Page { - int startPage; - int totalPage; - } - } } diff --git a/order-service/src/test/java/com/justpickup/orderservice/domain/order/web/OrderControllerTest.java b/order-service/src/test/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiControllerTest.java similarity index 81% rename from order-service/src/test/java/com/justpickup/orderservice/domain/order/web/OrderControllerTest.java rename to order-service/src/test/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiControllerTest.java index fb8f713..043c467 100644 --- a/order-service/src/test/java/com/justpickup/orderservice/domain/order/web/OrderControllerTest.java +++ b/order-service/src/test/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiControllerTest.java @@ -6,6 +6,7 @@ import com.justpickup.orderservice.domain.order.dto.OrderDto; import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; import com.justpickup.orderservice.domain.order.entity.OrderStatus; +import com.justpickup.orderservice.domain.order.repository.OrderRepository; import com.justpickup.orderservice.domain.order.service.OrderService; import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; @@ -28,6 +29,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; @@ -39,10 +41,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@WebMvcTest(OrderController.class) +@WebMvcTest(OrderOwnerApiController.class) @Import(TestConfig.class) -@AutoConfigureRestDocs(uriHost = "127.0.0.1", uriPort = 8001) -class OrderControllerTest { +@AutoConfigureRestDocs(uriHost = "http://just-pickup.com", uriPort = 8001) +class OrderOwnerApiControllerTest { @Autowired ObjectMapper objectMapper; @@ -56,8 +58,13 @@ class OrderControllerTest { @SpyBean PrevOrderSearchValidator prevOrderSearchValidator; + @MockBean + OrderRepository orderRepository; + + private final String url = "/api/owner/order"; + @Test - @DisplayName("점주 서비스 - 주문 페이지") + @DisplayName("[API] [GET] 점주 서비스 - 주문 페이지") void getOrderMain() throws Exception { // GIVEN String orderDate = "2022-02-03"; @@ -70,7 +77,8 @@ class OrderControllerTest { .willReturn(getOrderMainDtoList()); // WHEN - ResultActions actions = mockMvc.perform(get("/orderMain") + + ResultActions actions = mockMvc.perform(get(url + "/order-main") .param("orderDate", orderDate) .param("lastOrderId", String.valueOf(lastOrderId)) ); @@ -85,35 +93,35 @@ class OrderControllerTest { .andExpect(jsonPath("data[*].orderTime").exists()) .andDo(print()) .andDo(document("orderMain-get", - requestParameters( - parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"), - parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호") - ), - responseFields( - fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"), - fieldWithPath("message").description("메시지"), - fieldWithPath("data[*].orderId").description("주문 고유 번호"), - fieldWithPath("data[*].userId").description("고객 고유 번호"), - fieldWithPath("data[*].userName").description("고객 이름"), - fieldWithPath("data[*].orderItemResponses[*].orderItemId").description("장바구니 고유번호"), - fieldWithPath("data[*].orderItemResponses[*].itemId").description("상품 고유번호"), - fieldWithPath("data[*].orderItemResponses[*].itemName").description("상품 이름"), - fieldWithPath("data[*].orderStatus").description("주문 상태"), - fieldWithPath("data[*].orderTime").description("주문 시간") - ) - )) + requestParameters( + parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"), + parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호") + ), + responseFields( + fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"), + fieldWithPath("message").description("메시지"), + fieldWithPath("data[*].orderId").description("주문 고유 번호"), + fieldWithPath("data[*].userId").description("고객 고유 번호"), + fieldWithPath("data[*].userName").description("고객 이름"), + fieldWithPath("data[*].orderItemResponses[*].orderItemId").description("장바구니 고유번호"), + fieldWithPath("data[*].orderItemResponses[*].itemId").description("상품 고유번호"), + fieldWithPath("data[*].orderItemResponses[*].itemName").description("상품 이름"), + fieldWithPath("data[*].orderStatus").description("주문 상태"), + fieldWithPath("data[*].orderTime").description("주문 시간") + ) + )) ; } @Test - @DisplayName("점주 서비스 - 주문 페이지 (잘못된 파라미터 형식)") + @DisplayName("[API] [GET] 점주 서비스 - 주문 페이지 (잘못된 파라미터 형식)") void getOrderMainBadRequestException() throws Exception { // GIVEN String orderDate = "20220203"; Long lastOrderId = 7L; // WHEN - ResultActions actions = mockMvc.perform(get("/orderMain") + ResultActions actions = mockMvc.perform(get(url + "/order-main") .param("orderDate", orderDate) .param("lastOrderId", String.valueOf(lastOrderId)) ); @@ -125,15 +133,15 @@ class OrderControllerTest { .andExpect(jsonPath("data").isEmpty()) .andDo(print()) .andDo(document("orderMain-get-badParameterException", - requestParameters( - parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"), - parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호") - ), - responseFields( - fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"), - fieldWithPath("message").description("메시지"), - fieldWithPath("data").description("데이터") - ) + requestParameters( + parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"), + parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호") + ), + responseFields( + fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"), + fieldWithPath("message").description("메시지"), + fieldWithPath("data").description("데이터") + ) ) ) ; @@ -182,7 +190,7 @@ class OrderControllerTest { } @Test - @DisplayName("점주 서비스 - 지난 주문 페이지") + @DisplayName("[API] [GET] 점주 서비스 - 지난 주문 페이지") void getPrevOrder() throws Exception { // GIVEN LocalDate startDate = LocalDate.of(2022, 2, 3); @@ -197,7 +205,7 @@ class OrderControllerTest { ); // WHEN - ResultActions actions = mockMvc.perform(get("/prevOrder") + ResultActions actions = mockMvc.perform(get(url + "/prev-order") .param("startDate", startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))) .param("endDate", endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))) .param("page", page) @@ -236,12 +244,12 @@ class OrderControllerTest { fieldWithPath("data.page.startPage").description("현재 페이지 (0부터 시작)"), fieldWithPath("data.page.totalPage").description("총 페이지 개수") ) - )) + )) ; } @Test - @DisplayName("점주 서비스 - 지난 주문 페이지 (파라미터 오류)") + @DisplayName("[API] [GET] 점주 서비스 - 지난 주문 페이지 (파라미터 오류)") void getPrevOrderBindException() throws Exception { // GIVEN LocalDate startDate = LocalDate.of(2023, 2, 3); @@ -251,7 +259,7 @@ class OrderControllerTest { PrevOrderSearch search = new PrevOrderSearch(startDate, endDate); // THEN - ResultActions actions = mockMvc.perform(get("/prevOrder") + ResultActions actions = mockMvc.perform(get(url + "/prev-order") .param("startDate", startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))) .param("endDate", endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))) .param("page", page) @@ -274,7 +282,7 @@ class OrderControllerTest { fieldWithPath("message").description("메시지"), fieldWithPath("data").description("데이터") ) - )) + )) ; } } \ No newline at end of file