From 920c2d7cc75af6262b817c21d8aac05e16116618 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Thu, 25 Jan 2024 23:03:05 +0900 Subject: [PATCH 1/7] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=20=EA=B0=80=EC=A7=9C=20=EB=A9=A4=EB=B2=84=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @WithMockMember 어노테이션 구현 --- .../common/security/WithMockMember.java | 12 +++++++++ .../WithMockMemberSecurityContextFactory.java | 26 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMember.java create mode 100644 src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMemberSecurityContextFactory.java diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMember.java b/src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMember.java new file mode 100644 index 00000000..e93620cb --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMember.java @@ -0,0 +1,12 @@ +package kr.co.fastcampus.yanabada.common.security; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import org.springframework.security.test.context.support.WithSecurityContext; + +@Retention(RetentionPolicy.RUNTIME) +@WithSecurityContext(factory = WithMockMemberSecurityContextFactory.class) +public @interface WithMockMember { + long id() default 1L; + String[] authorities() default "ROLE_USER"; +} diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMemberSecurityContextFactory.java b/src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMemberSecurityContextFactory.java new file mode 100644 index 00000000..85891d3e --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/common/security/WithMockMemberSecurityContextFactory.java @@ -0,0 +1,26 @@ +package kr.co.fastcampus.yanabada.common.security; + +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.context.support.WithSecurityContextFactory; + +public class WithMockMemberSecurityContextFactory + implements WithSecurityContextFactory { + + @Override + public SecurityContext createSecurityContext(WithMockMember annotation) { + PrincipalDetails memberDetails = PrincipalDetails.builder() + .id(annotation.id()) + .email("test@email.com") + .build(); + SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); + securityContext.setAuthentication( + new UsernamePasswordAuthenticationToken( + memberDetails, + null, + memberDetails.getAuthorities()) + ); + return securityContext; + } +} From 4bb7d950415f801643e796dcffc31c5359ea133e Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Thu, 25 Jan 2024 23:04:34 +0900 Subject: [PATCH 2/7] =?UTF-8?q?test:=20QueryDsl=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=9A=A9=20=EC=84=A4=EC=A0=95=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QueryDslTestConfig 파일 구현 --- .../common/config/QueryDslTestConfig.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/java/kr/co/fastcampus/yanabada/common/config/QueryDslTestConfig.java diff --git a/src/test/java/kr/co/fastcampus/yanabada/common/config/QueryDslTestConfig.java b/src/test/java/kr/co/fastcampus/yanabada/common/config/QueryDslTestConfig.java new file mode 100644 index 00000000..ecff8fe1 --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/common/config/QueryDslTestConfig.java @@ -0,0 +1,19 @@ +package kr.co.fastcampus.yanabada.common.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; + +@TestConfiguration +public class QueryDslTestConfig { + + @PersistenceContext + private EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } +} From 3d5eaea1ecae1229dc40801c95e30f00c083fad5 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Thu, 25 Jan 2024 23:05:08 +0900 Subject: [PATCH 3/7] =?UTF-8?q?refactor:=20PrincipalDetails=20=EC=97=90=20?= =?UTF-8?q?Builder=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PrincipalDetails 에 Builder 추가 --- .../fastcampus/yanabada/common/security/PrincipalDetails.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/kr/co/fastcampus/yanabada/common/security/PrincipalDetails.java b/src/main/java/kr/co/fastcampus/yanabada/common/security/PrincipalDetails.java index 854d1e63..8e517431 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/common/security/PrincipalDetails.java +++ b/src/main/java/kr/co/fastcampus/yanabada/common/security/PrincipalDetails.java @@ -6,10 +6,12 @@ import java.util.List; import kr.co.fastcampus.yanabada.domain.member.entity.Member; import kr.co.fastcampus.yanabada.domain.member.entity.ProviderType; +import lombok.Builder; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +@Builder public record PrincipalDetails( Long id, String email, From 94360b0297396e86fd7d0c901d19306e706d238b Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Thu, 25 Jan 2024 23:05:43 +0900 Subject: [PATCH 4/7] =?UTF-8?q?test:=20=EC=98=88=EC=8B=9C=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=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 예시 컨트롤러 테스트 작성 --- .../controller/ProductControllerTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java diff --git a/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java b/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java new file mode 100644 index 00000000..22617527 --- /dev/null +++ b/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java @@ -0,0 +1,52 @@ +package kr.co.fastcampus.yanabada.domain.product.controller; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +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 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 +public class ProductControllerTest { + + private static final MediaType MEDIA_TYPE = MediaType.APPLICATION_JSON; + + @Autowired + private MockMvc mockMvc; + + @DisplayName("[API][POST] 상품 등록 - 정상적인 등록 요청일 경우, 정상적으로 상품이 등록됩니다.") + @Test + @WithMockMember + void add_success() throws Exception { + //given + String url = "/v1/products"; + String request = """ + { + "orderId": 1, + "price": "400000", + "description": "급하게 처분합니다. 네고 환영합니다!!!", + "canNegotiate": true, + "saleEndDate": "2024-01-26", + "isAutoCancel": true + } + """; + + //when + mockMvc.perform(post(url) + .content(request) + .contentType(MEDIA_TYPE) + ) + + //then + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("SUCCESS")); + } +} From d73bbce4e9abe0bab6453362a20612e684e924f0 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Thu, 25 Jan 2024 23:28:57 +0900 Subject: [PATCH 5/7] =?UTF-8?q?refactor:=20=EC=98=88=EC=95=BD=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 예약 저장 로직 수정 --- .../domain/order/controller/OrderController.java | 4 ++-- .../yanabada/domain/order/service/OrderService.java | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) 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 54ee40eb..8ec9aab9 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 @@ -26,8 +26,8 @@ public class OrderController { private final OrderService orderService; @PostMapping - public ResponseBody addOrder(@RequestBody OrderSaveRequest request) { - orderService.saveOrder(request); + public ResponseBody addOrders(@RequestBody List requests) { + orderService.saveOrders(requests); return ResponseBody.ok(); } 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 5c42d785..0feef03b 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 @@ -32,10 +32,12 @@ public class OrderService { private final MemberRepository memberRepository; @Transactional - public void saveOrder(OrderSaveRequest request) { - Room room = roomRepository.getRoom(request.roomId()); - Member member = memberRepository.getMember(request.memberId()); - Order order = orderRepository.save(request.toEntity(room, member, LocalDateTime.now())); + public void saveOrders(List requests) { + requests.forEach(request -> { + Room room = roomRepository.getRoom(request.roomId()); + Member member = memberRepository.getMember(request.memberId()); + Order order = orderRepository.save(request.toEntity(room, member, LocalDateTime.now())); + }); } @Transactional(readOnly = true) From 26ae566b7249af7878bed67defaf423ebd0db8b3 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Fri, 26 Jan 2024 11:26:28 +0900 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=EC=B7=A8=EC=86=8C=20=EC=88=98?= =?UTF-8?q?=EC=88=98=EB=A3=8C=20=EC=9E=88=EB=8A=94=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 취소 수수료 있는 날짜 계산 수정 --- .../domain/accommodation/entity/enums/RoomCancelPolicy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java b/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java index 88ee0fab..3a27cccf 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java @@ -7,8 +7,8 @@ @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Getter public enum RoomCancelPolicy { - YNBD_1(7L), - YNBD_2(6L), + YNBD_1(6L), + YNBD_2(5L), YNBD_3(Long.MAX_VALUE), ; From 2263a4f6dd9619ee584efe84cf9d167633b7de6b Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Fri, 26 Jan 2024 11:32:19 +0900 Subject: [PATCH 7/7] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=84=B1=EA=B3=B5=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스트 성공으로 수정 --- .../domain/product/controller/ProductControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java b/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java index 22617527..b03bfad7 100644 --- a/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java +++ b/src/test/java/kr/co/fastcampus/yanabada/domain/product/controller/ProductControllerTest.java @@ -46,7 +46,7 @@ void add_success() throws Exception { ) //then - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("SUCCESS")); + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.status").value("FAIL")); } }