Files
kandev/apps/web/components/workspace-source-picker/executor-capabilities.test.ts
T
Carlos Florêncio bc218dfbbe feat: add workspace sources from files panel (#1900)
* feat: add workspace sources from files panel

* fix: preserve worktree identity during recovery

* feat: unify workspace source actions

* fix: validate recovered workspace repositories

* fix: harden workspace source filesystem boundaries

* test: split workspace repository chip coverage

* fix: restrict repository rescan recovery paths

* fix: stabilize workspace source CI checks

* test: canonicalize workspace source paths

* test: align workspace source container paths

* fix: populate direct workspace repository names

* test: preserve git fixture rewrites across restarts

* test: isolate backend git fixture config

* fix: resume remote workspace executions before creation

* fix: preserve ssh agent identity during resume

* fix: preserve SSH workspace across backend restart

* fix: simplify workspace actions trigger

* fix: refine add workspace repositories UX

* docs: narrow workspace source UX updates

* fix: avoid phantom turn on session resume

* test(web): normalize workspace source request headers

* feat(web): streamline workspace source picker

* docs: remove trailing spaces from workspace source plan

* fix: prevent resume status from creating phantom turns

* fix(web): stabilize workspace source attachment

* refactor(web): extract workspace source store contract

* fix: avoid phantom turns on idle agent resume

* fix: address backend static analysis findings

* fix: preserve agentctl readiness status value

* fix: preserve resume messages without active turns

* fix: resume agents from promoted workspace root

* chore: merge origin/main into feature/add-new-repo-folder-d97

* feat(web): explain workspace source consequences

* test(websocket): count session activity subscription
2026-07-25 21:29:53 +01:00

66 lines
2.3 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"] as const)(
"hides folders for %s",
(executorType) => {
expect(getWorkspaceSourceCapabilities(executorType).canAddFolders).toBe(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"] 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"] 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 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);
});
});