package app import "testing" func TestAppAccessCodesMatchExpression(t *testing.T) { accessCodes := []string{ "cpm:iot:tSimCardInfo:edit", "cpm:agent:dept:list", } if !appAccessCodesMatchExpression(accessCodes, "cpm:iot:tSimCardInfo:edit&cpm:agent:dept:list") { t.Fatal("expected AND expression to match when all permissions are granted") } if appAccessCodesMatchExpression(accessCodes, "cpm:iot:tSimCardInfo:edit&cpm:agent:tAgentEnterprise:list") { t.Fatal("expected AND expression to fail when one permission is missing") } } func TestNormalizeFeatureDoesNotGrantLegacyAppPermission(t *testing.T) { if got := appNormalizeFeatureKey("cpm:app:*"); got == "*" { t.Fatal("legacy cpm:app:* must not be normalized to wildcard access") } if got := appNormalizeFeatureKey("app:card:list"); got == "card:list" { t.Fatal("legacy app: feature prefix must not be stripped") } } func TestRestartFeatureUsesDedicatedConsolePermission(t *testing.T) { if appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardInfo:edit"}, appFeaturePermissionCandidates("card:restart")[0], ) { t.Fatal("card edit permission must not grant restart feature") } if !appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardRestart:input:submit"}, appFeaturePermissionCandidates("card:restart")[0], ) { t.Fatal("restart submit permission should grant restart feature") } } func TestRenewAndChangeFeaturesUseSubmitPermissions(t *testing.T) { if appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardRenew:input:prepare"}, appFeaturePermissionCandidates("card:renew")[0], ) { t.Fatal("renew prepare permission must not grant mini app renew entry") } if !appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardRenew:batch:confirm"}, appFeaturePermissionCandidates("card:renew")[0], ) { t.Fatal("renew batch confirm permission should grant renew entry") } if appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardChange:input:prepare", "cpm:iot:tSimCardBindPkg:getChangePkg"}, appFeaturePermissionCandidates("card:change")[0], ) { t.Fatal("change prepare permission must not grant mini app change entry") } if !appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardChange:batch:submit"}, appFeaturePermissionCandidates("card:change")[0], ) { t.Fatal("change batch submit permission should grant change entry") } } func TestAllocateFeatureUsesDedicatedConsolePermissions(t *testing.T) { if appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardInfo:edit", "cpm:agent:dept:list"}, appFeaturePermissionCandidates("card:allocate")[0], ) { t.Fatal("card edit and customer list permissions must not grant mini app allocate entry") } if !appAccessCodesMatchExpression( []string{ "cpm:iot:tSimCardAllocate:targets", "cpm:iot:tSimCardAllocate:input:prepare", "cpm:iot:tSimCardAllocate:batch:submit", }, appFeaturePermissionCandidates("card:allocate")[0], ) { t.Fatal("complete allocate permissions should grant allocate entry") } if appAccessCodesMatchExpression( []string{"cpm:iot:tSimCardAllocate:batch:submit"}, appFeaturePermissionCandidates("card:allocate")[0], ) { t.Fatal("single allocate submit permission must not grant full allocate entry") } } func TestDataServiceFeaturesUseConsolePermissions(t *testing.T) { tests := []struct { feature string permission string }{ {feature: "card:dataStart", permission: "cpm:iot:tSimCardDataStart:input:submit"}, {feature: "card:dataStop", permission: "cpm:iot:tSimCardDataStop:input:submit"}, } for _, tt := range tests { candidates := appFeaturePermissionCandidates(tt.feature) if len(candidates) != 1 || !appAccessCodesMatchExpression([]string{tt.permission}, candidates[0]) { t.Fatalf("%s should use %s", tt.feature, tt.permission) } } } func TestWorkOrderHandlingRequiresDedicatedPermissions(t *testing.T) { for _, action := range []string{"reply", "resolve", "transfer", "close", "cancel", "confirm", "evaluate", "reopen"} { required := appWorkOrderHandlerPermission(action) if appAccessCodesMatchExpression([]string{"cpm:gen:tWoMain:list", "cpm:gen:tWoMain:view"}, required) { t.Fatalf("list/view granted %s", action) } if !appAccessCodesMatchExpression([]string{required}, required) { t.Fatalf("dedicated permission did not grant %s", action) } } }