This commit is contained in:
2026-08-11 10:45:53 +08:00
parent 4e79287a35
commit e4372783d0
13 changed files with 758 additions and 42 deletions
@@ -0,0 +1,27 @@
package com.baiyue.finance;
import com.baiyue.finance.controller.ClientFinanceController;
import com.baiyue.finance.controller.PlatformFinanceController;
import org.junit.jupiter.api.Test;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.*;
class FinanceContractTest {
@Test
void controllersUseFrozenFinancePaths() throws Exception {
assertEquals("/api/platform/finance/v1", PlatformFinanceController.class.getAnnotation(org.springframework.web.bind.annotation.RequestMapping.class).value()[0]);
assertEquals("/api/client/finance/v1", ClientFinanceController.class.getAnnotation(org.springframework.web.bind.annotation.RequestMapping.class).value()[0]);
String sql = Files.readString(Path.of("src/main/resources/db/finance.sql"));
assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS fin_bill"));
assertTrue(sql.contains("currency_code CHECK (currency_code = 'CNY')") || sql.contains("currency_code = 'CNY'"));
assertTrue(sql.contains("fin_fee_source") && sql.contains("fin_inbox_event"));
String unified = Files.readString(Path.of("../deploy/sql/头程数据库统一增量-MySQL8.sql"));
assertTrue(unified.contains("CREATE DATABASE IF NOT EXISTS baiyue_finance"));
assertTrue(unified.contains("assert_finance_permissions"));
assertTrue(unified.contains("platform:finance:bill:issue"));
assertTrue(unified.contains("merchant:finance:statement:view"));
}
}
@@ -0,0 +1,35 @@
package com.baiyue.finance;
import com.baiyue.finance.service.FinanceService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import java.math.BigDecimal;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.*;
class FinanceServiceValidationTest {
@Test
void rejectsUnsupportedCostTypeBeforeWrite() {
JdbcTemplate jdbc = mock(JdbcTemplate.class);
FinanceService service = new FinanceService(jdbc, new ObjectMapper());
var request = new FinanceService.CostRequest("C-1", "TICKET", 1L, null, null, null, null, "MANUAL", "拖车", BigDecimal.ONE, List.of("f"), null);
assertThrows(RuntimeException.class, () -> service.createCost(1L, 2L, request, "k1"));
verify(jdbc, never()).update(startsWith("INSERT INTO fin_cost"), (Object[]) any());
}
@Test
void rejectsNonPositiveAllocation() {
JdbcTemplate jdbc = mock(JdbcTemplate.class);
FinanceService service = new FinanceService(jdbc, new ObjectMapper());
var request = new FinanceService.ReceiptRequest("R-1", 1L, null, "BANK_TRANSFER", null, List.of("f"), null,
List.of(new FinanceService.ReceiptAllocation(10L, BigDecimal.ZERO)));
assertThrows(RuntimeException.class, () -> service.createReceipt(1L, 2L, request, "k2"));
}
}