import { describe, expect, it } from "vitest"; import { AdminSsoConfigError, isAdminSsoConfigured, readAdminSsoEnv } from "./client.server"; describe("readAdminSsoEnv", () => { const baseEnv = { AUTHENTIK_ISSUER_URL: "https://auth.example.test/application/o/toolctrl-admin-panel/", AUTHENTIK_ADMIN_CLIENT_ID: "toolctrl-admin-panel", AUTHENTIK_ADMIN_CLIENT_SECRET: "shh", AUTHENTIK_ADMIN_REDIRECT_URI: "https://admin.example.test/auth/admin/callback", }; it("returns trimmed values when all required keys are present", () => { const env = readAdminSsoEnv({ ...baseEnv, AUTHENTIK_ADMIN_POST_LOGOUT_REDIRECT_URI: "https://admin.example.test/admin/login?logged_out=1" }); expect(env.issuerUrl).toBe(baseEnv.AUTHENTIK_ISSUER_URL); expect(env.clientId).toBe("toolctrl-admin-panel"); expect(env.postLogoutRedirectUri).toBe("https://admin.example.test/admin/login?logged_out=1"); }); it("throws when a required key is missing", () => { expect(() => readAdminSsoEnv({ ...baseEnv, AUTHENTIK_ADMIN_CLIENT_SECRET: "" })).toThrowError(AdminSsoConfigError); }); it("lists every missing key in the error message", () => { try { readAdminSsoEnv({}); expect.fail("expected throw"); } catch (err) { expect(err).toBeInstanceOf(AdminSsoConfigError); const message = (err as Error).message; expect(message).toContain("AUTHENTIK_ISSUER_URL"); expect(message).toContain("AUTHENTIK_ADMIN_CLIENT_ID"); expect(message).toContain("AUTHENTIK_ADMIN_CLIENT_SECRET"); expect(message).toContain("AUTHENTIK_ADMIN_REDIRECT_URI"); } }); }); describe("isAdminSsoConfigured", () => { it("returns true when env is complete", () => { expect( isAdminSsoConfigured({ AUTHENTIK_ISSUER_URL: "https://auth.example.test/", AUTHENTIK_ADMIN_CLIENT_ID: "id", AUTHENTIK_ADMIN_CLIENT_SECRET: "secret", AUTHENTIK_ADMIN_REDIRECT_URI: "https://admin.example.test/auth/admin/callback", }) ).toBe(true); }); it("returns false when env is incomplete", () => { expect(isAdminSsoConfigured({})).toBe(false); }); });