112 lines
3.6 KiB
TypeScript
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);
|
|
});
|
|
});
|