authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-05 22:11:50-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-05 22:11:50-07:00
log76f686d03456539f41ef295f0071fecb5df08921
treebfc632f7440e9b73393d3bf22c401ec48d8960fc
parentda2ba5b81f8be6afc6d54e728bf4ac8781f3ab1c
signature Signed by PGP key B5690EEEBB952194

test(desktop): cover Clerk setup through the service (#10284)


2 files changed, 2 insertions(+), 36 deletions(-)

apps/desktop/src/app/DesktopClerk.test.ts-34
...@@ -63,17 +63,6 @@ describe("DesktopClerk", () => {...@@ -63,17 +63,6 @@ describe("DesktopClerk", () => {
63 storageMock.mockReset();63 storageMock.mockReset();
64 });64 });
6565
66 it("derives the Clerk Frontend API hostname used by the desktop CSP", () => {
67 const publishableKey = `pk_test_${btoa("clerk.t3.codes$")}`;
68
69 assert.equal(
70 DesktopClerk.resolveDesktopClerkFrontendApiHostname(publishableKey),
71 "clerk.t3.codes",
72 );
73 assert.equal(DesktopClerk.resolveDesktopClerkFrontendApiHostname(""), undefined);
74 assert.equal(DesktopClerk.resolveDesktopClerkFrontendApiHostname("invalid"), undefined);
75 });
76
77 it.effect("acquires and releases the SDK bridge with the layer", () => {66 it.effect("acquires and releases the SDK bridge with the layer", () => {
78 const cleanup = vi.fn();67 const cleanup = vi.fn();
79 const events: string[] = [];68 const events: string[] = [];
...@@ -208,27 +197,4 @@ describe("DesktopClerk", () => {...@@ -208,27 +197,4 @@ describe("DesktopClerk", () => {
208 Effect.provideService(ElectronWindow.ElectronWindow, electronWindow),197 Effect.provideService(ElectronWindow.ElectronWindow, electronWindow),
209 );198 );
210 });199 });
211
212 it.each([
213 { isDevelopment: true, scheme: "t3code-dev" },
214 { isDevelopment: false, scheme: "t3code" },
215 ])("configures the SDK with the $scheme renderer origin", ({ isDevelopment, scheme }) => {
216 const bridge = { cleanup: vi.fn(), isPrimaryInstance: true };
217 storageMock.mockReturnValue(storageAdapter);
218 createClerkBridgeMock.mockReturnValue(bridge);
219
220 assert.equal(DesktopClerk.createDesktopClerkBridge("/tmp/t3-state", isDevelopment), bridge);
221 assert.deepEqual(storageMock.mock.calls, [[{ path: "/tmp/t3-state" }]]);
222 assert.deepEqual(createClerkBridgeMock.mock.calls, [
223 [
224 {
225 storage: storageAdapter,
226 passkeys: true,
227 renderer: { scheme, host: "app" },
228 },
229 ],
230 ]);
231 storageMock.mockClear();
232 createClerkBridgeMock.mockClear();
233 });
234});200});
apps/desktop/src/app/DesktopClerk.ts+2-2
...@@ -53,7 +53,7 @@ export class DesktopClerk extends Context.Service<...@@ -53,7 +53,7 @@ export class DesktopClerk extends Context.Service<
53 }53 }
54>()("@t3tools/desktop/app/DesktopClerk") {}54>()("@t3tools/desktop/app/DesktopClerk") {}
5555
56export function resolveDesktopClerkFrontendApiHostname(56function resolveDesktopClerkFrontendApiHostname(
57 publishableKey: string | undefined,57 publishableKey: string | undefined,
58): string | undefined {58): string | undefined {
59 const normalizedKey = publishableKey?.trim();59 const normalizedKey = publishableKey?.trim();
...@@ -72,7 +72,7 @@ export const desktopClerkFrontendApiHostname = resolveDesktopClerkFrontendApiHos...@@ -72,7 +72,7 @@ export const desktopClerkFrontendApiHostname = resolveDesktopClerkFrontendApiHos
72 : __T3CODE_BUILD_CLERK_PUBLISHABLE_KEY__,72 : __T3CODE_BUILD_CLERK_PUBLISHABLE_KEY__,
73);73);
7474
75export function createDesktopClerkBridge(stateDir: string, isDevelopment: boolean) {75function createDesktopClerkBridge(stateDir: string, isDevelopment: boolean) {
76 return createClerkBridge({76 return createClerkBridge({
77 storage: storage({ path: stateDir }),77 storage: storage({ path: stateDir }),
78 passkeys: true,78 passkeys: true,