This commit is contained in:
2026-09-17 18:25:05 +08:00
parent 3b8b6f5aa2
commit 27d281d4b3
30 changed files with 370 additions and 229 deletions
@@ -46,9 +46,9 @@ class IamOpenApiContractTest {
.contains("不以 `container:list/edit` 兼容放行国外操作")
.contains("merchant:warehouse:delivery:list")
.contains("merchant:warehouse:delivery:create")
.contains("merchant:cross-border:procurement")
.contains("merchant:cross-border:domestic-trucking")
.contains("merchant:cross-border:pallet-shipping")
.contains("merchant:cross-border:procurement:list")
.contains("merchant:cross-border:domestic-trucking:list")
.contains("merchant:cross-border:pallet-shipping:list")
.contains("merchant:warehouse:inbound:list")
.contains("lastleg:pda:operate")
.contains("OVERSEAS_WAREHOUSE_PDA_OPERATOR")
@@ -20,7 +20,7 @@ class MerchantReturnInventoryPermissionSqlContractTest {
assertThat(sql).contains(
"(5306140,0,'MERCHANT','MENU',0,'" + PERMISSION + "','退货库存'",
"role.role_code='MERCHANT_OWNER'",
"'" + PERMISSION + "')) <> 5",
"'" + PERMISSION + "')) <> 24",
"客户默认管理员授权不完整");
int grantStart = sql.indexOf("-- 客户默认管理员获得当前客户海外业务入口");
@@ -15,30 +15,48 @@ import static org.assertj.core.api.Assertions.assertThat;
class OverseasCustomerPermissionSqlContractTest {
private static final Pattern MERCHANT_CODE = Pattern.compile("merchant:[a-z0-9:-]+");
private static final Set<String> CUSTOMER_OVERSEAS_PERMISSIONS = Set.of(
"merchant:cross-border:procurement",
"merchant:cross-border:domestic-trucking",
"merchant:cross-border:pallet-shipping",
"merchant:cross-border:procurement:list",
"merchant:cross-border:procurement:create",
"merchant:cross-border:domestic-trucking:list",
"merchant:cross-border:domestic-trucking:create",
"merchant:cross-border:domestic-trucking:edit",
"merchant:cross-border:pallet-shipping:list",
"merchant:cross-border:pallet-shipping:create",
"merchant:cross-border:pallet-shipping:edit",
"merchant:warehouse:inbound:list",
"merchant:overseas-warehouse:return-inventory:list");
"merchant:overseas-warehouse:return-inventory:list",
"merchant:overseas-warehouse:last-mile-order:list",
"merchant:overseas-warehouse:relabel:list",
"merchant:overseas-warehouse:relabel:create",
"merchant:overseas-warehouse:relabel:files",
"merchant:overseas-warehouse:relabel:confirm",
"merchant:overseas-warehouse:transfer:list",
"merchant:overseas-warehouse:transfer:create",
"merchant:overseas-warehouse:transfer:confirm",
"merchant:overseas-warehouse:discard:list",
"merchant:overseas-warehouse:discard:create",
"merchant:overseas-warehouse:discard:cancel",
"merchant:overseas-warehouse:return-order:list",
"merchant:overseas-warehouse:return-order:create",
"merchant:overseas-warehouse:return-order:relabel");
@Test
void declaresTheFrozenCustomerOverseasPermissionCatalog() throws Exception {
String sql = sql();
assertThat(merchantCodes(sql)).containsExactlyInAnyOrderElementsOf(CUSTOMER_OVERSEAS_PERMISSIONS);
for (String permission : CUSTOMER_OVERSEAS_PERMISSIONS) {
assertThat(sql).contains("0,'MERCHANT','MENU'", "'" + permission + "'");
}
assertThat(sql).contains(
"'merchant:cross-border:procurement','海外采购','/cross-border/procurement'",
"'merchant:cross-border:domestic-trucking','美国本土卡','/cross-border/domestic-trucking'",
"'merchant:cross-border:pallet-shipping','美本土散板','/cross-border/pallet-shipping'",
"'merchant:cross-border:procurement:list','海外采购','/cross-border/procurement'",
"'merchant:cross-border:domestic-trucking:list','美国本土卡','/cross-border/domestic-trucking'",
"'merchant:cross-border:pallet-shipping:list','美本土散板','/cross-border/pallet-shipping'",
"'merchant:warehouse:inbound:list','海外仓入库订单','/orders/inbound'",
"'merchant:overseas-warehouse:return-inventory:list','退货库存','/overseas-warehouse/return-inventory'");
"'merchant:overseas-warehouse:return-inventory:list','退货库存','/overseas-warehouse/return-inventory'",
"'merchant:overseas-warehouse:relabel:files','维护换标文件'",
"'merchant:overseas-warehouse:discard:cancel','取消货物废弃申请'");
}
@Test
void grantsAllFivePermissionsOnlyToTheDefaultCustomerAdministrator() throws Exception {
void grantsAllPermissionsOnlyToTheDefaultCustomerAdministrator() throws Exception {
String sql = sql();
int comment = sql.indexOf("-- 客户默认管理员获得当前客户海外业务入口");
int grantStart = sql.indexOf("INSERT IGNORE INTO iam_role_permission", comment);
@@ -66,7 +84,7 @@ class OverseasCustomerPermissionSqlContractTest {
"海外客户权限初始化失败:客户默认管理员授权不完整",
"permission.app_code='MERCHANT'",
"role.role_code='MERCHANT_OWNER'",
")) <> 5 THEN");
")) <> 24 THEN");
}
@Test
@@ -95,18 +95,20 @@ class AuthorizationSnapshotServiceTest {
when(mapper.countActiveIdentity(42L, 7L, 9L)).thenReturn(1);
when(mapper.findRoles(42L, 7L, 9L, "MERCHANT")).thenReturn(List.of("MERCHANT_OWNER"));
when(mapper.findPermissions(42L, 7L, 9L, "MERCHANT")).thenReturn(List.of(
"merchant:cross-border:procurement",
"merchant:cross-border:domestic-trucking",
"merchant:cross-border:pallet-shipping",
"merchant:cross-border:procurement:list",
"merchant:cross-border:procurement:create",
"merchant:cross-border:domestic-trucking:list",
"merchant:cross-border:pallet-shipping:list",
"merchant:warehouse:inbound:list"));
var result = service.currentPermissions(new AuthenticatedUser(42L, 7L, 7L, 9L,
"owner", "MERCHANT", "MERCHANT", java.util.Set.of()), "MERCHANT");
assertThat(result).containsExactlyInAnyOrder(
"merchant:cross-border:procurement",
"merchant:cross-border:domestic-trucking",
"merchant:cross-border:pallet-shipping",
"merchant:cross-border:procurement:list",
"merchant:cross-border:procurement:create",
"merchant:cross-border:domestic-trucking:list",
"merchant:cross-border:pallet-shipping:list",
"merchant:warehouse:inbound:list");
}