카드 매입 승인 경로 Spring Boot 3 전환 #9

Closed
forge-bot wants to merge 8 commits from forge/ACX-E2E-1785394564819-attempt-10-run-d30bf2e27f38 into main
Showing only changes of commit 39da577136 - Show all commits

View file

@ -0,0 +1,145 @@
package com.acquirex.service;
import com.acquirex.dto.AcquisitionDto.Request;
import com.acquirex.dto.AcquisitionDto.Response;
import com.acquirex.entity.CardAcquisition;
import com.acquirex.entity.CardAcquisition.CardAcquisitionRepository;
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.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.math.BigDecimal;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class CardAcquisitionServiceTest {
@Mock
private CardAcquisitionRepository repository;
private CardAcquisitionService service;
@BeforeEach
void setUp() {
service = new CardAcquisitionService(repository);
}
@Test
@DisplayName("유효한 카드로 정상 승인 처리")
void processAcquisition_ValidCard_ShouldApprove() {
Request request = new Request();
request.setCardNumber("4532015112830366");
request.setMerchantId("MERCHANT001");
request.setAmount(new BigDecimal("100000"));
request.setCurrency("KRW");
when(repository.save(any(CardAcquisition.class)))
.thenAnswer(invocation -> {
CardAcquisition acq = invocation.getArgument(0);
acq.setId(1L);
return acq;
});
Response response = service.processAcquisition(request);
assertEquals("APPROVED", response.getStatus());
assertNotNull(response.getApprovalCode());
assertEquals(6, response.getApprovalCode().length());
assertEquals(new BigDecimal("100000"), response.getAmount());
assertEquals("KRW", response.getCurrency());
}
@Test
@DisplayName("유효하지 않은 카드번호 거부")
void processAcquisition_InvalidCardNumber_ShouldReject() {
Request request = new Request();
request.setCardNumber("1234567890123456");
request.setMerchantId("MERCHANT001");
request.setAmount(new BigDecimal("50000"));
request.setCurrency("KRW");
when(repository.save(any(CardAcquisition.class)))
.thenAnswer(invocation -> {
CardAcquisition acq = invocation.getArgument(0);
acq.setId(1L);
return acq;
});
Response response = service.processAcquisition(request);
assertEquals("REJECTED", response.getStatus());
assertNull(response.getApprovalCode());
assertTrue(response.getMessage().contains("유효하지 않은"));
}
@Test
@DisplayName("한도 초과 거래 거부")
void processAcquisition_ExceedLimit_ShouldReject() {
Request request = new Request();
request.setCardNumber("4532015112830366");
request.setMerchantId("MERCHANT001");
request.setAmount(new BigDecimal("15000000"));
request.setCurrency("KRW");
when(repository.save(any(CardAcquisition.class)))
.thenAnswer(invocation -> {
CardAcquisition acq = invocation.getArgument(0);
acq.setId(1L);
return acq;
});
Response response = service.processAcquisition(request);
assertEquals("REJECTED", response.getStatus());
assertTrue(response.getMessage().contains("한도"));
}
@Test
@DisplayName("의심스러운 거래 거부 (9999 시작 + 고액)")
void processAcquisition_SuspiciousTransaction_ShouldReject() {
Request request = new Request();
request.setCardNumber("9999123456789012");
request.setMerchantId("MERCHANT001");
request.setAmount(new BigDecimal("6000000"));
request.setCurrency("KRW");
when(repository.save(any(CardAcquisition.class)))
.thenAnswer(invocation -> {
CardAcquisition acq = invocation.getArgument(0);
acq.setId(1L);
return acq;
});
Response response = service.processAcquisition(request);
assertEquals("REJECTED", response.getStatus());
assertTrue(response.getMessage().contains("의심스러운"));
}
@Test
@DisplayName("카드번호 마스킹 처리 확인")
void processAcquisition_CardNumberMasked() {
Request request = new Request();
request.setCardNumber("4532015112830366");
request.setMerchantId("MERCHANT001");
request.setAmount(new BigDecimal("100000"));
request.setCurrency("KRW");
when(repository.save(any(CardAcquisition.class)))
.thenAnswer(invocation -> {
CardAcquisition acq = invocation.getArgument(0);
acq.setId(1L);
return acq;
});
service.processAcquisition(request);
verify(repository, times(2)).save(argThat(acq -> acq.getCardNumber().equals("4532****0366")));
}
}