diff --git a/tests/e2e/apps-dark-mode-shots.spec.ts b/tests/e2e/apps-dark-mode-shots.spec.ts index bbc1de02f7..4090a0a2a7 100644 --- a/tests/e2e/apps-dark-mode-shots.spec.ts +++ b/tests/e2e/apps-dark-mode-shots.spec.ts @@ -115,12 +115,12 @@ test.describe.serial("dark-mode Apps surfaces", () => { await healthy?.close(); }); - test("sidebar says Apps and links to /apps", async ({ page }) => { + test("sidebar says Connectors and links to /apps", async ({ page }) => { await forceDark(page); await page.goto(`/${seed.prefix}/dashboard`); - const appsLink = page.getByRole("link", { name: "Apps", exact: true }); - await expect(appsLink).toBeVisible({ timeout: 30_000 }); - await expect(appsLink).toHaveAttribute("href", new RegExp(`/${seed.prefix}/apps$`)); + const connectorsLink = page.getByRole("link", { name: "Connectors", exact: true }); + await expect(connectorsLink).toBeVisible({ timeout: 30_000 }); + await expect(connectorsLink).toHaveAttribute("href", new RegExp(`/${seed.prefix}/apps$`)); }); test("apps list dark mode with attention banner", async ({ page }) => { diff --git a/tests/e2e/sidebar-takeover.spec.ts b/tests/e2e/sidebar-takeover.spec.ts index af55e6fff8..e979aaa1a4 100644 --- a/tests/e2e/sidebar-takeover.spec.ts +++ b/tests/e2e/sidebar-takeover.spec.ts @@ -3,9 +3,9 @@ import { test, expect, request as pwRequest, type APIRequestContext } from "@pla /** * E2E: contextual sidebar companion model. * - * Contextual routes render their navigation beside the stable global sidebar. - * The global company navigation and account menu remain available, and leaving - * the surface restores the user's global sidebar preference. + * Most contextual routes render their navigation beside the stable global + * sidebar. Settings intentionally takes over that sidebar while preserving the + * account menu, and its Back to app link restores the global navigation. * * Plugin route sidebars share the same Layout path. A live plugin-route test * requires a plugin fixture, so that branch remains covered by Layout tests. @@ -60,7 +60,7 @@ test.describe("Contextual sidebar companion", () => { }, COLLAPSED_STORAGE_KEY); }); - test("shows Settings beside the global navigation", async ({ page }) => { + test("replaces global navigation with Settings navigation", async ({ page }) => { await page.goto(`/${prefix}/company/settings`); const contextual = page.locator('[data-contextual-sidebar="settings"]'); @@ -70,10 +70,10 @@ test.describe("Contextual sidebar companion", () => { await expect(contextual.getByRole("link", { name: "General" })).toBeVisible(); await expect(contextual.getByText("Environments", { exact: true })).toBeVisible(); - await expect(page.getByRole("button", { name: "Back from Settings" })).toBeVisible(); + await expect(contextual.getByRole("link", { name: "Back to app" })).toBeVisible(); await expect(page.getByRole("button", { name: "Open account menu" })).toBeVisible(); - await expect(page.getByRole("link", { name: "Dashboard" })).toBeVisible(); + await expect(page.getByRole("link", { name: "Dashboard" })).toHaveCount(0); await expect(page.getByLabel(APP_SIDEBAR_EXPANDED_MARKER)).toHaveCount(0); }); @@ -91,7 +91,7 @@ test.describe("Contextual sidebar companion", () => { test("keeps the retired collapse control absent across contextual navigation", async ({ page }) => { await page.goto(`/${prefix}/company/settings`); await expect(page.locator('[data-contextual-sidebar="settings"]')).toBeVisible(); - await expect(page.getByRole("link", { name: "Dashboard" })).toBeVisible(); + await expect(page.getByRole("link", { name: "Back to app" })).toBeVisible(); await expect(page.getByLabel(APP_SIDEBAR_EXPANDED_MARKER)).toHaveCount(0); await page.goto(`/${prefix}/dashboard`); @@ -101,9 +101,9 @@ test.describe("Contextual sidebar companion", () => { await expect(page.getByLabel(APP_SIDEBAR_EXPANDED_MARKER)).toHaveCount(0); }); - test("uses Dashboard as the safe fallback for a direct Settings link", async ({ page }) => { + test("uses Dashboard as the destination for a direct Settings link", async ({ page }) => { await page.goto(`/${prefix}/company/settings`); - await page.getByRole("button", { name: "Back from Settings" }).click(); + await page.getByRole("link", { name: "Back to app" }).click(); await expect(page).toHaveURL(new RegExp(`/${prefix}/dashboard$`)); await expect(page.locator("[data-contextual-sidebar]")).toHaveCount(0); diff --git a/ui/src/components/AppsSidebar.production.tsx b/ui/src/components/AppsSidebar.production.tsx index d3f09d355d..a04d31f3b6 100644 --- a/ui/src/components/AppsSidebar.production.tsx +++ b/ui/src/components/AppsSidebar.production.tsx @@ -8,10 +8,10 @@ import { useReviewCount } from "@/pages/apps/useReviewCount"; import { SidebarNavItem } from "./SidebarNavItem.production"; /** - * Secondary sidebar for the prosumer Apps area (PAP-10856; three-door IA + * Secondary sidebar for the prosumer Connectors area (PAP-10856; three-door IA * PAP-13254 / U3). * - * ← Back · APPS: Browse / Review (n) + * ← Back · CONNECTORS: Browse / Review (n) * DEVELOPER: Connections / Gateways / Profiles / Rules / Health / Activity * * "Browse" is the store and "Review" holds decisions waiting on the user's @@ -19,7 +19,7 @@ import { SidebarNavItem } from "./SidebarNavItem.production"; * "Needs attention" is no longer a door: health/error triage folds into * Connections as a status filter + banner, so approvals are never buried * behind an error label. The Developer section was folded in from the retired - * ToolsSidebar (PAP-10915) so the whole Apps area shares one sidebar; a + * ToolsSidebar (PAP-10915) so the whole Connectors area shares one sidebar; a * one-line caption frames who it's for (Finding A). "Run your own" and "Paste a * config" moved out of the sidebar into rows on the Connect-an-app page * (PAP-10922). @@ -49,13 +49,13 @@ export function AppsSidebar() {
- Apps + Connectors