Files
kandev/apps/web/components/task/dockview-panel-content.diff.test.tsx
T
José Almeida 9c73a2d8c3 fix: keep diff previews tied to the correct file (#1618)
* fix: keep diff previews tied to the correct file

* fix: handle legacy file editor panel restores

* test: align file editor image mock

* fix: ignore sibling repo editor sync changes

* test: use repo scoped file keys in save tests

* fix: guard file editor preview restoration

* fix: remove redundant preview path fallback

* test: cover repo scoped image previews

* test: use repo scoped keys in sync tests

* fix: guard stale file editor open fetches

* fix: distinguish repeated file editor requests

* fix: open single-repo PR diffs without repo filter

* fix: keep pending file opens alive
2026-07-09 17:25:33 +01:00

69 lines
1.9 KiB
TypeScript

import { render } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
const taskChangesPanel = vi.hoisted(() => ({
props: null as Record<string, unknown> | null,
}));
vi.mock("./task-changes-panel", () => ({
TaskChangesPanel: (props: Record<string, unknown>) => {
taskChangesPanel.props = props;
return <div data-testid="task-changes-panel" />;
},
}));
vi.mock("@/hooks/use-file-editors", () => ({
useFileEditors: () => ({ openFile: vi.fn() }),
}));
vi.mock("@/lib/state/dockview-store", () => ({
useDockviewStore: (selector: (state: Record<string, unknown>) => unknown) =>
selector({
selectedDiff: null,
setSelectedDiff: vi.fn(),
api: { getPanel: vi.fn(), removePanel: vi.fn() },
}),
}));
vi.mock("@/components/state-provider", () => ({
useAppStore: (selector: (state: Record<string, unknown>) => unknown) =>
selector({
tasks: { activeSessionId: null, activeTaskId: null },
taskSessions: { items: {} },
agentProfiles: { items: [] },
kanban: { tasks: [] },
kanbanMulti: { snapshots: {} },
}),
useAppStoreApi: () => ({
getState: () => ({
tasks: { activeSessionId: null, activeTaskId: null },
kanban: { tasks: [] },
kanbanMulti: { snapshots: {} },
}),
}),
}));
import { renderPanel } from "./dockview-panel-content";
describe("dockview diff panel content", () => {
it("passes repositoryName from panel params into the file-mode diff view", () => {
render(
<>
{renderPanel("preview:file-diff", "diff-viewer", {
kind: "file",
path: "README.md",
source: "uncommitted",
repositoryName: "frontend",
})}
</>,
);
expect(taskChangesPanel.props).toMatchObject({
mode: "file",
filePath: "README.md",
sourceFilter: "uncommitted",
fileRepositoryName: "frontend",
});
});
});