import { describe, expect, it } from "vitest"; import { extractRepoName, formatUserHomePath, getRepositoryDisplayName, selectPreferredBranch, truncateRepoPath, } from "./utils"; const TILDE_PROJECTS_APP = "~/Projects/App"; describe("formatUserHomePath", () => { it("replaces mac home path with tilde", () => { expect(formatUserHomePath("/Users/alex/Projects/App")).toBe(TILDE_PROJECTS_APP); }); it("replaces linux home path with tilde", () => { expect(formatUserHomePath("/home/alex/projects/app")).toBe("~/projects/app"); }); it("replaces windows home path with tilde", () => { expect(formatUserHomePath("C:\\Users\\alex\\Projects\\App")).toBe(TILDE_PROJECTS_APP); }); it("leaves non-home paths unchanged", () => { expect(formatUserHomePath("/var/tmp/project")).toBe("/var/tmp/project"); }); }); describe("truncateRepoPath", () => { it("returns the path when under the limit", () => { expect(truncateRepoPath(TILDE_PROJECTS_APP, 40)).toBe(TILDE_PROJECTS_APP); }); it("prefers last segments for long paths", () => { const path = "/Users/alex/Projects/Group/RepoName"; expect(truncateRepoPath(path, 22)).toBe("~/.../Group/RepoName"); }); it("falls back to last segment when space is tight", () => { const path = "/Users/alex/Projects/Group/RepoName"; expect(truncateRepoPath(path, 10)).toBe("~/.../Name"); }); }); describe("selectPreferredBranch", () => { it("selects local main first", () => { const branches = [ { name: "main", type: "local" }, { name: "main", type: "remote", remote: "origin" }, ]; expect(selectPreferredBranch(branches)).toBe("main"); }); it("prefers local master over origin/main", () => { const branches = [ { name: "master", type: "local" }, { name: "main", type: "remote", remote: "origin" }, ]; expect(selectPreferredBranch(branches)).toBe("master"); }); it("falls back to origin/main when no local main/master", () => { const branches = [ { name: "main", type: "remote", remote: "origin" }, { name: "develop", type: "local" }, ]; expect(selectPreferredBranch(branches)).toBe("origin/main"); }); it("falls back to origin/master", () => { const branches = [{ name: "master", type: "remote", remote: "origin" }]; expect(selectPreferredBranch(branches)).toBe("origin/master"); }); it("returns null when no preferred branches exist", () => { const branches = [{ name: "develop", type: "local" }]; expect(selectPreferredBranch(branches)).toBeNull(); }); }); describe("extractRepoName", () => { it("extracts org/name from ssh urls", () => { expect(extractRepoName("git@gitlab.com:org/repo.git")).toBe("org/repo"); }); it("extracts org/name from https urls", () => { expect(extractRepoName("https://bitbucket.org/org/repo")).toBe("org/repo"); }); it("returns null for local paths", () => { expect(extractRepoName("/Users/alex/Projects/App")).toBeNull(); }); }); describe("getRepositoryDisplayName", () => { it("returns a tilde path for local repositories", () => { expect(getRepositoryDisplayName("/Users/alex/Projects/App")).toBe(TILDE_PROJECTS_APP); }); it("returns org/name for remote repositories", () => { expect(getRepositoryDisplayName("https://github.com/org/repo.git")).toBe("org/repo"); }); });