Files
2026-09-02 13:50:03 +00:00

112 lines
3.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
canChooseCheckoutBranchForSource,
getWorkspaceSourceCapabilities,
hasCloneableSavedRepository,
} from "./executor-capabilities";
describe("getWorkspaceSourceCapabilities", () => {
it.each(["local", "local_pc", "worktree"] as const)("offers folders for %s", (executorType) => {
expect(getWorkspaceSourceCapabilities(executorType).canAddFolders).toBe(true);
});
it.each(["local_docker", "remote_docker", "ssh", "sprites", "k8s"] as const)(
"hides folders for %s",
(executorType) => {
expect(getWorkspaceSourceCapabilities(executorType).canAddFolders).toBe(false);
},
);
it.each([
"local",
"local_pc",
"worktree",
"local_docker",
"remote_docker",
"ssh",
"sprites",
"remote_vps",
"k8s",
] as const)("marks executor capabilities as known once resolved for %s", (executorType) => {
expect(getWorkspaceSourceCapabilities(executorType).executorCapabilitiesKnown).toBe(true);
});
it.each([null, undefined])(
"marks executor capabilities as unknown, not unsupported, for %s",
(executorType) => {
expect(getWorkspaceSourceCapabilities(executorType)).toMatchObject({
canAddFolders: false,
executorCapabilitiesKnown: false,
});
},
);
it("keeps an unrecognized executor type unresolved", () => {
expect(getWorkspaceSourceCapabilities("future_executor")).toMatchObject({
canAddFolders: false,
executorCapabilitiesKnown: false,
});
});
it.each(["local", "local_pc"] as const)(
"uses the live checkout and does not offer a checkout branch for %s",
(executorType) => {
expect(getWorkspaceSourceCapabilities(executorType)).toMatchObject({
canChooseCheckoutBranch: false,
requiresCloneableLocalRepository: false,
});
},
);
it.each(["worktree", "local_docker", "remote_docker", "ssh", "sprites", "k8s"] as const)(
"offers a checkout branch for owned clones on %s",
(executorType) => {
expect(getWorkspaceSourceCapabilities(executorType)).toMatchObject({
canChooseCheckoutBranch: true,
});
},
);
it.each(["local_docker", "remote_docker", "ssh", "sprites", "k8s"] as const)(
"requires a cloneable origin for a selected local repository on %s",
(executorType) => {
expect(getWorkspaceSourceCapabilities(executorType)).toMatchObject({
requiresCloneableLocalRepository: true,
});
},
);
it.each([
["a valid remote URL", { remote_url: "https://git.example.com/acme/api.git" }, true],
[
"a supported provider owner and name",
{ provider: "github", provider_owner: "acme", provider_name: "api" },
true,
],
[
"a future provider with an explicit host, owner, and name",
{
provider: "example-vcs",
provider_host: "code.example.test",
provider_owner: "acme",
provider_name: "api",
},
true,
],
[
"an unknown provider without an explicit host",
{ provider: "example-vcs", provider_owner: "acme", provider_name: "api" },
false,
],
["a provider ID without owner and name", { provider: "github", provider_repo_id: "42" }, false],
["no remote locator", {}, false],
])("recognizes %s as cloneable: %s", (_, repository, expected) => {
expect(hasCloneableSavedRepository(repository)).toBe(expected);
});
it("offers checkout selection for local Git sources in owned runtimes", () => {
expect(canChooseCheckoutBranchForSource("local_repository", "worktree")).toBe(true);
expect(canChooseCheckoutBranchForSource("local_repository", "local_pc")).toBe(false);
});
});