Skip to content

Commit 2771e1f

Browse files
committed
add test for env.ts
1 parent 362de10 commit 2771e1f

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

src/lib/env.test.ts

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import { afterEach, describe, expect, it, vi } from "vitest"
2+
3+
const loadEnv = async () => {
4+
const module = await import("./env")
5+
return module.env
6+
}
7+
8+
afterEach(() => {
9+
vi.resetModules()
10+
vi.unstubAllGlobals()
11+
vi.unstubAllEnvs()
12+
})
13+
14+
describe("env runtime resolution", () => {
15+
it("prefers runtime env values when provided", async () => {
16+
vi.stubEnv("VITE_API_BASE_URL", "https://fallback.example.com")
17+
vi.stubEnv("VITE_KEYCLOAK_URL", "https://fallback-keycloak.example.com")
18+
vi.stubEnv("VITE_KEYCLOAK_REALM", "fallback-realm")
19+
vi.stubEnv("VITE_KEYCLOAK_CLIENT_ID", "fallback-client")
20+
21+
vi.stubGlobal("window", {
22+
__ENV__: {
23+
VITE_API_BASE_URL: "https://runtime.example.com",
24+
VITE_API_MOCKING_ENABLED: "true",
25+
VITE_KEYCLOAK_URL: "https://runtime-keycloak.example.com",
26+
VITE_KEYCLOAK_REALM: "runtime-realm",
27+
VITE_KEYCLOAK_CLIENT_ID: "runtime-client",
28+
VITE_BITCR_DEV_INCLUDE_CROWDIN_IN_CONTEXT_TOOLING: "true",
29+
},
30+
})
31+
32+
const env = await loadEnv()
33+
34+
expect(env.apiBaseUrl).toBe("https://runtime.example.com")
35+
expect(env.apiMocksEnabled).toBe(true)
36+
expect(env.keycloakUrl).toBe("https://runtime-keycloak.example.com")
37+
expect(env.keycloakRealm).toBe("runtime-realm")
38+
expect(env.keycloakClientId).toBe("runtime-client")
39+
expect(env.crowdinInContextToolingEnabled).toBe(true)
40+
})
41+
42+
it("falls back to build-time env when runtime values are empty", async () => {
43+
vi.stubEnv("VITE_API_BASE_URL", "https://fallback.example.com")
44+
vi.stubEnv("VITE_API_MOCKING_ENABLED", "true")
45+
vi.stubEnv("VITE_KEYCLOAK_URL", "https://fallback-keycloak.example.com")
46+
vi.stubEnv("VITE_KEYCLOAK_REALM", "fallback-realm")
47+
vi.stubEnv("VITE_KEYCLOAK_CLIENT_ID", "fallback-client")
48+
vi.stubEnv("VITE_BITCR_DEV_INCLUDE_CROWDIN_IN_CONTEXT_TOOLING", "false")
49+
50+
vi.stubGlobal("window", {
51+
__ENV__: {
52+
VITE_API_BASE_URL: "",
53+
VITE_API_MOCKING_ENABLED: "",
54+
VITE_KEYCLOAK_URL: "",
55+
VITE_KEYCLOAK_REALM: "",
56+
VITE_KEYCLOAK_CLIENT_ID: "",
57+
VITE_BITCR_DEV_INCLUDE_CROWDIN_IN_CONTEXT_TOOLING: "",
58+
},
59+
})
60+
61+
const env = await loadEnv()
62+
63+
expect(env.apiBaseUrl).toBe("https://fallback.example.com")
64+
expect(env.apiMocksEnabled).toBe(true)
65+
expect(env.keycloakUrl).toBe("https://fallback-keycloak.example.com")
66+
expect(env.keycloakRealm).toBe("fallback-realm")
67+
expect(env.keycloakClientId).toBe("fallback-client")
68+
expect(env.crowdinInContextToolingEnabled).toBe(false)
69+
})
70+
71+
it("handles SSR where window is undefined", async () => {
72+
vi.stubEnv("VITE_API_BASE_URL", "https://fallback.example.com")
73+
vi.stubEnv("VITE_KEYCLOAK_URL", "https://fallback-keycloak.example.com")
74+
vi.stubEnv("VITE_KEYCLOAK_REALM", "fallback-realm")
75+
vi.stubEnv("VITE_KEYCLOAK_CLIENT_ID", "fallback-client")
76+
77+
vi.stubGlobal("window", undefined)
78+
79+
const env = await loadEnv()
80+
81+
expect(env.apiBaseUrl).toBe("https://fallback.example.com")
82+
expect(env.keycloakUrl).toBe("https://fallback-keycloak.example.com")
83+
expect(env.keycloakRealm).toBe("fallback-realm")
84+
expect(env.keycloakClientId).toBe("fallback-client")
85+
})
86+
})

0 commit comments

Comments
 (0)