68 lines
2.7 KiB
TypeScript
68 lines
2.7 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import { findManagedEngineWorkspace } from "./workspaces.js";
|
|
import type { WorkspaceInfo } from "./types.js";
|
|
|
|
function ws(fields: {
|
|
id?: string;
|
|
name?: string;
|
|
path: string;
|
|
preset?: string;
|
|
workspaceType: WorkspaceInfo["workspaceType"];
|
|
}): WorkspaceInfo {
|
|
return {
|
|
id: fields.id ?? "ws_test",
|
|
name: fields.name ?? "Workspace",
|
|
path: fields.path,
|
|
preset: fields.preset ?? (fields.workspaceType === "remote" ? "remote" : "starter"),
|
|
workspaceType: fields.workspaceType,
|
|
};
|
|
}
|
|
|
|
describe("findManagedEngineWorkspace", () => {
|
|
test("selects the local workspace in a typical local + remote config", () => {
|
|
// Mirrors the real desktop config: a local workspace followed by an OpenWork
|
|
// remote worker that has no local path.
|
|
const workspaces = [
|
|
ws({ id: "ws_local", path: "/home/user/cloud/work", workspaceType: "local" }),
|
|
ws({ id: "rem_ws", path: "", workspaceType: "remote" }),
|
|
];
|
|
expect(findManagedEngineWorkspace(workspaces)?.id).toBe("ws_local");
|
|
});
|
|
|
|
test("selects the local workspace even when a path-less remote is first", () => {
|
|
// A freshly added remote worker is prepended, putting it at index 0. The
|
|
// engine must still boot in the local workspace instead of skipping startup.
|
|
const workspaces = [
|
|
ws({ id: "rem_ws", path: "", workspaceType: "remote" }),
|
|
ws({ id: "ws_local", path: "/home/user/cloud/work", workspaceType: "local" }),
|
|
];
|
|
expect(findManagedEngineWorkspace(workspaces)?.id).toBe("ws_local");
|
|
});
|
|
|
|
test("returns undefined for a remote-only config", () => {
|
|
const workspaces = [ws({ id: "rem_ws", path: "", workspaceType: "remote" })];
|
|
expect(findManagedEngineWorkspace(workspaces)).toBeUndefined();
|
|
});
|
|
|
|
test("ignores a remote workspace that carries a non-empty directory path", () => {
|
|
// OpenCode remotes can store a `directory`, giving the remote a non-empty
|
|
// path; it still runs on its host, so it must not be chosen as the local cwd.
|
|
const workspaces = [ws({ id: "rem_dir", path: "/remote/dir", workspaceType: "remote" })];
|
|
expect(findManagedEngineWorkspace(workspaces)).toBeUndefined();
|
|
});
|
|
|
|
test("skips path-less entries and returns the first local workspace with a path", () => {
|
|
const workspaces = [
|
|
ws({ id: "rem_ws", path: "", workspaceType: "remote" }),
|
|
ws({ id: "ws_blank", path: " ", workspaceType: "local" }),
|
|
ws({ id: "ws_local", path: "/home/user/work", workspaceType: "local" }),
|
|
];
|
|
expect(findManagedEngineWorkspace(workspaces)?.id).toBe("ws_local");
|
|
});
|
|
|
|
test("returns undefined for an empty workspace list", () => {
|
|
expect(findManagedEngineWorkspace([])).toBeUndefined();
|
|
});
|
|
});
|