Files
oh-my-pi/packages/coding-agent/test/selector-settings-side-effects.test.ts
T
2026-06-19 20:28:00 -04:00

68 lines
2.4 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "bun:test";
import { Settings } from "@oh-my-pi/pi-coding-agent/config/settings";
import {
formatTemporaryModelStatus,
SelectorController,
} from "@oh-my-pi/pi-coding-agent/modes/controllers/selector-controller";
import { beginSettingsTest, restoreSettingsTestState, type SettingsTestState } from "./helpers/settings-test-state";
let settingsState: SettingsTestState | undefined;
beforeEach(async () => {
settingsState = beginSettingsTest();
await Settings.init({ inMemory: true });
});
afterEach(() => {
restoreSettingsTestState(settingsState);
settingsState = undefined;
});
describe("selector setting side effects", () => {
it("formats temporary model status with role assignment guidance", () => {
expect(formatTemporaryModelStatus("openai/gpt-5.1", "alt+m")).toBe(
"Temporary model selection is session-only: openai/gpt-5.1. Use alt+m or /model for role models (default/smol/plan/task/slow/custom roles).",
);
});
it("refreshes the status line when git integration changes at runtime", () => {
const updateSettings = vi.fn();
const updateEditorTopBorder = vi.fn();
const requestRender = vi.fn();
const controller = new SelectorController({
statusLine: { updateSettings },
updateEditorTopBorder,
ui: { requestRender },
} as unknown as ConstructorParameters<typeof SelectorController>[0]);
Settings.instance.override("git.enabled", false);
controller.handleSettingChange("git.enabled", false);
expect(updateSettings).toHaveBeenCalledWith(
expect.objectContaining({
preset: Settings.instance.get("statusLine.preset"),
leftSegments: Settings.instance.get("statusLine.leftSegments"),
rightSegments: Settings.instance.get("statusLine.rightSegments"),
}),
);
expect(updateEditorTopBorder).toHaveBeenCalledTimes(1);
expect(requestRender).toHaveBeenCalledTimes(1);
});
it("invalidates UI and updates editor top border when tui.tight changes", () => {
const invalidate = vi.fn();
const updateEditorTopBorder = vi.fn();
const requestRender = vi.fn();
const controller = new SelectorController({
ui: { invalidate, requestRender },
updateEditorTopBorder,
} as unknown as ConstructorParameters<typeof SelectorController>[0]);
controller.handleSettingChange("tui.tight", true);
expect(invalidate).toHaveBeenCalledTimes(1);
expect(updateEditorTopBorder).toHaveBeenCalledTimes(1);
expect(requestRender).toHaveBeenCalledTimes(1);
});
});