| | |
| | | import com.tourguide.modules.order.domain.RefundStatus; |
| | | import com.tourguide.modules.order.domain.PaymentMethod; |
| | | import com.tourguide.modules.order.entity.TourOrder; |
| | | import com.tourguide.modules.order.entity.TourOrderRefund; |
| | | import com.tourguide.modules.order.mapper.TourOrderMapper; |
| | | import com.tourguide.modules.order.mapper.TourOrderRefundMapper; |
| | | import com.tourguide.modules.order.payment.PaymentRefundGateway; |
| | | import org.junit.jupiter.api.BeforeEach; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.mockito.ArgumentCaptor; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | |
| | | import static org.assertj.core.api.Assertions.assertThat; |
| | | import static org.mockito.ArgumentMatchers.eq; |
| | | import static org.mockito.ArgumentMatchers.any; |
| | | import static org.mockito.Mockito.mock; |
| | | import static org.mockito.Mockito.never; |
| | | import static org.mockito.Mockito.times; |
| | |
| | | } |
| | | |
| | | @Test |
| | | void eachSuccessfulLocalRefundShouldCreateAnIndependentCompletedRecord() { |
| | | TourOrderRefundMapper refundMapper = mock(TourOrderRefundMapper.class); |
| | | refundService = new OrderRefundService(orderMapper, refundGateway, refundMapper); |
| | | TourOrder order = paidOrder(); |
| | | order.setPaymentMethod(PaymentMethod.TEMPORARY_BYPASS.getCode()); |
| | | |
| | | assertThat(refundService.requestRefund(order, new BigDecimal("20.00"))).isTrue(); |
| | | assertThat(refundService.requestRefund(order, new BigDecimal("16.00"))).isTrue(); |
| | | |
| | | ArgumentCaptor<TourOrderRefund> insertCaptor = ArgumentCaptor.forClass(TourOrderRefund.class); |
| | | verify(refundMapper, times(2)).insert(insertCaptor.capture()); |
| | | assertThat(insertCaptor.getAllValues()).extracting(TourOrderRefund::getRefundAmount) |
| | | .containsExactly(new BigDecimal("20.00"), new BigDecimal("16.00")); |
| | | verify(refundMapper, times(2)).updateById(any(TourOrderRefund.class)); |
| | | assertThat(insertCaptor.getAllValues()).extracting(TourOrderRefund::getRefundStatus) |
| | | .containsOnly(RefundStatus.REFUNDED.getCode()); |
| | | } |
| | | |
| | | @Test |
| | | void refundShouldRejectAmountAboveRemainingBalance() { |
| | | TourOrder order = paidOrder(); |
| | | order.setRefundedAmount(new BigDecimal("20.00")); |