Files
kandev/apps/web/lib/state/dockview-dev-server-panel.test.ts
Clément Fiere 0e6c98c0a0 feat(web): add prompt history panel (#2738)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-18 16:13:15 +00:00

78 lines
2.9 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { makeApi, makeStore } from "./dockview-panel-actions.test-utils";
import type { MockPanel } from "./dockview-panel-actions.test-utils";
import { buildPanelActions } from "./dockview-panel-actions";
import { buildExtraPanelActions } from "./dockview-extra-panel-actions";
import { DEV_SERVER_PANEL_ID } from "./layout-manager/constants";
const RIGHT_BOTTOM_GROUP = "group-right-bottom";
describe("focusOrAddBrowserPanel", () => {
it("opens one preview browser and focuses it again on later starts", () => {
// addBrowserPanel mints browser:<timestamp> when it has no URL, so an
// automatic open left a new empty tab behind on every start/stop cycle.
const api = makeApi();
const store = makeStore(api);
const actions = buildPanelActions(store.set, store.get);
actions.focusOrAddBrowserPanel();
actions.focusOrAddBrowserPanel();
const browsers = api.panels.filter(
(panel) => panel.api.component === "browser",
) as unknown as MockPanel[];
expect(browsers).toHaveLength(1);
expect(browsers[0].isActive).toBe(true);
});
});
describe("addDevServerPanel", () => {
it("opens the dev-server output panel in the terminal group", () => {
const api = makeApi({ extraGroupIds: [RIGHT_BOTTOM_GROUP] });
const store = makeStore(api);
const actions = buildExtraPanelActions(store.set, store.get);
actions.addDevServerPanel();
const panel = api.getPanel(DEV_SERVER_PANEL_ID) as unknown as MockPanel;
expect(panel).toBeDefined();
expect(panel.api.component).toBe("terminal");
expect(panel.group.id).toBe(RIGHT_BOTTOM_GROUP);
expect(panel.title).toBe("Dev Server");
});
it("carries no terminalId so closing the tab never parks or destroys a user shell", () => {
const api = makeApi({ extraGroupIds: [RIGHT_BOTTOM_GROUP] });
const store = makeStore(api);
const actions = buildExtraPanelActions(store.set, store.get);
actions.addDevServerPanel();
const panel = api.getPanel(DEV_SERVER_PANEL_ID) as unknown as MockPanel;
expect(panel.params.terminalId).toBeUndefined();
expect(panel.params.type).toBe(DEV_SERVER_PANEL_ID);
});
it("reuses the existing panel instead of stacking duplicates", () => {
const api = makeApi({ extraGroupIds: [RIGHT_BOTTOM_GROUP] });
const store = makeStore(api);
const actions = buildExtraPanelActions(store.set, store.get);
actions.addDevServerPanel();
actions.addDevServerPanel();
expect(api.panels.filter((panel) => panel.id === DEV_SERVER_PANEL_ID)).toHaveLength(1);
});
it("honours an explicit target group", () => {
const api = makeApi({ extraGroupIds: ["group-other"] });
const store = makeStore(api);
const actions = buildExtraPanelActions(store.set, store.get);
actions.addDevServerPanel("group-other");
const panel = api.getPanel(DEV_SERVER_PANEL_ID) as unknown as MockPanel;
expect(panel.group.id).toBe("group-other");
});
});