import { describe, expect, it } from "vite-plus/test"; import { EnvironmentId, ProjectId, CommandId, SourceControlDiscoveryResult, } from "@t3tools/contracts"; import * as Option from "effect/Option"; import { buildAddProjectRemoteSourceReadiness, buildProjectCreateCommand, findExistingAddProject, getAddProjectInitialQuery, resolveAddProjectPath, sortAddProjectProviderSources, } from "./addProject.ts"; import type { EnvironmentScopedProjectShell } from "./shellTypes.ts"; describe("add project shared logic", () => { it("resolves initial browse paths from settings", () => { expect(getAddProjectInitialQuery("")).toBe("~/"); expect(getAddProjectInitialQuery("/work")).toBe("/work/"); expect(getAddProjectInitialQuery("C:\\work")).toBe("C:\\work\\"); }); it("rejects unsupported windows paths on non-windows environments", () => { expect( resolveAddProjectPath({ rawPath: "C:\\repo", platform: "MacIntel", currentProjectCwd: null, }), ).toEqual({ ok: false, error: "Windows-style paths are only supported on Windows environments.", }); }); it("resolves relative paths from the active project cwd", () => { expect( resolveAddProjectPath({ rawPath: "../next", platform: "Linux", currentProjectCwd: "/work/current", }), ).toEqual({ ok: true, path: "/work/next" }); }); it("marks authenticated source control providers as ready", () => { const discovery: SourceControlDiscoveryResult = { versionControlSystems: [], sourceControlProviders: [ { kind: "github", label: "GitHub", status: "available", installHint: "Install gh", version: Option.some("1.0.0"), detail: Option.none(), auth: { status: "authenticated", account: Option.some("octo"), host: Option.some("github.com"), detail: Option.none(), }, }, { kind: "gitlab", label: "GitLab", status: "available", installHint: "Install glab", version: Option.some("1.0.0"), detail: Option.none(), auth: { status: "unauthenticated", account: Option.none(), host: Option.none(), detail: Option.some("Run glab auth login"), }, }, ], }; const readiness = buildAddProjectRemoteSourceReadiness(discovery); expect(readiness.url.ready).toBe(true); expect(readiness.github.ready).toBe(true); expect(readiness.gitlab).toEqual({ ready: false, hint: "Run glab auth login" }); expect(sortAddProjectProviderSources(readiness)[0]).toBe("github"); }); it("finds existing projects by normalized path in the target environment", () => { const env = EnvironmentId.make("env"); const other = EnvironmentId.make("other"); const projects: EnvironmentScopedProjectShell[] = [ { environmentId: other, id: ProjectId.make("same-path-other-env"), title: "Other", workspaceRoot: "/repo", createdAt: "2026-01-01T00:00:00.000Z", updatedAt: "2026-01-01T00:00:00.000Z", repositoryIdentity: null, defaultModelSelection: null, scripts: [], }, { environmentId: env, id: ProjectId.make("project"), title: "Repo", workspaceRoot: "/repo/", createdAt: "2026-01-01T00:00:00.000Z", updatedAt: "2026-01-01T00:00:00.000Z", repositoryIdentity: null, defaultModelSelection: null, scripts: [], }, ]; expect(findExistingAddProject({ projects, environmentId: env, path: "/repo" })?.id).toBe( "project", ); }); it("builds the existing project.create command shape", () => { expect( buildProjectCreateCommand({ commandId: CommandId.make("command"), projectId: ProjectId.make("project"), workspaceRoot: "/work/repo", createdAt: "2026-01-01T00:00:00.000Z", }), ).toMatchObject({ type: "project.create", commandId: "command", projectId: "project", title: "repo", workspaceRoot: "/work/repo", createWorkspaceRootIfMissing: true, defaultModelSelection: { instanceId: "codex", model: "gpt-5.4", }, }); }); });