This commit is contained in:
2026-08-13 11:57:33 +08:00
parent 5a48992d78
commit 16dc03a2e2
102 changed files with 3656 additions and 120 deletions
@@ -0,0 +1,69 @@
package com.baiyue.iam.repository;
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 AdminPrototypeMenuPermissionSqlContractTest {
private static final String[] FINANCE_MENUS = {
"platform:finance:customer-account:list", "platform:finance:customer-arap:list",
"platform:finance:customer-statement:list", "platform:finance:settlement-ar:list",
"platform:finance:settlement-ap:list"
};
@Test
void declaresFinancePageMenusAndReparentsActions() throws Exception {
String sql = new ClassPathResource("db/admin-prototype-menu-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
for (int index = 0; index < FINANCE_MENUS.length; index++) {
assertThat(sql).contains("(" + (5105040 + index) + ",0,'PLATFORM','MENU',5105000,'" + FINANCE_MENUS[index] + "'");
}
assertThat(sql)
.contains("'platform:finance:account:view' code, 5105040 parent_id")
.contains("'platform:finance:fee-source:view', 5105041")
.contains("'platform:finance:reconciliation:create', 5105042")
.contains("'platform:finance:settlement-ar:create', 5105043")
.contains("'platform:finance:settlement-ap:create', 5105044")
.contains("'platform:finance:payment:create', 5105044)")
.contains("role_code='PLATFORM_ADMIN'");
}
@Test
void retiresUnsupportedOverseasFeeCreateAndDelete() throws Exception {
String sql = new ClassPathResource("db/admin-prototype-menu-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql).contains("status='INACTIVE', deleted=1")
.contains("'platform:overseas-storage-fee:create','platform:overseas-storage-fee:delete'");
String unified = Files.readString(resolveUnifiedSql(), StandardCharsets.UTF_8);
assertThat(unified).contains("<> 2")
.contains("platform:overseas-storage-fee:list', 'platform:overseas-storage-fee:create'");
}
@Test
void keepsDomesticContainerAndSupplierPermissionIdsDisjoint() throws Exception {
String sql = new ClassPathResource("db/admin-prototype-menu-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql)
.contains("(5103070,0,'PLATFORM','API',5103010,'platform:domestic-container:list'")
.contains("(5103071,0,'PLATFORM','BUTTON',5103070,'platform:domestic-container:inbound:create'")
.contains("(5103072,0,'PLATFORM','BUTTON',5103070,'platform:domestic-container:outbound:create'")
.contains("(5103080,0,'PLATFORM','MENU',5103000,'platform:supplier:list'")
.contains("(5103081,0,'PLATFORM','BUTTON',5103080,'platform:supplier:create'")
.contains("(5103082,0,'PLATFORM','BUTTON',5103080,'platform:supplier:edit'")
.contains("(5103083,0,'PLATFORM','BUTTON',5103080,'platform:supplier:status'")
.doesNotContain("platform:supplier:view");
}
private static Path resolveUnifiedSql() {
Path direct = Path.of("deploy", "sql", "头程数据库统一增量-MySQL8.sql");
return Files.exists(direct) ? direct : Path.of("..", "deploy", "sql", "头程数据库统一增量-MySQL8.sql");
}
}
@@ -0,0 +1,36 @@
package com.baiyue.iam.repository;
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 DomesticContainerPermissionSqlContractTest {
@Test
void registersAndGrantsDedicatedPermissionsIdempotently() throws Exception {
String sql = new ClassPathResource("db/domestic-container-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql).contains("5103070", "5103071", "5103072",
"platform:domestic-container:list", "platform:domestic-container:inbound:create",
"platform:domestic-container:outbound:create", "ON DUPLICATE KEY UPDATE",
"INSERT IGNORE INTO iam_role_permission", "role_code='PLATFORM_ADMIN'", "<> 3");
assertThat(sql).contains("permission id/code conflict", "permission catalog is incomplete",
"PLATFORM_ADMIN domestic container grant is incomplete");
}
@Test
void reservesFinalIdsAndRejectsSupplierReuse() throws Exception {
String sql = new ClassPathResource("db/domestic-container-permissions.sql")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql).contains("(5103070,0,'PLATFORM','API'", "(5103071,0,'PLATFORM','BUTTON',5103070",
"(5103072,0,'PLATFORM','BUTTON',5103070");
Path supplier = Path.of("src/main/resources/db/platform-supplier-permissions.sql");
if (!Files.exists(supplier)) supplier = Path.of("iam/src/main/resources/db/platform-supplier-permissions.sql");
if (Files.exists(supplier)) {
String supplierSql = Files.readString(supplier, StandardCharsets.UTF_8);
assertThat(supplierSql).doesNotContain("5103070", "5103071", "5103072");
}
}
}
@@ -0,0 +1,18 @@
package com.baiyue.iam.repository;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import java.nio.charset.StandardCharsets;
import static org.assertj.core.api.Assertions.assertThat;
class PlatformSupplierPermissionSqlContractTest {
@Test void registersFourSupplierPermissionsAndGrantsPlatformAdmin() throws Exception {
String sql = new ClassPathResource("db/platform-supplier-permissions.sql").getContentAsString(StandardCharsets.UTF_8);
assertThat(sql).contains("5103080", "5103081", "5103082", "5103083",
"platform:supplier:list", "platform:supplier:create",
"platform:supplier:edit", "platform:supplier:status", "role_code='PLATFORM_ADMIN'",
"ON DUPLICATE KEY UPDATE", "INSERT IGNORE INTO iam_role_permission",
"guard_platform_supplier_permission_ids", "SIGNAL SQLSTATE '45000'",
"assert_platform_supplier_permissions");
}
}