카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
All checks were successful
Verify / source-contract (push) Successful in 11s
Verify / source-contract (pull_request) Successful in 12s

This commit is contained in:
forge-bot 2026-07-30 13:41:04 +00:00
parent 3f84c54d3b
commit cd52b8e4d4

View file

@ -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);
}
}