From ce095e2846c7a69aa315b75dfcdc277d0828a1c8 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 18 Mar 2026 16:48:03 +0100 Subject: [PATCH] fix(coding-agent): make tests keybinding-agnostic Reset global editor keybindings to defaults in beforeEach for session-selector-rename and tree-selector tests. Pass KeybindingsManager.inMemory() to SessionSelectorComponent in tests to avoid reading user keybindings.json. Closes #2360 --- packages/coding-agent/CHANGELOG.md | 4 ++++ .../test/session-selector-rename.test.ts | 18 ++++++++++++++---- .../coding-agent/test/tree-selector.test.ts | 8 +++++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index fe9c2110..84ccb8b8 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Tests for session-selector-rename and tree-selector are now keybinding-agnostic, resetting editor keybindings to defaults before each test so user `keybindings.json` cannot cause failures ([#2360](https://github.com/badlogic/pi-mono/issues/2360)) + ## [0.60.0] - 2026-03-18 ### New Features diff --git a/packages/coding-agent/test/session-selector-rename.test.ts b/packages/coding-agent/test/session-selector-rename.test.ts index 801814d5..dcf23ec7 100644 --- a/packages/coding-agent/test/session-selector-rename.test.ts +++ b/packages/coding-agent/test/session-selector-rename.test.ts @@ -1,4 +1,6 @@ -import { beforeAll, describe, expect, it, vi } from "vitest"; +import { DEFAULT_EDITOR_KEYBINDINGS, EditorKeybindingsManager, setEditorKeybindings } from "@mariozechner/pi-tui"; +import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { KeybindingsManager } from "../src/core/keybindings.js"; import type { SessionInfo } from "../src/core/session-manager.js"; import { SessionSelectorComponent } from "../src/modes/interactive/components/session-selector.js"; import { initTheme } from "../src/modes/interactive/theme/theme.js"; @@ -31,8 +33,14 @@ describe("session selector rename", () => { initTheme("dark"); }); + beforeEach(() => { + // Ensure test isolation: editor keybindings are a global singleton + setEditorKeybindings(new EditorKeybindingsManager(DEFAULT_EDITOR_KEYBINDINGS)); + }); + it("shows rename hint in interactive /resume picker configuration", async () => { const sessions = [makeSession({ id: "a" })]; + const keybindings = KeybindingsManager.inMemory(); const selector = new SessionSelectorComponent( async () => sessions, async () => [], @@ -40,7 +48,7 @@ describe("session selector rename", () => { () => {}, () => {}, () => {}, - { showRenameHint: true }, + { showRenameHint: true, keybindings }, ); await flushPromises(); @@ -51,6 +59,7 @@ describe("session selector rename", () => { it("does not show rename hint in --resume picker configuration", async () => { const sessions = [makeSession({ id: "a" })]; + const keybindings = KeybindingsManager.inMemory(); const selector = new SessionSelectorComponent( async () => sessions, async () => [], @@ -58,7 +67,7 @@ describe("session selector rename", () => { () => {}, () => {}, () => {}, - { showRenameHint: false }, + { showRenameHint: false, keybindings }, ); await flushPromises(); @@ -71,6 +80,7 @@ describe("session selector rename", () => { const sessions = [makeSession({ id: "a", name: "Old" })]; const renameSession = vi.fn(async () => {}); + const keybindings = KeybindingsManager.inMemory(); const selector = new SessionSelectorComponent( async () => sessions, async () => [], @@ -78,7 +88,7 @@ describe("session selector rename", () => { () => {}, () => {}, () => {}, - { renameSession, showRenameHint: true }, + { renameSession, showRenameHint: true, keybindings }, ); await flushPromises(); diff --git a/packages/coding-agent/test/tree-selector.test.ts b/packages/coding-agent/test/tree-selector.test.ts index 01b64a50..7ff9ef09 100644 --- a/packages/coding-agent/test/tree-selector.test.ts +++ b/packages/coding-agent/test/tree-selector.test.ts @@ -1,4 +1,5 @@ -import { beforeAll, describe, expect, test } from "vitest"; +import { DEFAULT_EDITOR_KEYBINDINGS, EditorKeybindingsManager, setEditorKeybindings } from "@mariozechner/pi-tui"; +import { beforeAll, beforeEach, describe, expect, test } from "vitest"; import type { ModelChangeEntry, SessionEntry, @@ -12,6 +13,11 @@ beforeAll(() => { initTheme("dark"); }); +beforeEach(() => { + // Ensure test isolation: editor keybindings are a global singleton + setEditorKeybindings(new EditorKeybindingsManager(DEFAULT_EDITOR_KEYBINDINGS)); +}); + // Helper to create a user message entry function userMessage(id: string, parentId: string | null, content: string): SessionMessageEntry { return {