Derive tab testIDs from the tab target
The tab testID was reading from tabId, which intentionally stays as the draft id after a draft -> agent handoff so the panel React key remains stable and the component does not remount. The data-testid was riding along on that identity and stayed workspace-tab-draft_xxx forever, even though the tab semantically became an agent. Tests that look for workspace-tab-agent_* timed out. Read testIDs from tab.target via buildDeterministicWorkspaceTabId so the testID reflects what the tab represents. React key is unchanged.
This commit is contained in:
@@ -54,6 +54,7 @@ import {
|
|||||||
WorkspaceTabIcon,
|
WorkspaceTabIcon,
|
||||||
type WorkspaceTabPresentation,
|
type WorkspaceTabPresentation,
|
||||||
} from "@/screens/workspace/workspace-tab-presentation";
|
} from "@/screens/workspace/workspace-tab-presentation";
|
||||||
|
import { buildDeterministicWorkspaceTabId } from "@/workspace-tabs/identity";
|
||||||
import {
|
import {
|
||||||
buildWorkspaceDesktopTabActions,
|
buildWorkspaceDesktopTabActions,
|
||||||
type WorkspaceDesktopTabActions,
|
type WorkspaceDesktopTabActions,
|
||||||
@@ -379,7 +380,7 @@ function TabChip({
|
|||||||
<ContextMenuTrigger
|
<ContextMenuTrigger
|
||||||
{...(dragHandleProps?.attributes as object | undefined)}
|
{...(dragHandleProps?.attributes as object | undefined)}
|
||||||
{...(dragHandleProps?.listeners as object | undefined)}
|
{...(dragHandleProps?.listeners as object | undefined)}
|
||||||
testID={`workspace-tab-${tab.key}`}
|
testID={`workspace-tab-${buildDeterministicWorkspaceTabId(tab.target)}`}
|
||||||
triggerRef={dragHandleProps?.setActivatorNodeRef as unknown as undefined}
|
triggerRef={dragHandleProps?.setActivatorNodeRef as unknown as undefined}
|
||||||
enabledOnMobile={false}
|
enabledOnMobile={false}
|
||||||
style={tabChipStyle}
|
style={tabChipStyle}
|
||||||
|
|||||||
@@ -82,7 +82,11 @@ import type { WorkspaceTab, WorkspaceTabTarget } from "@/stores/workspace-tabs-s
|
|||||||
import { useKeyboardActionHandler } from "@/hooks/use-keyboard-action-handler";
|
import { useKeyboardActionHandler } from "@/hooks/use-keyboard-action-handler";
|
||||||
import type { KeyboardActionDefinition } from "@/keyboard/keyboard-action-dispatcher";
|
import type { KeyboardActionDefinition } from "@/keyboard/keyboard-action-dispatcher";
|
||||||
import { useCreateFlowStore } from "@/stores/create-flow-store";
|
import { useCreateFlowStore } from "@/stores/create-flow-store";
|
||||||
import { normalizeWorkspaceTabTarget, workspaceTabTargetsEqual } from "@/workspace-tabs/identity";
|
import {
|
||||||
|
buildDeterministicWorkspaceTabId,
|
||||||
|
normalizeWorkspaceTabTarget,
|
||||||
|
workspaceTabTargetsEqual,
|
||||||
|
} from "@/workspace-tabs/identity";
|
||||||
import {
|
import {
|
||||||
getHostRuntimeStore,
|
getHostRuntimeStore,
|
||||||
useHostRuntimeClient,
|
useHostRuntimeClient,
|
||||||
@@ -516,7 +520,7 @@ function MobileWorkspaceTabOption({
|
|||||||
onCloseTabsBelow: (tabId: string) => Promise<void> | void;
|
onCloseTabsBelow: (tabId: string) => Promise<void> | void;
|
||||||
onCloseOtherTabs: (tabId: string) => Promise<void> | void;
|
onCloseOtherTabs: (tabId: string) => Promise<void> | void;
|
||||||
}) {
|
}) {
|
||||||
const menuTestIDBase = `workspace-tab-menu-${tab.key}`;
|
const menuTestIDBase = `workspace-tab-menu-${buildDeterministicWorkspaceTabId(tab.target)}`;
|
||||||
const menuEntries = buildWorkspaceTabMenuEntries({
|
const menuEntries = buildWorkspaceTabMenuEntries({
|
||||||
surface: "mobile",
|
surface: "mobile",
|
||||||
tab,
|
tab,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types";
|
import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types";
|
||||||
import { encodeFilePathForPathSegment } from "@/utils/host-routes";
|
import { encodeFilePathForPathSegment } from "@/utils/host-routes";
|
||||||
|
import { buildDeterministicWorkspaceTabId } from "@/workspace-tabs/identity";
|
||||||
|
|
||||||
export type WorkspaceTabMenuSurface = "desktop" | "mobile";
|
export type WorkspaceTabMenuSurface = "desktop" | "mobile";
|
||||||
|
|
||||||
@@ -228,7 +229,7 @@ export function buildWorkspaceTabMenuEntries(
|
|||||||
export function buildWorkspaceDesktopTabActions(
|
export function buildWorkspaceDesktopTabActions(
|
||||||
input: BuildWorkspaceDesktopTabActionsInput,
|
input: BuildWorkspaceDesktopTabActionsInput,
|
||||||
): WorkspaceDesktopTabActions {
|
): WorkspaceDesktopTabActions {
|
||||||
const contextMenuTestId = `workspace-tab-context-${input.tab.key}`;
|
const contextMenuTestId = `workspace-tab-context-${buildDeterministicWorkspaceTabId(input.tab.target)}`;
|
||||||
return {
|
return {
|
||||||
contextMenuTestId,
|
contextMenuTestId,
|
||||||
menuEntries: buildWorkspaceTabMenuEntries({
|
menuEntries: buildWorkspaceTabMenuEntries({
|
||||||
|
|||||||
Reference in New Issue
Block a user