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

This commit is contained in:
forge-bot 2026-07-30 10:04:31 +00:00
parent fda9764f5c
commit 793c7f10ad

View file

@ -0,0 +1,120 @@
package com.acquirex.approval.service;
import com.acquirex.approval.domain.ApprovalRequest;
import com.acquirex.approval.domain.ApprovalRequest.ApprovalStatus;
import com.acquirex.approval.dto.ApprovalDto.Request;
import com.acquirex.approval.dto.ApprovalDto.Response;
import com.acquirex.approval.repository.ApprovalRequestRepository;
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 ApprovalServiceTest {
@Mock
private ApprovalRequestRepository repository;
private ApprovalService approvalService;
@BeforeEach
void setUp() {
approvalService = new ApprovalService(repository);
}
@Test
@DisplayName("Should approve valid request")
void processApproval_ValidRequest_ReturnsApproved() {
Request dto = new Request("4532123456789012", "MERCHANT001", new BigDecimal("100.00"), "KRW");
ApprovalRequest savedRequest = new ApprovalRequest(dto.getCardNumber(), dto.getMerchantId(), dto.getAmount(), dto.getCurrency());
savedRequest.setId(1L);
when(repository.save(any(ApprovalRequest.class))).thenReturn(savedRequest);
Response response = approvalService.processApproval(dto);
assertNotNull(response);
assertEquals(ApprovalStatus.APPROVED, response.getStatus());
assertNotNull(response.getApprovalCode());
assertTrue(response.getApprovalCode().startsWith("APP-"));
verify(repository, times(2)).save(any(ApprovalRequest.class));
}
@Test
@DisplayName("Should decline request with invalid amount")
void processApproval_InvalidAmount_ReturnsDeclined() {
Request dto = new Request("4532123456789012", "MERCHANT001", new BigDecimal("-10.00"), "KRW");
ApprovalRequest savedRequest = new ApprovalRequest(dto.getCardNumber(), dto.getMerchantId(), dto.getAmount(), dto.getCurrency());
savedRequest.setId(1L);
when(repository.save(any(ApprovalRequest.class))).thenReturn(savedRequest);
Response response = approvalService.processApproval(dto);
assertNotNull(response);
assertEquals(ApprovalStatus.DECLINED, response.getStatus());
assertEquals("Validation failed", response.getMessage());
}
@Test
@DisplayName("Should decline request with short card number")
void processApproval_ShortCardNumber_ReturnsDeclined() {
Request dto = new Request("1234", "MERCHANT001", new BigDecimal("100.00"), "KRW");
ApprovalRequest savedRequest = new ApprovalRequest(dto.getCardNumber(), dto.getMerchantId(), dto.getAmount(), dto.getCurrency());
savedRequest.setId(1L);
when(repository.save(any(ApprovalRequest.class))).thenReturn(savedRequest);
Response response = approvalService.processApproval(dto);
assertNotNull(response);
assertEquals(ApprovalStatus.DECLINED, response.getStatus());
}
@Test
@DisplayName("Should find approval by ID")
void findById_ExistingId_ReturnsRequest() {
ApprovalRequest request = new ApprovalRequest("4532123456789012", "MERCHANT001", new BigDecimal("100.00"), "KRW");
request.setId(1L);
request.setStatus(ApprovalStatus.APPROVED);
when(repository.findById(1L)).thenReturn(java.util.Optional.of(request));
ApprovalRequest result = approvalService.findById(1L);
assertNotNull(result);
assertEquals(1L, result.getId());
assertEquals(ApprovalStatus.APPROVED, result.getStatus());
}
@Test
@DisplayName("Should throw exception for non-existing ID")
void findById_NonExistingId_ThrowsException() {
when(repository.findById(999L)).thenReturn(java.util.Optional.empty());
assertThrows(IllegalArgumentException.class, () -> approvalService.findById(999L));
}
@Test
@DisplayName("Should count pending approvals")
void countPendingApprovals_ReturnsCorrectCount() {
when(repository.countByStatus(ApprovalStatus.PENDING)).thenReturn(5L);
long count = approvalService.countPendingApprovals();
assertEquals(5L, count);
verify(repository).countByStatus(ApprovalStatus.PENDING);
}
}