43 lines
2.5 KiB
TypeScript
43 lines
2.5 KiB
TypeScript
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();
|
|
});
|
|
});
|