fix(app): restore tabs without layout flicker
This commit is contained in:
@@ -58,7 +58,7 @@ function inFlightTurn(page: Page) {
|
||||
|
||||
async function openForkMenu(page: Page, trigger: ReturnType<Page["getByRole"]>): Promise<void> {
|
||||
await trigger.click();
|
||||
await expect(page.getByRole("button", { name: "Fork in a new tab" })).toBeVisible({
|
||||
await expect(page.getByRole("menuitem", { name: "Fork in a new tab" })).toBeVisible({
|
||||
timeout: 10_000,
|
||||
});
|
||||
}
|
||||
@@ -80,7 +80,7 @@ export async function openMostRecentAssistantForkMenu(page: Page): Promise<void>
|
||||
|
||||
export async function forkMostRecentAssistantTurnToNewTab(page: Page): Promise<void> {
|
||||
await openMostRecentAssistantForkMenu(page);
|
||||
await page.getByRole("button", { name: "Fork in a new tab" }).click();
|
||||
await page.getByRole("menuitem", { name: "Fork in a new tab" }).click();
|
||||
}
|
||||
|
||||
export async function expectInFlightForkAvailable(page: Page): Promise<void> {
|
||||
@@ -92,12 +92,12 @@ export async function expectInFlightForkAvailable(page: Page): Promise<void> {
|
||||
export async function forkInFlightTurnToNewTab(page: Page): Promise<void> {
|
||||
const trigger = inFlightTurn(page).getByRole("button", { name: "Fork chat" });
|
||||
await openForkMenu(page, trigger);
|
||||
await page.getByRole("button", { name: "Fork in a new tab" }).click();
|
||||
await page.getByRole("menuitem", { name: "Fork in a new tab" }).click();
|
||||
}
|
||||
|
||||
export async function forkMostRecentAssistantTurnToNewWorkspace(page: Page): Promise<void> {
|
||||
await openMostRecentAssistantForkMenu(page);
|
||||
await page.getByRole("button", { name: "Fork in a new workspace" }).click();
|
||||
await page.getByRole("menuitem", { name: "Fork in a new workspace" }).click();
|
||||
}
|
||||
|
||||
export async function expectChatHistoryAttachment(page: Page): Promise<void> {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { expect, type Locator, type Page } from "@playwright/test";
|
||||
import { openSettings } from "./app";
|
||||
import { openSettingsSection } from "./settings";
|
||||
import { runWorkspaceActionFromCommandCenter } from "./command-center-workspace-actions";
|
||||
|
||||
export function chatOutlineRail(page: Page): Locator {
|
||||
return page.getByTestId("chat-outline-rail");
|
||||
@@ -41,7 +42,7 @@ export async function clickChatOutlineRowEdge(page: Page, position: number): Pro
|
||||
}
|
||||
|
||||
export async function splitCurrentPanelRight(page: Page): Promise<void> {
|
||||
await page.getByRole("button", { name: "Split pane right" }).first().click();
|
||||
await runWorkspaceActionFromCommandCenter(page, "Split pane right");
|
||||
}
|
||||
|
||||
export async function disableChatOutlineFromAppearance(page: Page): Promise<void> {
|
||||
|
||||
@@ -64,3 +64,12 @@ export async function createTerminalFromCommandCenter(page: Page, panel: Locator
|
||||
await page.keyboard.press("Enter");
|
||||
await expectTerminalTabOpen(page);
|
||||
}
|
||||
|
||||
export async function runWorkspaceActionFromCommandCenter(
|
||||
page: Page,
|
||||
title: string,
|
||||
): Promise<void> {
|
||||
const panel = await openCommandCenter(page);
|
||||
await panel.getByTestId("command-center-input").fill(title);
|
||||
await action(panel, title).click();
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ export async function openAttachmentMenu(page: Page): Promise<void> {
|
||||
export async function expectAttachmentSheetRowsOnTitleRail(page: Page): Promise<void> {
|
||||
const title = page.getByText("Add attachment", { exact: true });
|
||||
const firstItemGlyph = page
|
||||
.getByRole("button", { name: "Add image", exact: true })
|
||||
.getByRole("menuitem", { name: "Add image", exact: true })
|
||||
.locator("svg")
|
||||
.first();
|
||||
await waitForSettledPosition(title);
|
||||
|
||||
@@ -177,7 +177,7 @@ export async function renameHostFromSettings(page: Page, name: string): Promise<
|
||||
|
||||
export async function chooseHostColor(page: Page, colorName: string): Promise<void> {
|
||||
await page.getByRole("button", { name: /^Color, / }).click();
|
||||
await page.getByRole("button", { name: colorName, exact: true }).click();
|
||||
await page.getByRole("menuitem", { name: colorName, exact: true }).click();
|
||||
await expect(page.getByRole("button", { name: `Color, ${colorName}` })).toBeVisible();
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ export async function chooseHostBadgeDisplay(
|
||||
option: "Name" | "Icon only" | "Hidden",
|
||||
): Promise<void> {
|
||||
await page.getByTestId("host-appearance-badge-display").click();
|
||||
await page.getByRole("button", { name: option, exact: true }).click();
|
||||
await page.getByRole("menuitem", { name: option, exact: true }).click();
|
||||
await expect(page.getByRole("button", { name: `Sidebar badge, ${option}` })).toBeVisible();
|
||||
}
|
||||
|
||||
|
||||
@@ -239,7 +239,7 @@ export async function removeProjectScript(page: Page, scriptName: string): Promi
|
||||
const id = (await row.getAttribute("data-testid"))!.replace("script-row-", "");
|
||||
await page.getByTestId(`script-row-menu-${id}`).click();
|
||||
page.once("dialog", (dialog) => void dialog.accept());
|
||||
await page.getByRole("button", { name: "Remove" }).click();
|
||||
await page.getByRole("menuitem", { name: "Remove" }).click();
|
||||
}
|
||||
|
||||
// --- File manipulation ---
|
||||
|
||||
@@ -77,9 +77,9 @@ export async function expectWorkspaceContextMenuActions(
|
||||
): Promise<void> {
|
||||
const workspaceKey = `${getServerId()}:${workspaceId}`;
|
||||
const menu = page.getByTestId(`sidebar-workspace-context-menu-${workspaceKey}`);
|
||||
await expect(menu.getByRole("button", { name: "Copy path" })).toBeVisible();
|
||||
await expect(menu.getByRole("button", { name: "Rename workspace" })).toBeVisible();
|
||||
await expect(menu.getByRole("button", { name: "Archive" })).toBeVisible();
|
||||
await expect(menu.getByRole("menuitem", { name: "Copy path" })).toBeVisible();
|
||||
await expect(menu.getByRole("menuitem", { name: "Rename workspace" })).toBeVisible();
|
||||
await expect(menu.getByRole("menuitem", { name: "Archive" })).toBeVisible();
|
||||
}
|
||||
|
||||
export async function openProjectContextMenu(page: Page, projectViewKey: string): Promise<void> {
|
||||
@@ -101,8 +101,8 @@ export async function expectProjectContextMenuActions(
|
||||
projectViewKey: string,
|
||||
): Promise<void> {
|
||||
const menu = page.getByTestId(`sidebar-project-context-menu-${projectViewKey}`);
|
||||
await expect(menu.getByRole("button", { name: "Open project settings" })).toBeVisible();
|
||||
await expect(menu.getByRole("button", { name: "Remove project" })).toBeVisible();
|
||||
await expect(menu.getByRole("menuitem", { name: "Open project settings" })).toBeVisible();
|
||||
await expect(menu.getByRole("menuitem", { name: "Remove project" })).toBeVisible();
|
||||
}
|
||||
|
||||
export async function selectWorkspaceInSidebar(page: Page, workspaceId: string): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user