Files
openwork/apps/server/src/workspaces.test.ts
T

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();
});
});