카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
This commit is contained in:
parent
37e2f81ff9
commit
8314c93c2b
1 changed files with 158 additions and 0 deletions
|
|
@ -0,0 +1,158 @@
|
|||
package com.acquirex.approval;
|
||||
|
||||
import com.acquirex.approval.domain.AcquisitionApproval;
|
||||
import com.acquirex.approval.domain.AcquisitionApproval.ApprovalStatus;
|
||||
import com.acquirex.approval.repository.AcquisitionApprovalRepository;
|
||||
import com.acquirex.approval.service.AcquisitionApprovalService;
|
||||
import com.acquirex.approval.service.AcquisitionApprovalService.ApprovalRequest;
|
||||
import com.acquirex.approval.service.AcquisitionApprovalService.ApprovalResponse;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
||||
|
||||
/** 카드 매입 승인 통합 테스트 - Spring Boot 3 전환 검증 */
|
||||
@SpringBootTest
|
||||
@AutoConfigureMockMvc
|
||||
class AcquisitionApprovalTest {
|
||||
|
||||
@Autowired private MockMvc mockMvc;
|
||||
@Autowired private AcquisitionApprovalRepository repository;
|
||||
@Autowired private AcquisitionApprovalService service;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() { repository.deleteAll(); }
|
||||
|
||||
// === Service Tests ===
|
||||
@Test
|
||||
@DisplayName("매입 승인 요청 처리 성공")
|
||||
void processApproval_Success() {
|
||||
ApprovalRequest request = new ApprovalRequest("MERCH001", "1234567890123456", new BigDecimal("50000.00"));
|
||||
ApprovalResponse response = service.processApproval(request);
|
||||
|
||||
assertNotNull(response);
|
||||
assertEquals("MERCH001", response.merchantId);
|
||||
assertEquals(ApprovalStatus.APPROVED, response.status);
|
||||
assertTrue(response.approvalNumber.startsWith("AP"));
|
||||
assertTrue(response.cardNumber.matches("\\d{6}\*\*\*\*\\d{4}"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("승인 번호로 조회 성공")
|
||||
void findByApprovalNumber_Success() {
|
||||
ApprovalRequest request = new ApprovalRequest("MERCH001", "1234567890123456", new BigDecimal("50000.00"));
|
||||
ApprovalResponse created = service.processApproval(request);
|
||||
|
||||
ApprovalResponse found = service.findByApprovalNumber(created.approvalNumber);
|
||||
assertNotNull(found);
|
||||
assertEquals(created.approvalNumber, found.approvalNumber);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("승인 번호로 조회 - 존재하지 않는 경우 예외 발생")
|
||||
void findByApprovalNumber_NotFound() {
|
||||
assertThrows(IllegalArgumentException.class, () -> service.findByApprovalNumber("NOTEXIST"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("승인 취소 성공")
|
||||
void cancelApproval_Success() {
|
||||
ApprovalRequest request = new ApprovalRequest("MERCH001", "1234567890123456", new BigDecimal("50000.00"));
|
||||
ApprovalResponse created = service.processApproval(request);
|
||||
|
||||
ApprovalResponse cancelled = service.cancelApproval(created.id);
|
||||
assertEquals(ApprovalStatus.CANCELLED, cancelled.status);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("승인 취소 - 이미 취소된 경우 예외 발생")
|
||||
void cancelApproval_AlreadyCancelled() {
|
||||
ApprovalRequest request = new ApprovalRequest("MERCH001", "1234567890123456", new BigDecimal("50000.00"));
|
||||
ApprovalResponse created = service.processApproval(request);
|
||||
service.cancelApproval(created.id);
|
||||
|
||||
assertThrows(IllegalStateException.class, () -> service.cancelApproval(created.id));
|
||||
}
|
||||
|
||||
// === Controller Tests ===
|
||||
@Test
|
||||
@DisplayName("POST /api/v1/acquisitions/approvals - 승인 요청 성공")
|
||||
void createApproval_Success() throws Exception {
|
||||
String json = "{\"merchantId\":\"MERCH001\",\"cardNumber\":\"1234567890123456\",\"approvalAmount\":50000.00}";
|
||||
|
||||
mockMvc.perform(post("/api/v1/acquisitions/approvals")
|
||||
.contentType(MediaType.APPLICATION_JSON).content(json))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(jsonPath("$.merchantId").value("MERCH001"))
|
||||
.andExpect(jsonPath("$.status").value("APPROVED"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("POST /api/v1/acquisitions/approvals - 유효성 검증 실패")
|
||||
void createApproval_ValidationError() throws Exception {
|
||||
String json = "{\"merchantId\":\"\",\"cardNumber\":\"123\",\"approvalAmount\":-100}";
|
||||
|
||||
mockMvc.perform(post("/api/v1/acquisitions/approvals")
|
||||
.contentType(MediaType.APPLICATION_JSON).content(json))
|
||||
.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("GET /api/v1/acquisitions/approvals/{approvalNumber} - 승인 조회 성공")
|
||||
void getApproval_Success() throws Exception {
|
||||
String json = "{\"merchantId\":\"MERCH001\",\"cardNumber\":\"1234567890123456\",\"approvalAmount\":50000.00}";
|
||||
MvcResult result = mockMvc.perform(post("/api/v1/acquisitions/approvals")
|
||||
.contentType(MediaType.APPLICATION_JSON).content(json)).andReturn();
|
||||
|
||||
String approvalNumber = com.jayway.jsonpath.JsonPath.read(result.getResponse().getContentAsString(), "$.approvalNumber");
|
||||
|
||||
mockMvc.perform(get("/api/v1/acquisitions/approvals/{approvalNumber}", approvalNumber))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.approvalNumber").value(approvalNumber));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("POST /api/v1/acquisitions/approvals/{id}/cancel - 승인 취소 성공")
|
||||
void cancelApproval_Controller_Success() throws Exception {
|
||||
String json = "{\"merchantId\":\"MERCH001\",\"cardNumber\":\"1234567890123456\",\"approvalAmount\":50000.00}";
|
||||
MvcResult result = mockMvc.perform(post("/api/v1/acquisitions/approvals")
|
||||
.contentType(MediaType.APPLICATION_JSON).content(json)).andReturn();
|
||||
|
||||
Long id = com.jayway.jsonpath.JsonPath.read(result.getResponse().getContentAsString(), "$.id");
|
||||
|
||||
mockMvc.perform(post("/api/v1/acquisitions/approvals/{id}/cancel", id))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.status").value("CANCELLED"));
|
||||
}
|
||||
|
||||
// === Domain Tests ===
|
||||
@Test
|
||||
@DisplayName("ApprovalStatus 모든 상태 확인")
|
||||
void testAllStatuses() {
|
||||
assertEquals(4, ApprovalStatus.values().length);
|
||||
assertNotNull(ApprovalStatus.PENDING);
|
||||
assertNotNull(ApprovalStatus.APPROVED);
|
||||
assertNotNull(ApprovalStatus.REJECTED);
|
||||
assertNotNull(ApprovalStatus.CANCELLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ApprovalStatus 설명 확인")
|
||||
void testStatusDescriptions() {
|
||||
assertEquals("대기", ApprovalStatus.PENDING.getDescription());
|
||||
assertEquals("승인", ApprovalStatus.APPROVED.getDescription());
|
||||
assertEquals("거절", ApprovalStatus.REJECTED.getDescription());
|
||||
assertEquals("취소", ApprovalStatus.CANCELLED.getDescription());
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue