fix(app): stabilize project picker E2E selectors

Project picker tests had depended on a placeholder changed for fuzzy search. Use a dedicated input test ID so product copy no longer breaks the selectors.
This commit is contained in:
Mohamed Boudra
2026-07-10 12:39:40 +02:00
parent aa656772ef
commit 8c639fd796
4 changed files with 6 additions and 5 deletions
@@ -51,7 +51,7 @@ async function removeProjectFromSidebar(page: Page, projectId: string): Promise<
async function addProjectFromPicker(page: Page, projectPath: string): Promise<string> { async function addProjectFromPicker(page: Page, projectPath: string): Promise<string> {
await page.getByTestId("sidebar-add-project").click(); await page.getByTestId("sidebar-add-project").click();
const input = page.getByPlaceholder("Type a directory path..."); const input = page.getByTestId("project-picker-input");
await expect(input).toBeVisible({ timeout: 30_000 }); await expect(input).toBeVisible({ timeout: 30_000 });
await input.fill(projectPath); await input.fill(projectPath);
await page.keyboard.press("Enter"); await page.keyboard.press("Enter");
@@ -83,7 +83,7 @@ test.describe("Project picker search", () => {
await waitForSidebarProjectListReady(page); await waitForSidebarProjectListReady(page);
await page.getByTestId("sidebar-add-project").click(); await page.getByTestId("sidebar-add-project").click();
const input = page.getByPlaceholder("Type a directory path..."); const input = page.getByTestId("project-picker-input");
await expect(input).toBeVisible({ timeout: 30_000 }); await expect(input).toBeVisible({ timeout: 30_000 });
await input.fill(projectPickerFixture.fuzzyQuery); await input.fill(projectPickerFixture.fuzzyQuery);
@@ -102,7 +102,7 @@ test.describe("Project picker search", () => {
await waitForSidebarProjectListReady(page); await waitForSidebarProjectListReady(page);
await page.getByTestId("sidebar-add-project").click(); await page.getByTestId("sidebar-add-project").click();
const input = page.getByPlaceholder("Type a directory path..."); const input = page.getByTestId("project-picker-input");
await expect(input).toBeVisible({ timeout: 30_000 }); await expect(input).toBeVisible({ timeout: 30_000 });
await input.fill("paseo-loading-state-no-match"); await input.fill("paseo-loading-state-no-match");
@@ -38,7 +38,7 @@ test("Browse owns Enter without opening the active typed path", async ({
await gotoAppShell(page); await gotoAppShell(page);
await page.getByTestId("sidebar-add-project").click(); await page.getByTestId("sidebar-add-project").click();
const input = page.getByPlaceholder("Type a directory path..."); const input = page.getByTestId("project-picker-input");
await expect(input).toBeVisible({ timeout: 30_000 }); await expect(input).toBeVisible({ timeout: 30_000 });
await input.fill(projectPickerFixture.projectPath); await input.fill(projectPickerFixture.projectPath);
+1 -1
View File
@@ -136,7 +136,7 @@ async function readProjectConfigFile(project: ProjectsSettingsProject): Promise<
async function addProjectFromSidebar(page: Page, projectPath: string): Promise<string> { async function addProjectFromSidebar(page: Page, projectPath: string): Promise<string> {
await page.getByTestId("sidebar-add-project").click(); await page.getByTestId("sidebar-add-project").click();
const input = page.getByPlaceholder("Type a directory path..."); const input = page.getByTestId("project-picker-input");
await expect(input).toBeVisible({ timeout: 30_000 }); await expect(input).toBeVisible({ timeout: 30_000 });
await input.fill(projectPath); await input.fill(projectPath);
await page.keyboard.press("Enter"); await page.keyboard.press("Enter");
@@ -336,6 +336,7 @@ export function ProjectPickerModal() {
<View style={panelStyle}> <View style={panelStyle}>
<View style={headerStyle}> <View style={headerStyle}>
<TextInput <TextInput
testID="project-picker-input"
ref={inputRef} ref={inputRef}
value={query} value={query}
onChangeText={handleChangeQuery} onChangeText={handleChangeQuery}