146 lines · 4.3 KB · TypeScript
RawDownload
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",      },    });  });});