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