diff --git a/frontend/public/locales/en-GB/translation.toml b/frontend/public/locales/en-GB/translation.toml index 38b9369015..e13550e5f1 100644 --- a/frontend/public/locales/en-GB/translation.toml +++ b/frontend/public/locales/en-GB/translation.toml @@ -7899,7 +7899,7 @@ viewerMode = "Switch to the file editor to add multiple files." [toolPanel] allTools = "All tools" alpha = "Alpha" -backToTools = "Back to all tools" +backToTools = "Back to tools" collapse = "Collapse panel" comingSoon = "Coming soon:" expand = "Expand panel" diff --git a/frontend/src/core/components/shared/WorkbenchBar.tsx b/frontend/src/core/components/shared/WorkbenchBar.tsx index e0e036c309..b50e8ae47e 100644 --- a/frontend/src/core/components/shared/WorkbenchBar.tsx +++ b/frontend/src/core/components/shared/WorkbenchBar.tsx @@ -357,7 +357,7 @@ export default function WorkbenchBar({ data-tour="workbench-bar" > {/* Left: View switcher */} -
+
{hasFiles && viewOptions.map((opt) => (
diff --git a/frontend/src/core/tests/helpers/api-stubs.ts b/frontend/src/core/tests/helpers/api-stubs.ts index b18653d88d..a8291a181e 100644 --- a/frontend/src/core/tests/helpers/api-stubs.ts +++ b/frontend/src/core/tests/helpers/api-stubs.ts @@ -230,6 +230,11 @@ export async function mockAppApis( route.fulfill({ json: {} }), ); + // License info — stubbed so admin settings doesn't log proxy errors + await page.route("**/api/v1/admin/license-info", (route: Route) => + route.fulfill({ json: { licenseType: "FREE", valid: true, maxUsers: 5 } }), + ); + // Settings sections touched by the settings page await page.route("**/api/v1/admin/settings", (route: Route) => route.fulfill({ json: {} }), diff --git a/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts b/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts index 50163806b1..126e13060c 100644 --- a/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts +++ b/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts @@ -82,8 +82,7 @@ test.describe("11. Automation Page", () => { test.describe("11.1 Automation - Suggested Workflows", () => { test("should display saved and suggested workflows", async ({ page }) => { // Step 1: Verify the Automation Selection header is present - const automateLink = page.locator('a[href="/automate"]').first(); - await expect(automateLink).toBeVisible(); + await expect(page).toHaveURL(/\/automate/); await expect( page.getByText(/Automation Selection/i).first(), diff --git a/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts b/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts index 8176f37d71..41b64c1419 100644 --- a/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts +++ b/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts @@ -204,8 +204,11 @@ test.describe("15.7 Tour selectors — admin modal nav items", () => { const navItem = page .locator(`[data-tour="admin-${section}-nav"]`) .first(); + // Use waitFor attached (not isVisible) because admin nav items live in a + // scrollable sidebar and may be below the visible fold even when rendered. const isPresent = await navItem - .isVisible({ timeout: 5_000 }) + .waitFor({ state: "attached", timeout: 5_000 }) + .then(() => true) .catch(() => false); if (!isPresent) { test.skip( @@ -214,6 +217,7 @@ test.describe("15.7 Tour selectors — admin modal nav items", () => { ); return; } + await navItem.scrollIntoViewIfNeeded(); await expect(navItem).toBeVisible(); }); }