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

Closed
forge-bot wants to merge 8 commits from forge/ACX-E2E-1785394564819-attempt-12-run-b7ea35c12b16 into main
Showing only changes of commit 5461d75291 - Show all commits

View file

@ -0,0 +1,98 @@
package com.acquirex.cardacquisition;
import com.acquirex.cardacquisition.entity.CardAcquisition;
import com.acquirex.cardacquisition.repository.CardAcquisitionRepository;
import com.acquirex.cardacquisition.service.CardAcquisitionService;
import org.junit.jupiter.api.BeforeEach;
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 java.util.List;
import java.util.Optional;
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
void requestAcquisition_ValidRequest_ReturnsApprovedResponse() {
when(repository.save(any(CardAcquisition.class))).thenAnswer(i -> {
CardAcquisition e = i.getArgument(0);
if (e.getId() == null) e.setId(1L);
return e;
});
when(repository.findByRequestTimeBetween(any(), any())).thenReturn(List.of());
AcquisitionRequest request = new AcquisitionRequest("MERCHANT001", "1234567890123456", new BigDecimal("50000"), "KRW");
AcquisitionResponse response = service.requestAcquisition(request);
assertNotNull(response);
assertEquals(1L, response.getId());
assertEquals(CardAcquisition.AcquisitionStatus.APPROVED, response.getStatus());
assertTrue(response.getApprovalCode().startsWith("APR"));
verify(repository, times(2)).save(any(CardAcquisition.class));
}
@Test
void requestAcquisition_ExceedsLimit_ThrowsException() {
AcquisitionRequest request = new AcquisitionRequest("MERCHANT001", "1234567890123456", new BigDecimal("15000000"), "KRW");
assertThrows(CardAcquisitionService.InvalidAcquisitionException.class, () -> service.requestAcquisition(request));
}
@Test
void getAcquisition_ExistingId_ReturnsResponse() {
CardAcquisition entity = new CardAcquisition("M1", "1111", new BigDecimal("1000"), "KRW");
entity.setId(1L);
entity.approve("APR123");
when(repository.findById(1L)).thenReturn(Optional.of(entity));
AcquisitionResponse response = service.getAcquisition(1L);
assertNotNull(response);
assertEquals(CardAcquisition.AcquisitionStatus.APPROVED, response.getStatus());
}
@Test
void getAcquisition_NotFound_ThrowsException() {
when(repository.findById(999L)).thenReturn(Optional.empty());
assertThrows(CardAcquisitionService.AcquisitionNotFoundException.class, () -> service.getAcquisition(999L));
}
@Test
void cancelAcquisition_ExistingPending_ReturnsCancelled() {
CardAcquisition entity = new CardAcquisition("M1", "1111", new BigDecimal("1000"), "KRW");
entity.setId(1L);
when(repository.findById(1L)).thenReturn(Optional.of(entity));
when(repository.save(any())).thenAnswer(i -> i.getArgument(0));
AcquisitionResponse response = service.cancelAcquisition(1L);
assertEquals(CardAcquisition.AcquisitionStatus.CANCELLED, response.getStatus());
}
@Test
void cancelAcquisition_AlreadyCancelled_ThrowsException() {
CardAcquisition entity = new CardAcquisition("M1", "1111", new BigDecimal("1000"), "KRW");
entity.setId(1L);
entity.setStatus(CardAcquisition.AcquisitionStatus.CANCELLED);
when(repository.findById(1L)).thenReturn(Optional.of(entity));
assertThrows(IllegalStateException.class, () -> service.cancelAcquisition(1L));
}
}