/** * @file Tests that a session finds its workspace and its `claude --worktree` * name by folder on Windows paths (`D:\…`) as well as POSIX ones — the * transcript page's Resume/Fork/Open pane hid on Windows when they matched * on "/" only. * @author Nguyễn Ngọc Trí Vĩ */ import { describe, it, expect } from "vitest"; import type { Lane, Session } from "../../../lib/types"; import { owningLane } from "../SessionResumeButton"; import { sessionWorktreeName } from "../WorkspaceSessionList"; const lane = (id: number, cwd: string) => ({ id, cwd, tool: "claude" }) as Lane; describe("session paths", () => { it("finds the deepest owning workspace with either separator", () => { const lanes = [lane(1, "D:\\Project"), lane(2, "D:\\Project\\Hobby\\"), lane(3, "/home/u/app")]; expect(owningLane("D:\\Project\\Hobby\\tri-vi-portfolio", "claude", lanes)?.id).toBe(2); expect(owningLane("D:\\Project\\Hobby", "claude", lanes)?.id).toBe(2); expect(owningLane("D:\\ProjectX", "claude", lanes)).toBeNull(); expect(owningLane("/home/u/app/src", "claude", lanes)?.id).toBe(3); }); it("reads a worktree name from a Windows or POSIX session folder", () => { const at = (cwd: string) => ({ cwd }) as Session; expect( sessionWorktreeName(lane(1, "D:\\repo"), at("D:\\repo\\.claude\\worktrees\\fix-a")) ).toBe("fix-a"); expect(sessionWorktreeName(lane(1, "/r"), at("/r/.claude/worktrees/fix-b/"))).toBe("fix-b"); expect(sessionWorktreeName(lane(1, "D:\\repo"), at("D:\\repo\\"))).toBeNull(); }); });