fix phase3 acceptance roots and payable validation

This commit is contained in:
2026-08-24 11:48:16 +08:00
parent 044678f65c
commit 257c019b36
15 changed files with 115 additions and 30 deletions
@@ -10,10 +10,33 @@ import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.assertj.core.api.Assertions.assertThat;
class PdaSplitSettlementSqlContractTest {
@Test
void addsPreloadConfirmationAuditColumnsForIncrementalPdaAllocation() throws Exception {
String moduleSql = new ClassPathResource("db/phase3-split-preload-schema.sql")
.getContentAsString(StandardCharsets.UTF_8);
String unifiedSql = Files.readString(Path.of("..", "deploy", "sql", "头程数据库统一增量-MySQL8.sql"),
StandardCharsets.UTF_8);
assertThat(moduleSql)
.contains("confirmed_by BIGINT UNSIGNED NULL")
.contains("confirmed_by_name VARCHAR(64) NULL")
.contains("confirmed_at DATETIME(3) NULL")
.contains("phase3_split_add_column('fl_preload_plan', 'confirmed_by'")
.contains("phase3_split_add_column('fl_preload_plan', 'confirmed_by_name'")
.contains("phase3_split_add_column('fl_preload_plan', 'confirmed_at'");
assertThat(unifiedSql)
.contains("CREATE PROCEDURE migrate_preload_confirmation_columns()")
.contains("ADD COLUMN confirmed_by BIGINT UNSIGNED NULL")
.contains("ADD COLUMN confirmed_by_name VARCHAR(64) NULL")
.contains("ADD COLUMN confirmed_at DATETIME(3) NULL");
}
@Test
void protectsLoadedAndRemainderSettlement() throws Exception {
String sql = new ClassPathResource("db/phase3-inbound-parent-child-schema.sql")
@@ -37,6 +37,14 @@ class FeePaymentSnapshotValidatorTest {
.isInstanceOf(BizException.class).hasMessageContaining("账期应付不得");
}
@Test
void payableWithoutSettlementModeReturnsBusinessValidationInsteadOfNullPointer() {
assertThatThrownBy(() -> validator.validate(9L, "PAYABLE", null,
null, null, null, null))
.isInstanceOf(BizException.class)
.hasMessageContaining("应付费用必须选择ON_ACCOUNT或DIRECT_PAID");
}
@Test
void directPaidRequiresTimeMethodAndReferenceOrVoucher() {
LocalDateTime paidAt = LocalDateTime.of(2026, 8, 20, 10, 0);