import { describe, expect, it } from "vitest"; import { adminGroupReturnPath, editableGroupName, effectiveGroupMemberCount, isEffectiveGroupMember, groupSlug, validateGroupDetails } from "./group-management"; describe("group management", () => { it("generates a collision-safe internal slug from the display name", () => { expect(groupSlug(" Trusted Öps Team! ", new Set(["trusted-ops-team", "trusted-ops-team-2"]))) .toBe("trusted-ops-team-3"); expect(groupSlug("🔥", new Set())).toBe("group"); }); it("allows only local Users and group-detail return paths", () => { expect(adminGroupReturnPath("/admin/users?q=alex", "saved=group")).toBe("/admin/users?q=alex&saved=group"); expect(adminGroupReturnPath("/admin/groups/11111111-1111-4111-8111-111111111111", "saved=group")) .toBe("/admin/groups/11111111-1111-4111-8111-111111111111?saved=group"); expect(adminGroupReturnPath("https://evil.example/admin/users", "saved=group")).toBe("/admin/users?saved=group"); expect(adminGroupReturnPath("/admin/settings", "error=invalid-group-assignment")).toBe("/admin/users?error=invalid-group-assignment"); }); it("counts and filters explicit and default effective memberships", () => { const assignments = { one: "ops", two: "builders" }; expect(effectiveGroupMemberCount(4, Object.values(assignments), { id: "everyone", isDefault: true })).toBe(2); expect(effectiveGroupMemberCount(4, Object.values(assignments), { id: "ops", isDefault: false })).toBe(1); expect(isEffectiveGroupMember("three", assignments, { id: "everyone", isDefault: true })).toBe(true); expect(isEffectiveGroupMember("one", assignments, { id: "ops", isDefault: false })).toBe(true); expect(isEffectiveGroupMember("two", assignments, { id: "ops", isDefault: false })).toBe(false); }); it("keeps the protected default group name fixed", () => { expect(editableGroupName("everyone", true, "Renamed")).toBe("everyone"); expect(editableGroupName("Ops", false, "Trusted hosts")).toBe("Trusted hosts"); }); it("validates and normalizes editable group details", () => { expect(validateGroupDetails(" Trusted hosts ", " Can use managed VPNs. ")).toEqual({ name: "Trusted hosts", description: "Can use managed VPNs.", }); expect(validateGroupDetails("", "description")).toBeNull(); expect(validateGroupDetails("bad\nname", "description")).toBeNull(); expect(validateGroupDetails("Valid", "x".repeat(501))).toBeNull(); }); });