stack/packages/shared/src/utils/env.test.tsx
2026-06-16 10:55:58 -07:00

44 lines
2.1 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import { getEnvVariable, getProcessEnv, resolveHexclaveStackEnvVarValue } from "./env";
afterEach(() => {
vi.unstubAllEnvs();
});
describe("Hexclave/Stack env var dual-read", () => {
it("falls back to the legacy Stack name when the Hexclave value is empty", () => {
vi.stubEnv("NEXT_PUBLIC_HEXCLAVE_API_URL", "");
vi.stubEnv("NEXT_PUBLIC_STACK_API_URL", "https://stack.example.test");
expect(getEnvVariable("NEXT_PUBLIC_STACK_API_URL")).toBe("https://stack.example.test");
expect(getProcessEnv("NEXT_PUBLIC_STACK_API_URL")).toBe("https://stack.example.test");
});
it("allows both names when they have the same non-empty value", () => {
vi.stubEnv("NEXT_PUBLIC_HEXCLAVE_API_URL", "https://api.example.test");
vi.stubEnv("NEXT_PUBLIC_STACK_API_URL", "https://api.example.test");
expect(getEnvVariable("NEXT_PUBLIC_STACK_API_URL")).toBe("https://api.example.test");
expect(getProcessEnv("NEXT_PUBLIC_STACK_API_URL")).toBe("https://api.example.test");
});
it("throws when both names are non-empty and different", () => {
vi.stubEnv("NEXT_PUBLIC_HEXCLAVE_API_URL", "https://hexclave.example.test");
vi.stubEnv("NEXT_PUBLIC_STACK_API_URL", "https://stack.example.test");
expect(() => getEnvVariable("NEXT_PUBLIC_STACK_API_URL")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);
expect(() => getProcessEnv("NEXT_PUBLIC_STACK_API_URL")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);
});
it("checks renamed legacy aliases when falling back", () => {
vi.stubEnv("NEXT_PUBLIC_HEXCLAVE_URL", "https://hexclave-url.example.test");
vi.stubEnv("NEXT_PUBLIC_STACK_URL", "https://stack-url.example.test");
expect(() => getEnvVariable("NEXT_PUBLIC_STACK_API_URL")).toThrow(/NEXT_PUBLIC_HEXCLAVE_URL.*NEXT_PUBLIC_STACK_URL.*different values/);
});
it("returns undefined when both names are empty", () => {
expect(resolveHexclaveStackEnvVarValue("HEXCLAVE_FOO", "STACK_FOO", "", "")).toBeUndefined();
});
});