From d8e4eeef5d4c8a6df30f39a7e32d548bcfb77fa5 Mon Sep 17 00:00:00 2001 From: Chirag Singhal <76880977+chirag127@users.noreply.github.com> Date: Sat, 4 Jul 2026 08:56:15 +0530 Subject: [PATCH] fix(onboarding): route provider-details link by node id, not provider slug (#6145) (#6145) Route onboarding provider-details link by node id (#6145). Integrated into release/v3.8.44. --- .../onboarding/ProviderOnboardingWizard.tsx | 4 +- ...nboarding-wizard-details-link-6145.test.ts | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 tests/unit/onboarding-wizard-details-link-6145.test.ts diff --git a/src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx b/src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx index af3196ebd0..65510ef0ce 100644 --- a/src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx +++ b/src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx @@ -260,9 +260,9 @@ function ResultSummary({ )}
- {connection?.provider && ( + {connection?.id && ( {providerText(t, "onboardingOpenProviderDetails", "Open provider details")} diff --git a/tests/unit/onboarding-wizard-details-link-6145.test.ts b/tests/unit/onboarding-wizard-details-link-6145.test.ts new file mode 100644 index 0000000000..78ff6c67a7 --- /dev/null +++ b/tests/unit/onboarding-wizard-details-link-6145.test.ts @@ -0,0 +1,37 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; + +// Regression guard for #6145: the onboarding success-screen "Open provider +// details" link must route by `connection.id` (the node id the +// `/dashboard/providers/[id]` route expects), NOT `connection.provider` (the +// provider slug/type). The old code produced `/dashboard/providers/` +// which 404s for openai-compatible / anthropic-compatible providers. + +const here = dirname(fileURLToPath(import.meta.url)); +const repoRoot = join(here, "..", ".."); +const wizard = readFileSync( + join( + repoRoot, + "src/app/(dashboard)/dashboard/providers/components/onboarding/ProviderOnboardingWizard.tsx" + ), + "utf8" +); + +test("#6145: provider-details link routes by connection.id (matches the [id] route)", () => { + assert.match( + wizard, + /href=\{`\/dashboard\/providers\/\$\{connection\.id\}`\}/, + "the details link must build the URL from connection.id" + ); +}); + +test("#6145: provider-details link must NOT use connection.provider (404s for compat providers)", () => { + assert.doesNotMatch( + wizard, + /href=\{`\/dashboard\/providers\/\$\{connection\.provider\}`\}/, + "connection.provider is the slug/type, not the node id — it 404s" + ); +});