카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
This commit is contained in:
parent
3f84c54d3b
commit
cd52b8e4d4
1 changed files with 103 additions and 0 deletions
|
|
@ -0,0 +1,103 @@
|
|||
package com.acquirex.service;
|
||||
|
||||
import com.acquirex.domain.AcquisitionStatus;
|
||||
import com.acquirex.domain.CardAcquisition;
|
||||
import com.acquirex.repository.CardAcquisitionRepository;
|
||||
import com.acquirex.service.CardAcquisitionService.AcquisitionRequest;
|
||||
import com.acquirex.service.CardAcquisitionService.AcquisitionResponse;
|
||||
import com.acquirex.service.CardAcquisitionService.ApprovalRequest;
|
||||
import com.acquirex.service.CardAcquisitionService.AcquisitionNotFoundException;
|
||||
import com.acquirex.service.CardAcquisitionService.InvalidAcquisitionStateException;
|
||||
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.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Optional;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class CardAcquisitionServiceTest {
|
||||
@Mock private CardAcquisitionRepository repository;
|
||||
@InjectMocks private CardAcquisitionService service;
|
||||
|
||||
private CardAcquisition pendingAcquisition;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
pendingAcquisition = CardAcquisition.builder()
|
||||
.id(1L).cardNumber("1234567890123456").merchantId("MERCHANT001")
|
||||
.amount(new BigDecimal("50000.00")).status(AcquisitionStatus.PENDING)
|
||||
.requestedAt(LocalDateTime.now()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("매입 요청 저장 성공")
|
||||
void requestAcquisition_Success() {
|
||||
when(repository.save(any(CardAcquisition.class))).thenReturn(pendingAcquisition);
|
||||
AcquisitionResponse result = service.requestAcquisition(
|
||||
new AcquisitionRequest("1234567890123456", "MERCHANT001", new BigDecimal("50000.00")));
|
||||
assertThat(result.id()).isEqualTo(1L);
|
||||
assertThat(result.status()).isEqualTo(AcquisitionStatus.PENDING);
|
||||
verify(repository).save(any(CardAcquisition.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("매입 요청 조회 성공")
|
||||
void getAcquisition_Success() {
|
||||
when(repository.findById(1L)).thenReturn(Optional.of(pendingAcquisition));
|
||||
AcquisitionResponse result = service.getAcquisition(1L);
|
||||
assertThat(result.id()).isEqualTo(1L);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("매입 요청 조회 실패 - 존재하지 않음")
|
||||
void getAcquisition_NotFound() {
|
||||
when(repository.findById(999L)).thenReturn(Optional.empty());
|
||||
assertThatThrownBy(() -> service.getAcquisition(999L))
|
||||
.isInstanceOf(AcquisitionNotFoundException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("매입 승인 성공")
|
||||
void approveAcquisition_Success() {
|
||||
when(repository.findById(1L)).thenReturn(Optional.of(pendingAcquisition));
|
||||
when(repository.save(any(CardAcquisition.class))).thenAnswer(i -> i.getArgument(0));
|
||||
AcquisitionResponse result = service.approveAcquisition(1L, new ApprovalRequest("ADMIN001"));
|
||||
assertThat(result.status()).isEqualTo(AcquisitionStatus.APPROVED);
|
||||
assertThat(result.approvedBy()).isEqualTo("ADMIN001");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("매입 승인 실패 - 이미 처리됨")
|
||||
void approveAcquisition_AlreadyProcessed() {
|
||||
pendingAcquisition.setStatus(AcquisitionStatus.APPROVED);
|
||||
when(repository.findById(1L)).thenReturn(Optional.of(pendingAcquisition));
|
||||
assertThatThrownBy(() -> service.approveAcquisition(1L, new ApprovalRequest("ADMIN001")))
|
||||
.isInstanceOf(InvalidAcquisitionStateException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("매입 거절 성공")
|
||||
void rejectAcquisition_Success() {
|
||||
when(repository.findById(1L)).thenReturn(Optional.of(pendingAcquisition));
|
||||
when(repository.save(any(CardAcquisition.class))).thenAnswer(i -> i.getArgument(0));
|
||||
AcquisitionResponse result = service.rejectAcquisition(1L, new ApprovalRequest("ADMIN001"));
|
||||
assertThat(result.status()).isEqualTo(AcquisitionStatus.REJECTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("대기 중인 요청 목록 조회")
|
||||
void getPendingAcquisitions_Success() {
|
||||
when(repository.findByStatus(AcquisitionStatus.PENDING)).thenReturn(java.util.List.of(pendingAcquisition));
|
||||
var result = service.getPendingAcquisitions();
|
||||
assertThat(result).hasSize(1);
|
||||
assertThat(result.get(0).status()).isEqualTo(AcquisitionStatus.PENDING);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue