106 lines
3.2 KiB
TypeScript
106 lines
3.2 KiB
TypeScript
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
|
|
import type { SupportedAuthProvider } from "@homarr/definitions";
|
|
|
|
import * as env from "../../env";
|
|
import {
|
|
canManageGroupMembersLocally,
|
|
getGroupMemberManagementType,
|
|
getLocallyManageableProviders,
|
|
isGroupMembershipManagedLocally,
|
|
} from "../check-provider";
|
|
|
|
const mockEnv = (providers: SupportedAuthProvider[], oidcLocalManagement = false) => {
|
|
vi.spyOn(env, "env", "get").mockReturnValue({
|
|
AUTH_PROVIDERS: providers,
|
|
AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT: oidcLocalManagement,
|
|
} as never);
|
|
};
|
|
|
|
beforeEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
describe("isGroupMembershipManagedLocally", () => {
|
|
test("credentials is always managed locally", () => {
|
|
mockEnv(["credentials"]);
|
|
expect(isGroupMembershipManagedLocally("credentials")).toBe(true);
|
|
});
|
|
|
|
test("oidc follows AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT", () => {
|
|
mockEnv(["oidc"], true);
|
|
expect(isGroupMembershipManagedLocally("oidc")).toBe(true);
|
|
|
|
mockEnv(["oidc"], false);
|
|
expect(isGroupMembershipManagedLocally("oidc")).toBe(false);
|
|
});
|
|
|
|
test("ldap is never managed locally", () => {
|
|
mockEnv(["ldap"]);
|
|
expect(isGroupMembershipManagedLocally("ldap")).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("getGroupMemberManagementType", () => {
|
|
test("credentials only is local", () => {
|
|
mockEnv(["credentials"]);
|
|
expect(getGroupMemberManagementType()).toBe("local");
|
|
});
|
|
|
|
test("credentials + oidc with local management is local", () => {
|
|
mockEnv(["credentials", "oidc"], true);
|
|
expect(getGroupMemberManagementType()).toBe("local");
|
|
});
|
|
|
|
test("credentials + oidc without local management is mixed", () => {
|
|
mockEnv(["credentials", "oidc"], false);
|
|
expect(getGroupMemberManagementType()).toBe("mixed");
|
|
});
|
|
|
|
test("credentials + ldap is mixed", () => {
|
|
mockEnv(["credentials", "ldap"]);
|
|
expect(getGroupMemberManagementType()).toBe("mixed");
|
|
});
|
|
|
|
test("ldap only is external", () => {
|
|
mockEnv(["ldap"]);
|
|
expect(getGroupMemberManagementType()).toBe("external");
|
|
});
|
|
|
|
test("oidc only without local management is external", () => {
|
|
mockEnv(["oidc"], false);
|
|
expect(getGroupMemberManagementType()).toBe("external");
|
|
});
|
|
});
|
|
|
|
describe("getLocallyManageableProviders", () => {
|
|
test("returns only the enabled, locally managed providers", () => {
|
|
mockEnv(["credentials", "oidc", "ldap"], true);
|
|
expect(getLocallyManageableProviders()).toEqual(["credentials", "oidc"]);
|
|
|
|
mockEnv(["credentials", "oidc", "ldap"], false);
|
|
expect(getLocallyManageableProviders()).toEqual(["credentials"]);
|
|
|
|
mockEnv(["ldap"]);
|
|
expect(getLocallyManageableProviders()).toEqual([]);
|
|
});
|
|
});
|
|
|
|
describe("canManageGroupMembersLocally", () => {
|
|
test("is true when at least one enabled provider is managed locally", () => {
|
|
mockEnv(["credentials", "ldap"]);
|
|
expect(canManageGroupMembersLocally()).toBe(true);
|
|
|
|
mockEnv(["oidc"], true);
|
|
expect(canManageGroupMembersLocally()).toBe(true);
|
|
});
|
|
|
|
test("is false when every enabled provider is external", () => {
|
|
mockEnv(["ldap"]);
|
|
expect(canManageGroupMembersLocally()).toBe(false);
|
|
|
|
mockEnv(["oidc"], false);
|
|
expect(canManageGroupMembersLocally()).toBe(false);
|
|
});
|
|
});
|