Repository navigation
Expand file tree
/
Copy pathdiffFileActions.test.ts
More file actions
113 lines (100 loc) · 3.4 KB
/
Copy pathdiffFileActions.test.ts
File metadata and controls
113 lines (100 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { scopeThreadRef } from "@t3tools/client-runtime/environment";
import { EnvironmentId, ThreadId } from "@t3tools/contracts";
import { beforeEach, describe, expect, it, vi } from "vite-plus/test";
import { openDiffFilePrimaryAction, resolveDiffPathForWorkspace } from "./diffFileActions";
import { selectThreadRightPanelState, useRightPanelStore } from "./rightPanelStore";
const THREAD_REF = scopeThreadRef(
EnvironmentId.make("environment-local"),
ThreadId.make("thread-1"),
);
describe("openDiffFilePrimaryAction", () => {
beforeEach(() => {
useRightPanelStore.setState({ byThreadKey: {}, threadPanelVisibilityByThreadKey: {} });
});
it("opens repository-relative diff files from a nested project", () => {
const openInEditor = vi.fn();
openDiffFilePrimaryAction({
threadRef: THREAD_REF,
filePath: "frontend/Dockerfile",
activeCwd: "/repo/frontend",
repositoryRoot: "/repo",
openInEditor,
});
expect(
selectThreadRightPanelState(useRightPanelStore.getState().byThreadKey, THREAD_REF),
).toMatchObject({
isOpen: true,
activeSurfaceId: "file:Dockerfile",
});
expect(openInEditor).not.toHaveBeenCalled();
});
it("preserves repository-relative paths in a separate worktree", () => {
expect(
resolveDiffPathForWorkspace({
filePath: "frontend/Dockerfile",
workspaceRoot: "/worktrees/feature",
repositoryRoot: "/repo",
}),
).toBe("frontend/Dockerfile");
});
it("handles Windows roots and mixed diff separators", () => {
expect(
resolveDiffPathForWorkspace({
filePath: "Frontend/src\\index.ts",
workspaceRoot: "C:\\repo\\frontend",
repositoryRoot: "C:\\repo",
}),
).toBe("src/index.ts");
});
// regression: #6174 opening diff files broke for repositories at a filesystem root
it.each([
{ workspaceRoot: "/frontend", repositoryRoot: "/" },
{ workspaceRoot: "C:\\frontend", repositoryRoot: "C:\\" },
])("handles filesystem roots: $repositoryRoot", ({ workspaceRoot, repositoryRoot }) => {
expect(
resolveDiffPathForWorkspace({
filePath: "frontend/index.ts",
workspaceRoot,
repositoryRoot,
}),
).toBe("index.ts");
});
it.each([
{
filePath: "/repo/frontend/src/index.ts",
workspaceRoot: "/repo/frontend",
expected: "src/index.ts",
},
{ filePath: "c:\\Repo\\src\\index.ts", workspaceRoot: "C:\\repo", expected: "src/index.ts" },
])(
"opens absolute diff paths inside the workspace: $filePath",
({ filePath, workspaceRoot, expected }) => {
expect(
resolveDiffPathForWorkspace({ filePath, workspaceRoot, repositoryRoot: workspaceRoot }),
).toBe(expected);
},
);
it.each([
"backend/server.ts",
"frontend2/app.ts",
"frontend/../secret.ts",
"C:secret.ts",
"/repo/backend/server.ts",
"/repo/frontend/../backend/server.ts",
"/repo/frontend",
"/etc/passwd",
])("does not open an out-of-project diff path: %s", (filePath) => {
const openInEditor = vi.fn();
openDiffFilePrimaryAction({
threadRef: THREAD_REF,
filePath,
activeCwd: "/repo/frontend",
repositoryRoot: "/repo",
openInEditor,
});
expect(
selectThreadRightPanelState(useRightPanelStore.getState().byThreadKey, THREAD_REF),
).toMatchObject({ isOpen: false });
expect(openInEditor).not.toHaveBeenCalled();
});
});