Skip to content
Source
Sign inSign up

connectCliAuth.test.ts

46 lines1.8 KB

1import { afterEach, describe, expect, it, vi } from "vite-plus/test";
2​
3import { buildConnectCliClerkAuthorizeUrl, connectCliSignInRedirectUrl } from "./connectCliAuth";
4​
5const TEST_PUBLISHABLE_KEY = `pk_test_${btoa("witty-mole-42.clerk.accounts.dev$")}`;
6​
7describe("connectCliAuth", () => {
8 afterEach(() => {
9 vi.unstubAllEnvs();
10 });
11​
12 it("builds a PKCE authorize URL that redirects to the CLI's loopback listener", () => {
13 vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", TEST_PUBLISHABLE_KEY);
14 vi.stubEnv("VITE_CLERK_CLI_OAUTH_CLIENT_ID", "oauthapp_123");
15​
16 const authorizeUrl = buildConnectCliClerkAuthorizeUrl({
17 state: "state-1",
18 challenge: "challenge-1",
19 loopbackPort: 34338,
20 });
21 expect(authorizeUrl).not.toBeNull();
22​
23 const url = new URL(authorizeUrl!);
24 expect(url.hostname).toBe("witty-mole-42.clerk.accounts.dev");
25 expect(url.pathname).toBe("/oauth/authorize");
26 expect(url.searchParams.get("redirect_uri")).toBe("http://127.0.0.1:34338/callback");
27 expect(url.searchParams.get("state")).toBe("state-1");
28 expect(url.searchParams.get("code_challenge")).toBe("challenge-1");
29 expect(url.searchParams.get("code_challenge_method")).toBe("S256");
30 });
31​
32 it("sends the sign-in redirect to the authorize endpoint, not back to /connect", () => {
33 vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", TEST_PUBLISHABLE_KEY);
34 vi.stubEnv("VITE_CLERK_CLI_OAUTH_CLIENT_ID", "oauthapp_123");
35​
36 const connectUrl =
37 "https://app.t3.codes/connect#state=state-1&challenge=challenge-1&port=34338";
38 const redirectUrl = connectCliSignInRedirectUrl(
39 { state: "state-1", challenge: "challenge-1", loopbackPort: 34338 },
40 connectUrl,
41 );
42​
43 expect(redirectUrl).not.toBe(connectUrl);
44 expect(new URL(redirectUrl).pathname).toBe("/oauth/authorize");
45 });
46});