mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 13:01:00 +00:00
docker-compose.yml forwards its whitelist as "${NAME:-}", so a variable
the operator never set reaches the process as the empty string. Reads
written as a nullish fallback kept that string: the weather client built
an empty base URL and every geocode failed with ERR_INVALID_URL, and the
IP geo lookup requested a relative path.
Reads with a fallback now go through src/lib/env.ts (envValue, envOr,
envFlag), which treats empty and whitespace as unset. IP_GEO_LOOKUP_DISABLED
accepts 1, true, yes and on instead of only "1". A structural test refuses
a ?? fallback written directly against process.env anywhere in src/, and
the compose whitelist guard counts the helper's call shape as a read.
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { envFlag, envOr, envValue } from "../env";
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllEnvs();
|
|
});
|
|
|
|
describe("env helper: compose passes an unset variable as the empty string", () => {
|
|
it("treats empty and whitespace as unset", () => {
|
|
vi.stubEnv("HL_TEST_VAR", "");
|
|
expect(envValue("HL_TEST_VAR")).toBeUndefined();
|
|
expect(envOr("HL_TEST_VAR", "fallback")).toBe("fallback");
|
|
vi.stubEnv("HL_TEST_VAR", " ");
|
|
expect(envOr("HL_TEST_VAR", "fallback")).toBe("fallback");
|
|
});
|
|
|
|
it("returns a set value trimmed", () => {
|
|
vi.stubEnv("HL_TEST_VAR", " https://example.test ");
|
|
expect(envValue("HL_TEST_VAR")).toBe("https://example.test");
|
|
expect(envOr("HL_TEST_VAR", "fallback")).toBe("https://example.test");
|
|
});
|
|
|
|
it("falls back when the variable is absent", () => {
|
|
delete process.env.HL_TEST_ABSENT;
|
|
expect(envOr("HL_TEST_ABSENT", "fallback")).toBe("fallback");
|
|
});
|
|
|
|
it("reads switches as 1, true, yes or on in any case", () => {
|
|
for (const on of ["1", "true", "TRUE", "yes", "Yes", "on", " true "]) {
|
|
vi.stubEnv("HL_TEST_FLAG", on);
|
|
expect(envFlag("HL_TEST_FLAG"), on).toBe(true);
|
|
}
|
|
for (const off of ["", "0", "false", "no", "off", "2", "enabled"]) {
|
|
vi.stubEnv("HL_TEST_FLAG", off);
|
|
expect(envFlag("HL_TEST_FLAG"), off).toBe(false);
|
|
}
|
|
});
|
|
});
|