package domain import "testing" func TestNormalizeRole(t *testing.T) { tests := []struct { name string in string want string }{ {name: "super admin unchanged", in: "super_admin", want: RoleSuperAdmin}, {name: "tenant admin mapped to user", in: "tenant_admin", want: RoleUser}, {name: "rp admin mapped to user", in: "rp_admin", want: RoleUser}, {name: "user unchanged", in: "user", want: RoleUser}, {name: "super admin hyphen alias", in: "super-admin", want: RoleSuperAdmin}, {name: "super admin compact alias", in: "superadmin", want: RoleSuperAdmin}, {name: "legacy admin mapped to user", in: "admin", want: RoleUser}, {name: "legacy tenant member", in: "tenant_member", want: RoleUser}, {name: "trim and lower", in: " ADMIN ", want: RoleUser}, {name: "unknown role mapped to user", in: "custom_role", want: RoleUser}, {name: "empty string mapped to user", in: " ", want: RoleUser}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { if got := NormalizeRole(tc.in); got != tc.want { t.Fatalf("NormalizeRole(%q)=%q, want %q", tc.in, got, tc.want) } }) } } func TestUserStatusPolicy(t *testing.T) { tests := []struct { status string normalized string baronAllowed bool orgVisible bool worksProvisioned bool worksDeprovisioned bool }{ {status: UserStatusActive, normalized: UserStatusActive, baronAllowed: true, orgVisible: true, worksProvisioned: true}, {status: UserStatusTemporaryLeave, normalized: UserStatusTemporaryLeave, baronAllowed: true, orgVisible: true, worksProvisioned: true}, {status: UserStatusSuspended, normalized: UserStatusSuspended, orgVisible: true, worksProvisioned: true}, {status: UserStatusPreboarding, normalized: UserStatusPreboarding}, {status: UserStatusBaronGuest, normalized: UserStatusBaronGuest, baronAllowed: true, worksDeprovisioned: true}, {status: UserStatusExtendedLeave, normalized: UserStatusExtendedLeave, worksDeprovisioned: true}, {status: UserStatusArchived, normalized: UserStatusArchived, worksDeprovisioned: true}, {status: "inactive", normalized: UserStatusPreboarding}, {status: "leave_of_absence", normalized: UserStatusTemporaryLeave, baronAllowed: true, orgVisible: true, worksProvisioned: true}, {status: "BARON_ONLY", normalized: UserStatusBaronGuest, baronAllowed: true, worksDeprovisioned: true}, } for _, tc := range tests { t.Run(tc.status, func(t *testing.T) { if got := NormalizeUserStatus(tc.status); got != tc.normalized { t.Fatalf("NormalizeUserStatus(%q)=%q, want %q", tc.status, got, tc.normalized) } if got := IsBaronActivityAllowedStatus(tc.status); got != tc.baronAllowed { t.Fatalf("IsBaronActivityAllowedStatus(%q)=%v, want %v", tc.status, got, tc.baronAllowed) } if got := IsOrgVisibleUserStatus(tc.status); got != tc.orgVisible { t.Fatalf("IsOrgVisibleUserStatus(%q)=%v, want %v", tc.status, got, tc.orgVisible) } if got := IsWorksProvisionedUserStatus(tc.status); got != tc.worksProvisioned { t.Fatalf("IsWorksProvisionedUserStatus(%q)=%v, want %v", tc.status, got, tc.worksProvisioned) } if got := IsWorksDeprovisionUserStatus(tc.status); got != tc.worksDeprovisioned { t.Fatalf("IsWorksDeprovisionUserStatus(%q)=%v, want %v", tc.status, got, tc.worksDeprovisioned) } }) } }