From 39da5771362474fc2c2bcddba74f1e4c8ba7829e Mon Sep 17 00:00:00 2001 From: forge-bot Date: Thu, 30 Jul 2026 11:07:12 +0000 Subject: [PATCH] =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EB=A7=A4=EC=9E=85=20?= =?UTF-8?q?=EC=8A=B9=EC=9D=B8=20=EA=B2=BD=EB=A1=9C=20Spring=20Boot=203=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20(ACX-E2E-1785394564819)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CardAcquisitionServiceTest.java | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 src/test/java/com/acquirex/service/CardAcquisitionServiceTest.java diff --git a/src/test/java/com/acquirex/service/CardAcquisitionServiceTest.java b/src/test/java/com/acquirex/service/CardAcquisitionServiceTest.java new file mode 100644 index 0000000..b77412e --- /dev/null +++ b/src/test/java/com/acquirex/service/CardAcquisitionServiceTest.java @@ -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"))); + } +} \ No newline at end of file