카드 매입 승인 경로 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