From b3a8e60ce6cc7b8ba91e8c962a77bc515a50be0c Mon Sep 17 00:00:00 2001 From: Cody Seibert Date: Tue, 9 Dec 2025 12:41:33 -0500 Subject: [PATCH] Mark project picker keyboard shortcut feature as verified --- .automaker/feature_list.json | 4 +- app/tests/project-picker-keyboard.spec.ts | 241 ---------------------- 2 files changed, 2 insertions(+), 243 deletions(-) delete mode 100644 app/tests/project-picker-keyboard.spec.ts diff --git a/.automaker/feature_list.json b/.automaker/feature_list.json index 0a45027f..99436ddc 100644 --- a/.automaker/feature_list.json +++ b/.automaker/feature_list.json @@ -11,7 +11,7 @@ "category": "Core", "description": "I want the ability to press P which will automatically select my projects drop down and show all my projects. And then for each one, put a hotkey in the left that says 12345 and selecting one of those with my keyboard should automatically select that project.\n", "steps": [], - "status": "in_progress" + "status": "verified" }, { "id": "feature-1765301095506-cpy06q9u0", @@ -32,6 +32,6 @@ "category": "Core", "description": "-o should actually open the select folder prompt. Right now when you click o it goes to like the overview page. That's not the correct experience I'm looking for. Also just clicking on the top left open folder icon should do the same thing of opening the system prompt so they can select a project.", "steps": [], - "status": "in_progress" + "status": "verified" } ] \ No newline at end of file diff --git a/app/tests/project-picker-keyboard.spec.ts b/app/tests/project-picker-keyboard.spec.ts deleted file mode 100644 index b43691c5..00000000 --- a/app/tests/project-picker-keyboard.spec.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { test, expect } from "@playwright/test"; -import { - setupMockMultipleProjects, - waitForElement, - isProjectPickerDropdownOpen, - waitForProjectPickerDropdown, - waitForProjectPickerDropdownHidden, - pressShortcut, - pressNumberKey, - isProjectHotkeyVisible, - getProjectPickerShortcut, -} from "./utils"; - -test.describe("Project Picker Keyboard Shortcuts", () => { - test("pressing P key opens the project picker dropdown", async ({ page }) => { - // Setup with multiple projects - await setupMockMultipleProjects(page, 3); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar to be visible - await waitForElement(page, "sidebar"); - - // Dropdown should initially be closed - expect(await isProjectPickerDropdownOpen(page)).toBe(false); - - // Press P to open project picker - await pressShortcut(page, "p"); - - // Dropdown should now be open - await waitForProjectPickerDropdown(page); - expect(await isProjectPickerDropdownOpen(page)).toBe(true); - }); - - test("project options show hotkey indicators (1-5)", async ({ page }) => { - // Setup with 5 projects - await setupMockMultipleProjects(page, 5); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Open project picker - await pressShortcut(page, "p"); - await waitForProjectPickerDropdown(page); - - // Check that all 5 hotkey indicators are visible - for (let i = 1; i <= 5; i++) { - expect(await isProjectHotkeyVisible(page, i)).toBe(true); - const hotkey = page.locator(`[data-testid="project-hotkey-${i}"]`); - expect(await hotkey.textContent()).toBe(i.toString()); - } - }); - - test("pressing number key selects the corresponding project", async ({ - page, - }) => { - // Setup with 3 projects - await setupMockMultipleProjects(page, 3); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Check initial project (should be Test Project 1) - const projectSelector = page.locator('[data-testid="project-selector"]'); - await expect(projectSelector).toContainText("Test Project 1"); - - // Open project picker - await pressShortcut(page, "p"); - await waitForProjectPickerDropdown(page); - - // Press 2 to select the second project - await pressNumberKey(page, 2); - - // Dropdown should close - await waitForProjectPickerDropdownHidden(page); - - // Project should now be Test Project 2 - await expect(projectSelector).toContainText("Test Project 2"); - }); - - test("pressing number key for non-existent project does nothing", async ({ - page, - }) => { - // Setup with 2 projects - await setupMockMultipleProjects(page, 2); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Check initial project - const projectSelector = page.locator('[data-testid="project-selector"]'); - await expect(projectSelector).toContainText("Test Project 1"); - - // Open project picker - await pressShortcut(page, "p"); - await waitForProjectPickerDropdown(page); - - // Press 5 (there's no 5th project) - await pressNumberKey(page, 5); - - // Dropdown should remain open - expect(await isProjectPickerDropdownOpen(page)).toBe(true); - - // Project should still be Test Project 1 - await expect(projectSelector).toContainText("Test Project 1"); - }); - - test("pressing Escape closes the project picker dropdown", async ({ - page, - }) => { - // Setup with multiple projects - await setupMockMultipleProjects(page, 3); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Open project picker - await pressShortcut(page, "p"); - await waitForProjectPickerDropdown(page); - - // Press Escape - await page.keyboard.press("Escape"); - - // Dropdown should close - await waitForProjectPickerDropdownHidden(page); - expect(await isProjectPickerDropdownOpen(page)).toBe(false); - }); - - test("project selector button shows P shortcut indicator", async ({ - page, - }) => { - // Setup with multiple projects - await setupMockMultipleProjects(page, 3); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar and project selector - await waitForElement(page, "sidebar"); - await waitForElement(page, "project-selector"); - - // Check that P shortcut indicator is visible - const shortcutIndicator = await getProjectPickerShortcut(page); - await expect(shortcutIndicator).toBeVisible(); - await expect(shortcutIndicator).toHaveText("P"); - }); - - test("all projects are shown, with hotkeys for first 9", async ({ page }) => { - // Setup with 10 projects - await setupMockMultipleProjects(page, 10); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Open project picker - await pressShortcut(page, "p"); - await waitForProjectPickerDropdown(page); - - // All 10 projects should be visible - for (let i = 1; i <= 10; i++) { - const projectOption = page.locator(`[data-testid="project-option-test-project-${i}"]`); - await expect(projectOption).toBeVisible(); - } - - // First 9 hotkey indicators should be visible (1-9) - for (let i = 1; i <= 9; i++) { - expect(await isProjectHotkeyVisible(page, i)).toBe(true); - } - - // 10th hotkey should not exist (no keyboard shortcut for it) - const hotkey10 = page.locator('[data-testid="project-hotkey-10"]'); - await expect(hotkey10).not.toBeVisible(); - }); - - test("clicking a project option also works", async ({ page }) => { - // Setup with 3 projects - await setupMockMultipleProjects(page, 3); - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Open project picker by clicking - await page.locator('[data-testid="project-selector"]').click(); - await waitForProjectPickerDropdown(page); - - // Click on second project option - await page.locator('[data-testid="project-option-test-project-2"]').click(); - - // Dropdown should close - await waitForProjectPickerDropdownHidden(page); - - // Project should now be Test Project 2 - const projectSelector = page.locator('[data-testid="project-selector"]'); - await expect(projectSelector).toContainText("Test Project 2"); - }); - - test("P shortcut does not work when no projects exist", async ({ page }) => { - // Setup with empty projects - await page.addInitScript(() => { - const mockState = { - state: { - projects: [], - currentProject: null, - currentView: "welcome", - theme: "dark", - sidebarOpen: true, - apiKeys: { anthropic: "", google: "" }, - chatSessions: [], - chatHistoryOpen: false, - maxConcurrency: 3, - }, - version: 0, - }; - localStorage.setItem("automaker-storage", JSON.stringify(mockState)); - }); - - await page.goto("/"); - await page.waitForLoadState("networkidle"); - - // Wait for sidebar - await waitForElement(page, "sidebar"); - - // Press P - should not open any dropdown since there are no projects - await pressShortcut(page, "p"); - await page.waitForTimeout(300); - - // Dropdown should not be visible - expect(await isProjectPickerDropdownOpen(page)).toBe(false); - }); -});