test(order): 주문 상세보기 WebMvc 테스트 작성

This commit is contained in:
bum12ark
2022-03-21 18:35:00 +09:00
parent d6ec6313f5
commit 3afe6b0adf
2 changed files with 103 additions and 4 deletions

View File

@@ -67,6 +67,8 @@ domain-httpRequestCode-etc
== 주문
=== 주문 수정
operation::order-patch[snippets='curl-request,http-request,http-response,path-parameters,request-fields,response-fields']
=== 주문 상세보기
operation::api-orderDetail[snippets='curl-request,http-request,http-response,path-parameters,response-fields']
== 점주 서비스
=== 주문 페이지

View File

@@ -1,12 +1,12 @@
package com.justpickup.orderservice.domain.order.web;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.justpickup.orderservice.config.TestConfig;
import com.justpickup.orderservice.domain.order.dto.OrderDetailDto;
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.web.OrderController.PatchOrderRequest;
import com.justpickup.orderservice.global.client.store.OptionType;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,11 +18,14 @@ import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import static org.junit.jupiter.api.Assertions.*;
import java.time.LocalDateTime;
import java.util.List;
import static org.mockito.BDDMockito.given;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
import static org.springframework.restdocs.request.RequestDocumentation.pathParameters;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@@ -77,4 +80,98 @@ class OrderControllerTest {
;
}
@Test
@DisplayName("[GET] 주문 상세 내역 가져오기")
void getOrderDetail() throws Exception {
// GIVEN
Long orderId = 1589L;
given(orderService.findOrderDetail(orderId)).willReturn(getOrderDetailWillReturn(orderId));
// THEN
ResultActions actions = mockMvc.perform(get("/api/order-detail/{orderId}", String.valueOf(orderId)));
// WHEN
actions.andExpect(status().isOk())
.andDo(print())
.andDo(document("api-orderDetail",
pathParameters(
parameterWithName("orderId").description("주문 고유번호")
),
responseFields(
fieldWithPath("code").description("결과코드 SUCCESS/ERROR"),
fieldWithPath("message").description("메세지"),
fieldWithPath("data.id").description("주문 고유번호"),
fieldWithPath("data.orderTime").description("주문 시간 [yyy-MM-dd]"),
fieldWithPath("data.orderPrice").description("주문 금액"),
fieldWithPath("data.user.id").description("주문한 회원 고유번호"),
fieldWithPath("data.user.name").description("주문한 회원 이름"),
fieldWithPath("data.user.phoneNumber").description("주문한 회원 전화번호"),
fieldWithPath("data.orderItems[*].id").description("주문아이템 고유번호"),
fieldWithPath("data.orderItems[*].itemId").description("아이템 고유번호"),
fieldWithPath("data.orderItems[*].totalPrice").description("주문아이템 총합계"),
fieldWithPath("data.orderItems[*].count").description("주문아이템 수량"),
fieldWithPath("data.orderItems[*].name").description("아이템 이름"),
fieldWithPath("data.orderItems[*].options[*].id").description("주문아이템옵션 고유번호"),
fieldWithPath("data.orderItems[*].options[*].itemOptionId").description("아이템옵션 고유번호"),
fieldWithPath("data.orderItems[*].options[*].name").description("아이템옵션 이름"),
fieldWithPath("data.orderItems[*].options[*].optionType").description("아이템옵션 타입")
)
))
;
}
private OrderDetailDto getOrderDetailWillReturn(Long orderId) {
OrderDetailDto.OrderDetailUser orderDetailUser = OrderDetailDto.OrderDetailUser.builder()
.id(6L)
.name("박상범")
.phoneNumber("010-1234-5678")
.build();
long id = 11371L;
long itemOptionId = 40L;
OrderDetailDto.OrderDetailItemOption ice = OrderDetailDto.OrderDetailItemOption.builder()
.id(id++)
.itemOptionId(itemOptionId++)
.name("ICE")
.optionType(OptionType.REQUIRED)
.build();
OrderDetailDto.OrderDetailItemOption hot = OrderDetailDto.OrderDetailItemOption.builder()
.id(id++)
.itemOptionId(itemOptionId++)
.name("HOT")
.optionType(OptionType.REQUIRED)
.build();
OrderDetailDto.OrderDetailItemOption plus = OrderDetailDto.OrderDetailItemOption.builder()
.id(id++)
.itemOptionId(itemOptionId++)
.name("시럽 추가")
.optionType(OptionType.OTHER)
.build();
OrderDetailDto.OrderDetailItem 카페라떼 = OrderDetailDto.OrderDetailItem.builder()
.id(id++)
.itemId(itemOptionId++)
.count(2)
.name("카페라떼")
.options(List.of(hot, plus))
.build();
OrderDetailDto.OrderDetailItem 아메리카노 = OrderDetailDto.OrderDetailItem.builder()
.id(id++)
.itemId(itemOptionId++)
.count(2)
.options(List.of(ice))
.name("아메리카노")
.build();
return OrderDetailDto.builder()
.id(orderId)
.orderTime(LocalDateTime.now())
.orderPrice(76600L)
.user(orderDetailUser)
.orderItems(List.of(카페라떼, 아메리카노))
.build();
}
}