diff --git a/gui/src/pages/config/sections/ModelsSection.test.tsx b/gui/src/pages/config/sections/ModelsSection.test.tsx
new file mode 100644
index 00000000000..bcac6f2c474
--- /dev/null
+++ b/gui/src/pages/config/sections/ModelsSection.test.tsx
@@ -0,0 +1,73 @@
+import { act, fireEvent, render, screen } from "@testing-library/react";
+import { Provider } from "react-redux";
+import { beforeEach, describe, expect, it, vi } from "vitest";
+import { AuthProvider } from "../../../context/Auth";
+import { IdeMessengerContext } from "../../../context/IdeMessenger";
+import { MockIdeMessenger } from "../../../context/MockIdeMessenger";
+import { createMockStore } from "../../../util/test/mockStore";
+import { ModelsSection } from "./ModelsSection";
+
+describe("ModelsSection", () => {
+ const renderComponent = async (mockMessenger?: MockIdeMessenger) => {
+ const { mockIdeMessenger, ...store } = createMockStore({}, mockMessenger);
+
+ const result = await act(async () =>
+ render(
+
+
+
+
+
+
+ ,
+ ),
+ );
+
+ return { ...result, mockIdeMessenger };
+ };
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("renders current docs links for chat, autocomplete, and edit", async () => {
+ await renderComponent();
+
+ const learnMoreLinks = screen.getAllByRole("link", { name: "Learn more" });
+ const hrefs = learnMoreLinks.map((link) => link.getAttribute("href"));
+
+ expect(hrefs).toEqual([
+ "https://docs.continue.dev/ide-extensions/chat/quick-start",
+ "https://docs.continue.dev/ide-extensions/autocomplete/quick-start",
+ "https://docs.continue.dev/ide-extensions/edit/quick-start",
+ ]);
+ });
+
+ it("opens current setup docs URLs when setup buttons are clicked", async () => {
+ const { mockIdeMessenger } = await renderComponent(new MockIdeMessenger());
+ const postSpy = vi.spyOn(mockIdeMessenger, "post");
+
+ fireEvent.click(screen.getByRole("button", { name: "Setup Chat model" }));
+ fireEvent.click(
+ screen.getByRole("button", { name: "Setup Autocomplete model" }),
+ );
+ fireEvent.click(screen.getByRole("button", { name: "Setup Edit model" }));
+
+ expect(postSpy).toHaveBeenCalledTimes(3);
+ expect(postSpy).toHaveBeenNthCalledWith(
+ 1,
+ "openUrl",
+ "https://docs.continue.dev/ide-extensions/chat/model-setup",
+ );
+ expect(postSpy).toHaveBeenNthCalledWith(
+ 2,
+ "openUrl",
+ "https://docs.continue.dev/ide-extensions/autocomplete/model-setup",
+ );
+ expect(postSpy).toHaveBeenNthCalledWith(
+ 3,
+ "openUrl",
+ "https://docs.continue.dev/ide-extensions/edit/model-setup",
+ );
+ });
+});
diff --git a/gui/src/pages/config/sections/ModelsSection.tsx b/gui/src/pages/config/sections/ModelsSection.tsx
index 316f463a88a..1c29c555be9 100644
--- a/gui/src/pages/config/sections/ModelsSection.tsx
+++ b/gui/src/pages/config/sections/ModelsSection.tsx
@@ -83,7 +83,7 @@ export function ModelsSection() {
Used in Chat, Plan, Agent mode (
handleRoleUpdate("chat", model)}
onConfigure={handleConfigureModel}
- setupURL="https://docs.continue.dev/chat/model-setup"
+ setupURL="https://docs.continue.dev/ide-extensions/chat/model-setup"
/>
@@ -109,7 +109,7 @@ export function ModelsSection() {
Used in inline code completions as you type (
handleRoleUpdate("autocomplete", model)}
onConfigure={handleConfigureModel}
- setupURL="https://docs.continue.dev/autocomplete/model-setup"
+ setupURL="https://docs.continue.dev/ide-extensions/autocomplete/model-setup"
/>
{/* Jetbrains has a model selector inline */}
@@ -142,7 +142,7 @@ export function ModelsSection() {
Used to transform a selected section of code (
handleRoleUpdate("edit", model)}
onConfigure={handleConfigureModel}
- setupURL="https://docs.continue.dev/edit/model-setup"
+ setupURL="https://docs.continue.dev/ide-extensions/edit/model-setup"
/>
>
)}