From 2215bb5b6ea309a85e0a8cac8ccf149d312c9ad7 Mon Sep 17 00:00:00 2001 From: hagd0520 <146146134+hagd0520@users.noreply.github.com> Date: Sat, 20 Apr 2024 15:34:33 +0900 Subject: [PATCH] Kyungwhan (#53) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Recharge * fix: git pull * feat: git pull * feat: git pull * merge : 충돌 해결 * fix * fix : cashlog 중복 제거 * fix : 달력 예약되어있는 날짜 수정 * fix * fix * fix * refactor: Refactor * feat: Inheritance of payment Entities, Add Querydsl on CashLogRepository * for merge * fix: Bug fix * feat: CashLog 쿼리 최적화, 결제 내역에 Pay 관련 데이터만 출력되도록 변경, 2차 프로젝트 엔티티 추가 * for merge * refactor : reservation save, modify 서비스와 컨트롤러 리팩토링 * feat : HOST, GUEST 역할 분리 * feat : 웹소켓 연결 설정 * commit * feat : 채팅방 생성 후 db에 저장, 생성된 채팅방 id를 응답 * fix : 특정 채팅방만 구독 * feat : 클라이언트로부터 받는 메세지 정보 DTO로 받음, DB에 저장 후 DTO로 응답, 채팅방 정보 전송 * fix : WebSocketConfig에서 CORS 설정에 배포환경 추가 * refactor : 채팅 api와 웹소켓 컨트롤러 구분 * feat : 채팅방에 이전 채팅 내역 찾아서 보내기 * feat: Add Batch, Settle, modify ReservationInit etc * merge * feat : 마이페이지 나의 문의내역을 위한 DTO * fix : 채팅방에 다른 유저 접근 못하게 설정 * feat : 마이페이지 나의 문의내역 채팅방 리스트 채팅방 생성된 순서로 정렬(수정 필요) * feat : 숙소 예약 현황 불러오기1 * feat : 숙소 호스트 숙소 관리 페이지 초안 완성 * feat : 채팅방 최신 메세지 순으로 정렬 * feat : 쿠폰 관련 CRUD 패키지 생성 * feat : 쿠폰 생성 로직 구현1 * feat : 첫 예약 쿠폰 발급 로직 초안 구현 * feat: SettleController * feat : Guest의 쿠폰 가지고 오는 로직 구현 * feat : 채팅방 퇴장을 위한 필드 추가, 채팅방 생성 로직 변경 * feat : 마이페이지 문의내역 게스트와 호스트 구분 - 게스트는 퇴장한 채팅방 보이지 않게 * feat : 종료된 채팅방 정보를 위해 DTO에 필드 추가 * feat : 채팅 내역은 없고 생성만 된 채팅방 마이페이지에서 채팅방이 생성된 시간 표시 - ChatRoom이 DateEntity를 상속받게 함 - DTO에도 생성시간 필드 추가 * feat: Settle Api * feat : 쿠폰 사용 로직 초안 구현 * feat : 결제 시 쿠폰 사용 구현 초안 * feat : 쿠폰 사용 시 삭제하는 컨트롤러, 서비스 구현 중1 * feat: Settle Page * feat : 마이페이지 문의내역 호스트 진행중/종료 구분 * fix: bug * fix * fix: bug fix * fix : 마이페이지 호스트와 게스트 분리 후 페이징 문제 해결 * fix : 마이페이지 문의내역 응답 유저 역할로만 구분 * fix : 채팅내역이 없는 채팅방은 마이페이지 문의내역에 표시하지 않음 * feat : 채팅방 입장 및 퇴장 시 메세지 읽음 처리 * feat : 채팅방 목록 응답 시 안 읽은 메세지 개수 포함 * feat : 채팅방 목록 응답 시 안 읽은 메세지 개수 포함 * fix : 채팅방 목록 응답 시 안 읽은 메세지 개수 포함(상대방이 보낸 메세지들 중) * refactor : 코드 정리 * feat : 쿠폰 사용 시 CouponRecord에 사용기록 저장 및 쿠폰 삭제 * feat: settleKw * merge * feat: Refactor Init * feat : ReservationService 테스트 코드 작성 * fix: Fix bug on Settle * fix * fix * merge * test : ReservationController 테스트 코드 작성 중 * test : ReservationControllerTest 코드 작성(추가 확인 필요) * merge * feat: CashLogControllerTest * delete : Withdraw 엔티티 삭제됨 * fix : ReservationControllerTest 수정 * fix : ReservationControllerTest 수정 - ObjectMapper로 응답 데이터 비교 * fix : ReservationControllerTest 수정 - ObjectMapper로 응답 데이터 비교 * feat : ReservationControllerTest post * fix : ReservationControllerTest post 응답 데이터 비교 * fix : ReservationControllerTest MemberOnly 체커 작동하게 설정, 접근 권한까지 확인 * feat: Add test code * fix: Fix test code * feat: Payment ControllerTest * fix: Delete SecurityTestConfig * feat: CashLogServiceTest * feat: CashLogServiceTest 테스트 추가 * feat: 테스트 추가 * feat: RechargeServiceTest 작성 * merge * feat: SettleService 테스트 코드 작성 * fix: 버그 수정 --------- Co-authored-by: jkeum-dev Co-authored-by: kyumho kim --- .../recharge/service/RechargeService.java | 12 +- .../payment/settle/service/SettleService.java | 7 +- .../payment/settle/utils/SettleUt.java | 3 +- .../payment/pay/service/PayServiceTest.java | 77 +++--- .../refund/service/RefundServiceTest.java | 64 +++++ .../settle/batch/config/BatchTestConfig.java | 34 +-- .../batch/service/BatchServiceTest.java | 83 +++--- .../settle/service/SettleServiceTest.java | 238 ++++++++++++++++++ 8 files changed, 415 insertions(+), 103 deletions(-) create mode 100644 src/test/java/com/example/hotsix_be/payment/settle/service/SettleServiceTest.java diff --git a/src/main/java/com/example/hotsix_be/payment/recharge/service/RechargeService.java b/src/main/java/com/example/hotsix_be/payment/recharge/service/RechargeService.java index c6c0ac4..50813ce 100644 --- a/src/main/java/com/example/hotsix_be/payment/recharge/service/RechargeService.java +++ b/src/main/java/com/example/hotsix_be/payment/recharge/service/RechargeService.java @@ -36,15 +36,13 @@ public class RechargeService { @Transactional public void doRecharge(final TossConfirmRequest tossConfirmRequest, final Member member, final Long discountAmount) { TossPaymentRequest tossPaymentRequest = tossService.confirmTossPayment(tossConfirmRequest).block(); + Recharge recharge = null; - if (isVirtual(tossPaymentRequest)) { - Recharge recharge = requestVirtualRecharge(tossPaymentRequest, member); - rechargeRepository.save(recharge); - return; - } + if (isVirtual(tossPaymentRequest)) recharge = requestVirtualRecharge(tossPaymentRequest, member); + + if (isEasyPay(tossPaymentRequest)) recharge = easyPayRecharge(tossPaymentRequest, member, discountAmount); - if (isEasyPay(tossPaymentRequest)) { - Recharge recharge = easyPayRecharge(tossPaymentRequest, member, discountAmount); + if (recharge != null) { rechargeRepository.save(recharge); return; } diff --git a/src/main/java/com/example/hotsix_be/payment/settle/service/SettleService.java b/src/main/java/com/example/hotsix_be/payment/settle/service/SettleService.java index 9ba212f..ebacbf1 100644 --- a/src/main/java/com/example/hotsix_be/payment/settle/service/SettleService.java +++ b/src/main/java/com/example/hotsix_be/payment/settle/service/SettleService.java @@ -1,6 +1,5 @@ package com.example.hotsix_be.payment.settle.service; -import com.example.hotsix_be.common.exception.ExceptionCode; import com.example.hotsix_be.member.entity.Member; import com.example.hotsix_be.member.service.MemberService; import com.example.hotsix_be.payment.cashlog.entity.EventType; @@ -21,6 +20,8 @@ import java.time.LocalDate; import java.util.Optional; +import static com.example.hotsix_be.common.exception.ExceptionCode.ALREADY_BEEN_SETTLED; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -34,9 +35,7 @@ public class SettleService { @Transactional public Settle doSettle(final Reservation reservation) { // 이미 정산된 데이터일 경우 예외 발생 - if (reservation.isSettled()) { - throw new PaymentException(ExceptionCode.ALREADY_BEEN_SETTLED); - } + if (reservation.isSettled()) throw new PaymentException(ALREADY_BEEN_SETTLED); Member host = reservation.getHost(); // 호스트 Long price = reservation.getPrice(); // 원래 가격 diff --git a/src/main/java/com/example/hotsix_be/payment/settle/utils/SettleUt.java b/src/main/java/com/example/hotsix_be/payment/settle/utils/SettleUt.java index af4f877..4a61709 100644 --- a/src/main/java/com/example/hotsix_be/payment/settle/utils/SettleUt.java +++ b/src/main/java/com/example/hotsix_be/payment/settle/utils/SettleUt.java @@ -13,7 +13,8 @@ public class SettleUt { @Getter private static Integer commissionRate; - public SettleUt(@Value("${settle.commissionRate}") final Integer commissionRate) { + @Value("${settle.commissionRate}") + private void setCommissionRate(final Integer commissionRate) { this.commissionRate = commissionRate; } diff --git a/src/test/java/com/example/hotsix_be/payment/pay/service/PayServiceTest.java b/src/test/java/com/example/hotsix_be/payment/pay/service/PayServiceTest.java index 3d17a54..34b9d6f 100644 --- a/src/test/java/com/example/hotsix_be/payment/pay/service/PayServiceTest.java +++ b/src/test/java/com/example/hotsix_be/payment/pay/service/PayServiceTest.java @@ -54,50 +54,51 @@ public class PayServiceTest { private CouponService couponService; private Member guest; - private Member host; - private Hotel hotel; private Reservation reservation; @BeforeEach void initData() { - guest = new Member( - 1L, - "KIM", - "KIM", - null - ); + Member host = Member.builder() + .id(2L) + .socialLoginId("techit") + .nickname("techit") + .imageUrl(null) + .build(); + host.assignRole(Role.HOST); + + guest = Member.builder() + .id(3L) + .socialLoginId("Park") + .nickname("Park") + .imageUrl(null) + .restCash(0L) + .build(); guest.assignRole(Role.GUEST); - host = new Member( - 2L, - "techit", - "techit", - null - ); - host.assignRole(Role.HOST); - hotel = new Hotel( - "호텔", - "서울시 강남구", - "강남역 1번출구", - 10L, - 10L, - 10L, - 10L, - List.of("헬스장"), - "강남호텔", - "강남호텔입니다.", - 10000L, - host - ); - reservation = new Reservation( - LocalDate.now().plusDays(3), - LocalDate.now().plusDays(6), - 2L, - 100000L, - false, - hotel, - guest - ); + Hotel hotel = Hotel.builder() + .hotelType("호텔") + .address("서울시 강남구") + .addressDetail("강남역 1번출구") + .roomCnt(10L) + .bedCnt(10L) + .bathroomCnt(10L) + .maxPeople(10L) + .facility(List.of("헬스장")) + .nickname("강남호텔") + .description("강남호텔입니다.") + .price(10000L) + .owner(host) + .build(); + + reservation = Reservation.builder() + .checkInDate(LocalDate.now().plusDays(3)) + .checkOutDate(LocalDate.now().plusDays(6)) + .guests(2L) + .price(100000L) + .isPaid(false) + .hotel(hotel) + .member(guest) + .build(); } @Test diff --git a/src/test/java/com/example/hotsix_be/payment/refund/service/RefundServiceTest.java b/src/test/java/com/example/hotsix_be/payment/refund/service/RefundServiceTest.java index 9e504e5..590147a 100644 --- a/src/test/java/com/example/hotsix_be/payment/refund/service/RefundServiceTest.java +++ b/src/test/java/com/example/hotsix_be/payment/refund/service/RefundServiceTest.java @@ -1,12 +1,22 @@ package com.example.hotsix_be.payment.refund.service; +import com.example.hotsix_be.hotel.entity.Hotel; +import com.example.hotsix_be.member.entity.Member; +import com.example.hotsix_be.member.entity.Role; import com.example.hotsix_be.payment.cashlog.service.CashLogService; import com.example.hotsix_be.payment.refund.repository.RefundRepository; +import com.example.hotsix_be.reservation.entity.Reservation; +import org.junit.jupiter.api.BeforeEach; +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; +import java.time.LocalDate; +import java.util.List; + @ExtendWith(MockitoExtension.class) public class RefundServiceTest { @InjectMocks @@ -18,5 +28,59 @@ public class RefundServiceTest { @Mock private CashLogService cashLogService; + private Member guest; + private Reservation reservation; + + @BeforeEach + void initData() { + guest = new Member( + 1L, + "KIM", + "KIM", + null + ); + guest.assignRole(Role.GUEST); + + Member host = new Member( + 2L, + "techit", + "techit", + null + ); + host.assignRole(Role.HOST); + Hotel hotel = new Hotel( + "호텔", + "서울시 강남구", + "강남역 1번출구", + 10L, + 10L, + 10L, + 10L, + List.of("헬스장"), + "강남호텔", + "강남호텔입니다.", + 10000L, + host + ); + reservation = new Reservation( + LocalDate.now().plusDays(3), + LocalDate.now().plusDays(6), + 2L, + 100000L, + false, + hotel, + guest + ); + } + + @Test + @DisplayName("예약 취소를 진행한다.") + void doRefund() { + // given + + // when + refundService.doRefund(reservation, 0L); + // then + } } diff --git a/src/test/java/com/example/hotsix_be/payment/settle/batch/config/BatchTestConfig.java b/src/test/java/com/example/hotsix_be/payment/settle/batch/config/BatchTestConfig.java index d714840..0dcc286 100644 --- a/src/test/java/com/example/hotsix_be/payment/settle/batch/config/BatchTestConfig.java +++ b/src/test/java/com/example/hotsix_be/payment/settle/batch/config/BatchTestConfig.java @@ -1,16 +1,18 @@ -package com.example.hotsix_be.payment.settle.batch.config; - -/* - -@Configuration -@RequiredArgsConstructor -public class BatchTestConfig { - @Bean - public JobLauncherTestUtils settleJobLauncherTestUtils(Job settleJob) { - JobLauncherTestUtils utils = new JobLauncherTestUtils(); - utils.setJob(settleJob); - return utils; - } -} - -*/ +//package com.example.hotsix_be.payment.settle.batch.config; +// +//import lombok.RequiredArgsConstructor; +//import org.springframework.batch.core.Job; +//import org.springframework.batch.test.JobLauncherTestUtils; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +//@Configuration +//@RequiredArgsConstructor +//public class BatchTestConfig { +// @Bean +// public JobLauncherTestUtils settleJobLauncherTestUtils(Job settleJob) { +// JobLauncherTestUtils utils = new JobLauncherTestUtils(); +// utils.setJob(settleJob); +// return utils; +// } +//} diff --git a/src/test/java/com/example/hotsix_be/payment/settle/batch/service/BatchServiceTest.java b/src/test/java/com/example/hotsix_be/payment/settle/batch/service/BatchServiceTest.java index 7a51b66..a78b49b 100644 --- a/src/test/java/com/example/hotsix_be/payment/settle/batch/service/BatchServiceTest.java +++ b/src/test/java/com/example/hotsix_be/payment/settle/batch/service/BatchServiceTest.java @@ -1,37 +1,46 @@ -package com.example.hotsix_be.payment.settle.batch.service; - - -/* -@SpringBootTest -@SpringBatchTest -@ActiveProfiles("test") -public class BatchServiceTest { - @Autowired - private JobLauncherTestUtils settleJobLauncherTestUtils; - - @DisplayName("settleJob launchTest") - @Test - public void t1() throws Exception { - - // given - LocalDate currentDateTime = LocalDate.now(); - - LocalDate endDay = currentDateTime - .with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)); - - JobParameters jobParameters = new JobParametersBuilder() - .addLocalDate("endDay", endDay) - .addJobParameters(settleJobLauncherTestUtils.getUniqueJobParameters()) - .toJobParameters(); - - // when - JobExecution jobExecution = settleJobLauncherTestUtils.launchJob(jobParameters); - - // then - Assertions.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED); - Assertions.assertEquals(jobExecution.getExitStatus(), ExitStatus.COMPLETED); - }} -======= - } -} - */ \ No newline at end of file +//package com.example.hotsix_be.payment.settle.batch.service; +// +//import org.junit.jupiter.api.Assertions; +//import org.junit.jupiter.api.DisplayName; +//import org.junit.jupiter.api.Test; +//import org.springframework.batch.core.*; +//import org.springframework.batch.test.JobLauncherTestUtils; +//import org.springframework.batch.test.context.SpringBatchTest; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.test.context.ActiveProfiles; +// +//import java.time.DayOfWeek; +//import java.time.LocalDate; +//import java.time.temporal.TemporalAdjusters; +// +//@SpringBootTest +//@SpringBatchTest +//@ActiveProfiles("test") +//public class BatchServiceTest { +// @Autowired +// private JobLauncherTestUtils settleJobLauncherTestUtils; +// +// @DisplayName("settleJob launchTest") +// @Test +// public void t1() throws Exception { +// +// // given +// LocalDate currentDateTime = LocalDate.now(); +// +// LocalDate endDay = currentDateTime +// .with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)); +// +// JobParameters jobParameters = new JobParametersBuilder() +// .addLocalDate("endDay", endDay) +// .addJobParameters(settleJobLauncherTestUtils.getUniqueJobParameters()) +// .toJobParameters(); +// +// // when +// JobExecution jobExecution = settleJobLauncherTestUtils.launchJob(jobParameters); +// +// // then +// Assertions.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED); +// Assertions.assertEquals(jobExecution.getExitStatus(), ExitStatus.COMPLETED); +// } +//} \ No newline at end of file diff --git a/src/test/java/com/example/hotsix_be/payment/settle/service/SettleServiceTest.java b/src/test/java/com/example/hotsix_be/payment/settle/service/SettleServiceTest.java new file mode 100644 index 0000000..b8df4da --- /dev/null +++ b/src/test/java/com/example/hotsix_be/payment/settle/service/SettleServiceTest.java @@ -0,0 +1,238 @@ +package com.example.hotsix_be.payment.settle.service; + +import com.example.hotsix_be.hotel.entity.Hotel; +import com.example.hotsix_be.member.entity.Member; +import com.example.hotsix_be.member.entity.Role; +import com.example.hotsix_be.member.service.MemberService; +import com.example.hotsix_be.payment.cashlog.service.CashLogService; +import com.example.hotsix_be.payment.payment.exception.PaymentException; +import com.example.hotsix_be.payment.settle.dto.response.MySettleResponse; +import com.example.hotsix_be.payment.settle.dto.response.ReservationForSettleResponse; +import com.example.hotsix_be.payment.settle.entity.Settle; +import com.example.hotsix_be.payment.settle.repository.SettleRepository; +import com.example.hotsix_be.payment.settle.utils.SettleUt; +import com.example.hotsix_be.reservation.entity.Reservation; +import com.example.hotsix_be.reservation.service.ReservationService; +import org.junit.jupiter.api.BeforeEach; +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.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.test.util.ReflectionTestUtils; + +import java.time.LocalDate; +import java.util.List; + +import static com.example.hotsix_be.common.exception.ExceptionCode.ALREADY_BEEN_SETTLED; +import static com.example.hotsix_be.payment.settle.utils.SettleUt.getExpectedSettleDate; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class SettleServiceTest { + @InjectMocks + private SettleService settleService; + + @Mock + private CashLogService cashLogService; + + @Mock + private MemberService memberService; + + @Mock + private ReservationService reservationService; + + @Mock + private SettleRepository settleRepository; + + @Spy + private SettleUt settleUt; + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(settleUt, "commissionRate", 10); + } + + @Test + @DisplayName("예약을 정산한다.") + void doSettle() { + // given + Member admin = Member.builder() + .id(1L) + .socialLoginId("KIM") + .nickname("KIM") + .imageUrl(null) + .restCash(0L) + .build(); + + Member host = Member.builder() + .id(2L) + .socialLoginId("techit") + .nickname("techit") + .imageUrl(null) + .restCash(0L) + .build(); + host.assignRole(Role.HOST); + + Member guest = Member.builder() + .id(3L) + .socialLoginId("Park") + .nickname("Park") + .imageUrl(null) + .restCash(0L) + .build(); + guest.assignRole(Role.GUEST); + + Hotel hotel = Hotel.builder() + .hotelType("호텔") + .address("서울시 강남구") + .addressDetail("강남역 1번출구") + .roomCnt(10L) + .bedCnt(10L) + .bathroomCnt(10L) + .maxPeople(10L) + .facility(List.of("헬스장")) + .nickname("강남호텔") + .description("강남호텔입니다.") + .price(10000L) + .owner(host) + .build(); + + Reservation reservation = Reservation.builder() + .checkInDate(LocalDate.now().plusDays(3)) + .checkOutDate(LocalDate.now().plusDays(6)) + .guests(2L) + .price(100000L) + .isPaid(false) + .hotel(hotel) + .member(guest) + .couponDiscountAmount(0L) + .build(); + + when(memberService.getMemberById(any())).thenReturn(admin); + + // when + Settle result = settleService.doSettle(reservation); + + // then + assertThat(result.getTotalAmount()).isEqualTo(reservation.getPrice()); + assertThat(admin.getRestCash()).isEqualTo(result.getCommission()); + } + + @Test + @DisplayName("예약을 정산한다. - 실패 케이스(이미 정산된 예약)") + void doSettle_alreadyBeenSettled() { + // given + Reservation reservation = Reservation.builder().settleDate(LocalDate.now()).build(); + + // when + Throwable thrown = catchThrowable(() -> settleService.doSettle(reservation)); + + // then + assertThat(thrown).isInstanceOf(PaymentException.class) + .hasMessage(ALREADY_BEEN_SETTLED.getMessage()); + } + + @Test + @DisplayName("Settle을 저장한다.") + void save() { + // given + Settle settle = Settle.builder().build(); + + when(settleRepository.save(any())).thenReturn(settle); + + // when + settleService.save(settle); + + // then + } + + @Test + @DisplayName("나의 정산 정보를 가져온다.") + void getMySettleByMemberId() { + // given + Member host = Member.builder() + .id(2L) + .socialLoginId("techit") + .nickname("techit") + .restCash(1000000L) + .imageUrl(null) + .build(); + host.assignRole(Role.HOST); + + when(memberService.getMemberById(any())).thenReturn(host); + when(reservationService.findExpectedSettleByHost(any())).thenReturn(100000L); + + // when + MySettleResponse result = settleService.getMySettleByMemberId(1L); + + // then + assertThat(result.getRestCash()).isEqualTo(host.getRestCash()); + assertThat(result.getSettleDate()).isEqualTo(getExpectedSettleDate()); + } + + @Test + @DisplayName("나의 정산 목록을 가져온다.") + void cw() { + // given + Pageable pageable = PageRequest.of(0, 1); + + Member host = Member.builder() + .id(2L) + .socialLoginId("techit") + .nickname("techit") + .imageUrl(null) + .build(); + host.assignRole(Role.HOST); + + Member guest = Member.builder() + .id(3L) + .socialLoginId("Park") + .nickname("Park") + .imageUrl(null) + .build(); + guest.assignRole(Role.GUEST); + + Hotel hotel = Hotel.builder() + .hotelType("호텔") + .address("서울시 강남구") + .addressDetail("강남역 1번출구") + .roomCnt(10L) + .bedCnt(10L) + .bathroomCnt(10L) + .maxPeople(10L) + .facility(List.of("헬스장")) + .nickname("강남호텔") + .description("강남호텔입니다.") + .price(10000L) + .owner(host) + .build(); + + Reservation reservation = Reservation.builder() + .checkInDate(LocalDate.now().plusDays(3)) + .checkOutDate(LocalDate.now().plusDays(6)) + .guests(2L) + .price(100000L) + .isPaid(false) + .hotel(hotel) + .member(guest) + .build(); + + when(reservationService.findByHostIdAndParamsAndCancelDateNotNull(any(), any(), any(), any(), any())).thenReturn(new PageImpl<>(List.of(reservation), pageable, 1)); + + // when + Page result = settleService.getReserveForSettleByMemberIdAndParams(null, null, null, null, pageable); + + // then + assertThat(result.getTotalElements()).isEqualTo(1); + } +}