Files
minecraft-account-manager/apps/web/src/lib/group-management.test.ts
T
dmg d4afb71798
CI / validate (push) Successful in 4m16s
Release / release (push) Failing after 9m14s
feat(admin): streamline group management
2026-08-02 11:06:55 -04:00

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();
});
});