
























@@ -3,11 +3,16 @@ import os from "node:os";
33import { beforeEach, describe, expect, it, vi } from "vitest";
4455const runExec = vi.hoisted(() => vi.fn());
6+const resolvePreferredOpenClawTmpDirMock = vi.hoisted(() => vi.fn(() => "/tmp/openclaw"));
6778vi.mock("../process/exec.js", () => ({
89 runExec,
910}));
101112+vi.mock("openclaw/plugin-sdk/temp-path", () => ({
13+resolvePreferredOpenClawTmpDir: resolvePreferredOpenClawTmpDirMock,
14+}));
15+1116function mockTrashContainer(...suffixes: string[]) {
1217let call = 0;
1318return vi.spyOn(fs, "mkdtempSync").mockImplementation((prefix) => {
@@ -21,6 +26,8 @@ describe("browser trash", () => {
2126beforeEach(() => {
2227vi.restoreAllMocks();
2328runExec.mockReset();
29+resolvePreferredOpenClawTmpDirMock.mockReset();
30+resolvePreferredOpenClawTmpDirMock.mockReturnValue("/tmp/openclaw");
2431vi.spyOn(Date, "now").mockReturnValue(123);
2532vi.spyOn(os, "homedir").mockReturnValue("/home/test");
2633vi.spyOn(os, "tmpdir").mockReturnValue("/tmp");
@@ -39,7 +46,7 @@ describe("browser trash", () => {
3946const cpSync = vi.spyOn(fs, "cpSync");
4047const rmSync = vi.spyOn(fs, "rmSync");
414842-await expect(movePathToTrash("/tmp/demo")).resolves.toBe(
49+await expect(movePathToTrash("/tmp/openclaw/demo")).resolves.toBe(
4350"/home/test/.Trash/demo-123-secure/demo",
4451);
4552expect(runExec).not.toHaveBeenCalled();
@@ -48,7 +55,10 @@ describe("browser trash", () => {
4855mode: 0o700,
4956});
5057expect(mkdtempSync).toHaveBeenCalledWith("/home/test/.Trash/demo-123-");
51-expect(renameSync).toHaveBeenCalledWith("/tmp/demo", "/home/test/.Trash/demo-123-secure/demo");
58+expect(renameSync).toHaveBeenCalledWith(
59+"/tmp/openclaw/demo",
60+"/home/test/.Trash/demo-123-secure/demo",
61+);
5262expect(cpSync).not.toHaveBeenCalled();
5363expect(rmSync).not.toHaveBeenCalled();
5464});
@@ -69,12 +79,12 @@ describe("browser trash", () => {
6979const mkdtempSync = mockTrashContainer("secure");
7080const renameSync = vi.spyOn(fs, "renameSync").mockImplementation(() => undefined);
718172-await expect(movePathToTrash("/tmp/demo")).resolves.toBe(
82+await expect(movePathToTrash("/tmp/openclaw/demo")).resolves.toBe(
7383"/real/home/test/.Trash/demo-123-secure/demo",
7484);
7585expect(mkdtempSync).toHaveBeenCalledWith("/real/home/test/.Trash/demo-123-");
7686expect(renameSync).toHaveBeenCalledWith(
77-"/tmp/demo",
87+"/tmp/openclaw/demo",
7888"/real/home/test/.Trash/demo-123-secure/demo",
7989);
8090});
@@ -101,7 +111,7 @@ describe("browser trash", () => {
101111isSymbolicLink: () => true,
102112} as fs.Stats);
103113104-await expect(movePathToTrash("/tmp/demo")).rejects.toThrow(
114+await expect(movePathToTrash("/tmp/openclaw/demo")).rejects.toThrow(
105115"Refusing to use non-directory/symlink trash directory",
106116);
107117});
@@ -117,15 +127,22 @@ describe("browser trash", () => {
117127const cpSync = vi.spyOn(fs, "cpSync").mockImplementation(() => undefined);
118128const rmSync = vi.spyOn(fs, "rmSync").mockImplementation(() => undefined);
119129120-await expect(movePathToTrash("/tmp/demo")).resolves.toBe(
130+await expect(movePathToTrash("/tmp/openclaw/demo")).resolves.toBe(
131+"/home/test/.Trash/demo-123-secure/demo",
132+);
133+expect(cpSync).toHaveBeenCalledWith(
134+"/tmp/openclaw/demo",
121135"/home/test/.Trash/demo-123-secure/demo",
136+{
137+recursive: true,
138+force: false,
139+errorOnExist: true,
140+},
122141);
123-expect(cpSync).toHaveBeenCalledWith("/tmp/demo", "/home/test/.Trash/demo-123-secure/demo", {
142+expect(rmSync).toHaveBeenCalledWith("/tmp/openclaw/demo", {
124143recursive: true,
125144force: false,
126-errorOnExist: true,
127145});
128-expect(rmSync).toHaveBeenCalledWith("/tmp/demo", { recursive: true, force: false });
129146});
130147131148it("retries copy fallback when the copy destination is created concurrently", async () => {
@@ -147,12 +164,12 @@ describe("browser trash", () => {
147164.mockImplementation(() => undefined);
148165const rmSync = vi.spyOn(fs, "rmSync").mockImplementation(() => undefined);
149166150-await expect(movePathToTrash("/tmp/demo")).resolves.toBe(
167+await expect(movePathToTrash("/tmp/openclaw/demo")).resolves.toBe(
151168"/home/test/.Trash/demo-123-second/demo",
152169);
153170expect(cpSync).toHaveBeenNthCalledWith(
1541711,
155-"/tmp/demo",
172+"/tmp/openclaw/demo",
156173"/home/test/.Trash/demo-123-first/demo",
157174{
158175recursive: true,
@@ -162,7 +179,7 @@ describe("browser trash", () => {
162179);
163180expect(cpSync).toHaveBeenNthCalledWith(
1641812,
165-"/tmp/demo",
182+"/tmp/openclaw/demo",
166183"/home/test/.Trash/demo-123-second/demo",
167184{
168185recursive: true,
@@ -186,17 +203,17 @@ describe("browser trash", () => {
186203})
187204.mockImplementation(() => undefined);
188205189-await expect(movePathToTrash("/tmp/demo")).resolves.toBe(
206+await expect(movePathToTrash("/tmp/openclaw/demo")).resolves.toBe(
190207"/home/test/.Trash/demo-123-second/demo",
191208);
192209expect(renameSync).toHaveBeenNthCalledWith(
1932101,
194-"/tmp/demo",
211+"/tmp/openclaw/demo",
195212"/home/test/.Trash/demo-123-first/demo",
196213);
197214expect(renameSync).toHaveBeenNthCalledWith(
1982152,
199-"/tmp/demo",
216+"/tmp/openclaw/demo",
200217"/home/test/.Trash/demo-123-second/demo",
201218);
202219expect(Date.now).toHaveBeenCalledTimes(1);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。