From c65fa7eec927e293ba4f4af4a5f916c4a30af20b Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Wed, 31 Jan 2024 11:44:31 +0900 Subject: [PATCH 1/5] =?UTF-8?q?test:=20=EC=98=88=EC=95=BD=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OrderService 테스트 코드 작성 --- .../domain/order/service/OrderService.java | 5 +- .../yanabada/common/utils/ApiTest.java | 60 +++++++++++++ .../yanabada/common/utils/TestUtils.java | 22 +++-- .../order/service/OrderServiceTest.java | 88 +++++++++++++++++++ 4 files changed, 168 insertions(+), 7 deletions(-) create mode 100644 src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java create mode 100644 src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/order/service/OrderService.java b/src/main/java/kr/co/fastcampus/yanabada/domain/order/service/OrderService.java index 0feef03b..96659d8c 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/order/service/OrderService.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/order/service/OrderService.java @@ -51,11 +51,12 @@ public List getSellableOrders(Long memberId) { } @Transactional(readOnly = true) - public OrderInfoResponse getOrderInfo(Long orderId, Long currentUserId) { + public OrderInfoResponse getOrderInfo(Long orderId, Long memberId) { Order order = orderRepository.findById(orderId) .orElseThrow(OrderNotFoundException::new); + Member member = memberRepository.getMember(memberId); - if (!order.getMember().getId().equals(currentUserId)) { + if (!order.getMember().equals(member)) { throw new AccessForbiddenException(); } diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java new file mode 100644 index 00000000..13b87b7f --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java @@ -0,0 +1,60 @@ +package kr.co.fastcampus.yanabada.common.utils; + +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createAccommodation; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createAccommodationOption; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createBuyer; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createOrder; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createRoom; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createRoomOption; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createSeller; + +import kr.co.fastcampus.yanabada.domain.accommodation.entity.Accommodation; +import kr.co.fastcampus.yanabada.domain.accommodation.entity.Room; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.AccommodationOptionRepository; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.AccommodationRepository; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.RoomOptionRepository; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.RoomRepository; +import kr.co.fastcampus.yanabada.domain.member.entity.Member; +import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository; +import kr.co.fastcampus.yanabada.domain.order.entity.Order; +import kr.co.fastcampus.yanabada.domain.order.repository.OrderRepository; +import kr.co.fastcampus.yanabada.domain.product.repository.ProductRepository; +import org.junit.jupiter.api.BeforeEach; +import org.springframework.beans.factory.annotation.Autowired; + +public abstract class ApiTest { + + @Autowired + private MemberRepository memberRepository; + + @Autowired + private AccommodationRepository accommodationRepository; + + @Autowired + private AccommodationOptionRepository accommodationOptionRepository; + + @Autowired + private RoomRepository roomRepository; + + @Autowired + private RoomOptionRepository roomOptionRepository; + + @Autowired + private OrderRepository orderRepository; + + @Autowired + private ProductRepository productRepository; + + + @BeforeEach + public void setup() { + Member seller = memberRepository.save(createSeller()); + memberRepository.save(createBuyer()); + Accommodation accommodation = accommodationRepository.save(createAccommodation()); + accommodationOptionRepository.save(createAccommodationOption(accommodation)); + Room room = roomRepository.save(createRoom(accommodation)); + roomOptionRepository.save(createRoomOption(room)); + Order order = orderRepository.save(createOrder(room,seller)); + //productRepository.save(createProduct(order)); + } +} \ No newline at end of file diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/utils/TestUtils.java b/src/test/java/kr/co/fastcampus/yanabada/common/utils/TestUtils.java index 4d64288b..ec8c6536 100644 --- a/src/test/java/kr/co/fastcampus/yanabada/common/utils/TestUtils.java +++ b/src/test/java/kr/co/fastcampus/yanabada/common/utils/TestUtils.java @@ -103,11 +103,23 @@ public static Order createOrder(Room room, Member member) { ); } - public static Member createMember() { + public static Member createSeller() { return Member.builder() - .email("test@test.com") - .nickName("testNickname") - .password("1234") + .email("seller@test.com") + .nickName("sellerNickname") + .password("password123!") + .phoneNumber("010-1234-1234") + .roleType(ROLE_USER) + .image("a.jpg") + .providerType(EMAIL) + .build(); + } + + public static Member createBuyer() { + return Member.builder() + .email("buyer@test.com") + .nickName("buyerNickname") + .password("password123") .phoneNumber("010-1234-1234") .roleType(ROLE_USER) .image("a.jpg") @@ -127,4 +139,4 @@ public static Product createProduct(Order order) { ProductStatus.ON_SALE ); } -} +} \ No newline at end of file diff --git a/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java b/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java new file mode 100644 index 00000000..47f73fe4 --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java @@ -0,0 +1,88 @@ +package kr.co.fastcampus.yanabada.domain.order.service; + +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createAccommodation; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createAccommodationOption; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createOrder; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createRoom; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createRoomOption; +import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createSeller; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.util.List; +import java.util.Optional; +import kr.co.fastcampus.yanabada.domain.accommodation.entity.Accommodation; +import kr.co.fastcampus.yanabada.domain.accommodation.entity.AccommodationOption; +import kr.co.fastcampus.yanabada.domain.accommodation.entity.Room; +import kr.co.fastcampus.yanabada.domain.accommodation.entity.RoomOption; +import kr.co.fastcampus.yanabada.domain.member.entity.Member; +import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository; +import kr.co.fastcampus.yanabada.domain.order.dto.response.OrderInfoResponse; +import kr.co.fastcampus.yanabada.domain.order.dto.response.OrderSummaryResponse; +import kr.co.fastcampus.yanabada.domain.order.entity.Order; +import kr.co.fastcampus.yanabada.domain.order.repository.OrderRepository; +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.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class OrderServiceTest { + + @Mock + private OrderRepository orderRepository; + + @Mock + private MemberRepository memberRepository; + + @InjectMocks + private OrderService orderService; + + @DisplayName("판매가능한 상품이 있을 경우, 해당 상품을 반환합니다.") + @Test + void getSellableOrders() { + //given + Member member = createSeller(); + Accommodation accommodation = createAccommodation(); + AccommodationOption accommodationOption = createAccommodationOption(accommodation); + accommodation.registerAccommodationOption(accommodationOption); + Room room = createRoom(accommodation); + RoomOption roomOption = createRoomOption(room); + room.registerRoomOption(roomOption); + accommodation.addRoom(room); + Order order = createOrder(room, member); + given(memberRepository.getMember(1L)).willReturn(member); + given(orderRepository.getSellableByMember(member)).willReturn(List.of(order)); + + //when + List sellableOrders = orderService.getSellableOrders(1L); + + //then + assertThat(sellableOrders).isNotEmpty(); + } + + @DisplayName("정상적인 예약 상세 조회일 경우, 해당 예약을 반환합니다.") + @Test + void getOrderInfo() { + //given + Member member = createSeller(); + Accommodation accommodation = createAccommodation(); + AccommodationOption accommodationOption = createAccommodationOption(accommodation); + accommodation.registerAccommodationOption(accommodationOption); + Room room = createRoom(accommodation); + RoomOption roomOption = createRoomOption(room); + room.registerRoomOption(roomOption); + accommodation.addRoom(room); + Order order = createOrder(room, member); + given(orderRepository.findById(1L)).willReturn(Optional.of(order)); + given(memberRepository.getMember(1L)).willReturn(member); + + //when + OrderInfoResponse orderInfo = orderService.getOrderInfo(1L, 1L); + + //then + assertThat(orderInfo).isNotNull(); + } +} \ No newline at end of file From 76638eb4b7ba84c4614a9538d395c96de642c1c5 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Wed, 31 Jan 2024 11:45:01 +0900 Subject: [PATCH 2/5] =?UTF-8?q?test:=20=EC=98=88=EC=95=BD=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OrderController 테스트 코드 작성 --- .../order/controller/OrderController.java | 2 +- .../order/controller/OrderControllerTest.java | 81 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/test/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderControllerTest.java diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderController.java b/src/main/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderController.java index 8ec9aab9..95a5b5f9 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderController.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderController.java @@ -42,7 +42,7 @@ public ResponseBody> getSellableOrders( @GetMapping("/{orderId}") public ResponseBody getOrderInfo( - @PathVariable Long orderId, + @PathVariable("orderId") Long orderId, @AuthenticationPrincipal PrincipalDetails principalDetails ) { return ResponseBody.ok(orderService.getOrderInfo(orderId, principalDetails.id())); diff --git a/src/test/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderControllerTest.java b/src/test/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderControllerTest.java new file mode 100644 index 00000000..9e45dfce --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/domain/order/controller/OrderControllerTest.java @@ -0,0 +1,81 @@ +package kr.co.fastcampus.yanabada.domain.order.controller; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import kr.co.fastcampus.yanabada.common.security.WithMockMember; +import kr.co.fastcampus.yanabada.common.utils.ApiTest; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.AccommodationOptionRepository; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.AccommodationRepository; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.RoomOptionRepository; +import kr.co.fastcampus.yanabada.domain.accommodation.repository.RoomRepository; +import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository; +import kr.co.fastcampus.yanabada.domain.order.repository.OrderRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +@SpringBootTest +@AutoConfigureMockMvc +class OrderControllerTest extends ApiTest { + + private static final MediaType MEDIA_TYPE = MediaType.APPLICATION_JSON; + + @Autowired + private MockMvc mockMvc; + + @Autowired + private MemberRepository memberRepository; + + @Autowired + private AccommodationRepository accommodationRepository; + + @Autowired + private AccommodationOptionRepository accommodationOptionRepository; + + @Autowired + private RoomRepository roomRepository; + + @Autowired + private RoomOptionRepository roomOptionRepository; + + @Autowired + private OrderRepository orderRepository; + + @DisplayName("[API][GET] 판매 가능한 예약 조회 - 정상적인 요청일 경우, 정상적으로 예약이 조회됩니다.") + @Test + @WithMockMember + void getSellableOrders_success() throws Exception { + //given + String url = "/v1/orders/can-sell"; + + //when + mockMvc.perform(get(url)) + + //then + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("SUCCESS")) + .andExpect(jsonPath("$.data[0].id").value(1)); + } + + @DisplayName("[API][GET] 예약 상세 조회 - 정상적인 요청일 경우, 정상적으로 예약이 조회됩니다.") + @Test + @WithMockMember + void getOrderInfo_success() throws Exception { + //given + String url = "/v1/orders/1"; + + //when + mockMvc.perform(get(url)) + + //then + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("SUCCESS")) + .andExpect(jsonPath("$.data.orderId").value(1)); + } +} \ No newline at end of file From 9619a070414ab2a5e046dfa5ba187050c2a0a881 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Wed, 31 Jan 2024 11:51:03 +0900 Subject: [PATCH 3/5] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=EC=97=90=20=EB=A7=9E=EC=B6=B0=EC=84=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 코드 컨벤션에 맞춰서 스타일 수정 --- .../java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java | 3 +-- .../yanabada/domain/order/service/OrderServiceTest.java | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java index 13b87b7f..a57d9c51 100644 --- a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java +++ b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java @@ -48,13 +48,12 @@ public abstract class ApiTest { @BeforeEach public void setup() { - Member seller = memberRepository.save(createSeller()); memberRepository.save(createBuyer()); Accommodation accommodation = accommodationRepository.save(createAccommodation()); accommodationOptionRepository.save(createAccommodationOption(accommodation)); Room room = roomRepository.save(createRoom(accommodation)); roomOptionRepository.save(createRoomOption(room)); + Member seller = memberRepository.save(createSeller()); Order order = orderRepository.save(createOrder(room,seller)); - //productRepository.save(createProduct(order)); } } \ No newline at end of file diff --git a/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java b/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java index 47f73fe4..f0893626 100644 --- a/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java +++ b/src/test/java/kr/co/fastcampus/yanabada/domain/order/service/OrderServiceTest.java @@ -44,7 +44,6 @@ class OrderServiceTest { @Test void getSellableOrders() { //given - Member member = createSeller(); Accommodation accommodation = createAccommodation(); AccommodationOption accommodationOption = createAccommodationOption(accommodation); accommodation.registerAccommodationOption(accommodationOption); @@ -52,6 +51,7 @@ void getSellableOrders() { RoomOption roomOption = createRoomOption(room); room.registerRoomOption(roomOption); accommodation.addRoom(room); + Member member = createSeller(); Order order = createOrder(room, member); given(memberRepository.getMember(1L)).willReturn(member); given(orderRepository.getSellableByMember(member)).willReturn(List.of(order)); @@ -67,7 +67,6 @@ void getSellableOrders() { @Test void getOrderInfo() { //given - Member member = createSeller(); Accommodation accommodation = createAccommodation(); AccommodationOption accommodationOption = createAccommodationOption(accommodation); accommodation.registerAccommodationOption(accommodationOption); @@ -75,6 +74,7 @@ void getOrderInfo() { RoomOption roomOption = createRoomOption(room); room.registerRoomOption(roomOption); accommodation.addRoom(room); + Member member = createSeller(); Order order = createOrder(room, member); given(orderRepository.findById(1L)).willReturn(Optional.of(order)); given(memberRepository.getMember(1L)).willReturn(member); From 569c6c38b9dcd43c0bf7014e1952abe33e2062fc Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Wed, 31 Jan 2024 11:52:41 +0900 Subject: [PATCH 4/5] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=EC=97=90=20=EB=A7=9E=EC=B6=B0=EC=84=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 코드 컨벤션에 맞춰서 스타일 수정 --- .../java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java index a57d9c51..04325dca 100644 --- a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java +++ b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java @@ -54,6 +54,6 @@ public void setup() { Room room = roomRepository.save(createRoom(accommodation)); roomOptionRepository.save(createRoomOption(room)); Member seller = memberRepository.save(createSeller()); - Order order = orderRepository.save(createOrder(room,seller)); + Order order = orderRepository.save(createOrder(room, seller)); } } \ No newline at end of file From 81873a522cb3153e9cea2a570a4515df3fb28999 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Wed, 31 Jan 2024 12:09:05 +0900 Subject: [PATCH 5/5] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=9C=EC=84=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스트 코드 순서 수정 --- .../java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java index 04325dca..4f62bd61 100644 --- a/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java +++ b/src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java @@ -48,12 +48,12 @@ public abstract class ApiTest { @BeforeEach public void setup() { - memberRepository.save(createBuyer()); Accommodation accommodation = accommodationRepository.save(createAccommodation()); accommodationOptionRepository.save(createAccommodationOption(accommodation)); Room room = roomRepository.save(createRoom(accommodation)); roomOptionRepository.save(createRoomOption(room)); Member seller = memberRepository.save(createSeller()); Order order = orderRepository.save(createOrder(room, seller)); + memberRepository.save(createBuyer()); } } \ No newline at end of file