32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import {
|
|
optionalEnvironmentValue,
|
|
readFeatureEnvironment,
|
|
requiredEnvironmentUrl,
|
|
requiredEnvironmentValue,
|
|
} from "@/lib/config/environment";
|
|
|
|
describe("feature environment configuration", () => {
|
|
test("returns trimmed required and optional values", () => {
|
|
const environment = { REQUIRED: " value ", OPTIONAL: " optional " };
|
|
expect(requiredEnvironmentValue("REQUIRED", environment)).toBe("value");
|
|
expect(optionalEnvironmentValue("OPTIONAL", environment)).toBe("optional");
|
|
expect(optionalEnvironmentValue("MISSING", environment)).toBeNull();
|
|
});
|
|
|
|
test("reports the feature and missing variable", () => {
|
|
expect(() =>
|
|
readFeatureEnvironment("Discord", ["TOKEN", "GUILD"] as const, {
|
|
TOKEN: "token",
|
|
}),
|
|
).toThrow("Discord is not configured: Missing required environment variable: GUILD");
|
|
});
|
|
|
|
test("accepts absolute URLs and removes a trailing slash", () => {
|
|
expect(requiredEnvironmentUrl("BASE_URL", { BASE_URL: "https://example.com/" }))
|
|
.toBe("https://example.com");
|
|
expect(() => requiredEnvironmentUrl("BASE_URL", { BASE_URL: "/relative" }))
|
|
.toThrow("must be an absolute URL");
|
|
});
|
|
});
|