카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
This commit is contained in:
parent
fbfedacd2d
commit
39da577136
1 changed files with 145 additions and 0 deletions
|
|
@ -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")));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue