From ece6757979eabff0d4d0e3c86d14624d2a2932ca Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Thu, 13 Aug 2026 20:50:55 +0200 Subject: [PATCH] test(onboarding): cover integration checks --- packages/api/src/router/test/onboard.spec.ts | 32 +++++++++++++++ packages/onboarding/src/setup-studio.tsx | 42 ++++++++++---------- 2 files changed, 54 insertions(+), 20 deletions(-) diff --git a/packages/api/src/router/test/onboard.spec.ts b/packages/api/src/router/test/onboard.spec.ts index aab8a42b5..6f85e6fe4 100644 --- a/packages/api/src/router/test/onboard.spec.ts +++ b/packages/api/src/router/test/onboard.spec.ts @@ -152,6 +152,38 @@ const seedBoardAsync = async ( return { layoutId, sectionId }; }; +describe("onboard.testIntegration", () => { + it("tests an onboarding draft without persisting it", async () => { + const db = createDb(); + const claimToken = await seedOnboardingAsync(db); + const testConnection = vi.spyOn(integrationConnection, "testConnectionAsync").mockResolvedValue({ success: true }); + + try { + await expect( + createCaller(db, claimToken).testIntegration({ + sourceId: "manual:sonarr", + name: "Sonarr", + url: "http://sonarr:8989", + kind: "sonarr", + secrets: [{ kind: "apiKey", value: "secret" }], + }), + ).resolves.toEqual({ success: true }); + expect(testConnection).toHaveBeenCalledWith( + expect.objectContaining({ + id: stableIntegrationIdForSource("manual:sonarr"), + name: "Sonarr", + url: "http://sonarr:8989", + kind: "sonarr", + }), + ); + expect(await db.query.integrations.findMany()).toHaveLength(0); + expect(await db.query.integrationSecrets.findMany()).toHaveLength(0); + } finally { + testConnection.mockRestore(); + } + }); +}); + describe("onboard.completeSetup", () => { beforeEach(() => { listDiscoveredContainersAsync.mockReset(); diff --git a/packages/onboarding/src/setup-studio.tsx b/packages/onboarding/src/setup-studio.tsx index 81df8f134..472125f8c 100644 --- a/packages/onboarding/src/setup-studio.tsx +++ b/packages/onboarding/src/setup-studio.tsx @@ -1312,16 +1312,35 @@ const IntegrationEditor = ({ {t("noCredentialsDescription")} ) : null} - + {apiKeyUrl ? ( + + + + {t("getApiKey")} + + + + ) : null} + + {documentationUrl ? ( + + + + {t("openGuide")} + + + ) : ( + + )} - {apiKeyUrl ? ( - - - - {t("getApiKey")} - - - - ) : null} - {documentationUrl ? ( - - - - {t("openGuide")} - - - ) : null}