1import { afterEach, describe, expect, it, vi } from "vite-plus/test";
2
3import {
4 CloudPublicConfigMissingError,
5 hasCloudPublicConfig,
6 resolveRelayClerkTokenOptions,
7} from "./publicConfig.ts";
8
9afterEach(() => {
10 vi.unstubAllEnvs();
11});
12
13describe("hasCloudPublicConfig", () => {
14 it("requires both public cloud values", () => {
15 vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", "");
16 vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "");
17 vi.stubEnv("VITE_T3CODE_RELAY_URL", "");
18 expect(hasCloudPublicConfig()).toBe(false);
19
20 vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", "pk_test_example");
21 expect(hasCloudPublicConfig()).toBe(false);
22
23 vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "t3-relay");
24 expect(hasCloudPublicConfig()).toBe(false);
25
26 vi.stubEnv("VITE_T3CODE_RELAY_URL", "https://relay.example.test");
27 expect(hasCloudPublicConfig()).toBe(true);
28 });
29
30 it("rejects an insecure relay URL", () => {
31 vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", "pk_test_example");
32 vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "t3-relay");
33 vi.stubEnv("VITE_T3CODE_RELAY_URL", "http://relay.example.test");
34
35 expect(hasCloudPublicConfig()).toBe(false);
36 });
37
38 it("reports the missing Clerk JWT template as structured configuration", () => {
39 vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "");
40
41 expect(() => resolveRelayClerkTokenOptions()).toThrowError(
42 new CloudPublicConfigMissingError({ key: "T3CODE_CLERK_JWT_TEMPLATE" }),
43 );
44 });
45});