import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { fmtCwdBranch, shortCwd } from '../domain/paths.js' describe('shortCwd', () => { const origHome = process.env.HOME beforeEach(() => { process.env.HOME = '/Users/bb' }) afterEach(() => { process.env.HOME = origHome }) it('collapses HOME to ~', () => { expect(shortCwd('/Users/bb/proj/repo')).toBe('~/proj/repo') }) it('leaves non-HOME paths alone', () => { expect(shortCwd('/tmp/work')).toBe('/tmp/work') }) it('truncates long paths from the left with ellipsis', () => { const out = shortCwd('/var/long/deeply/nested/workspace/here', 10) expect(out.startsWith('…')).toBe(true) expect(out.length).toBe(10) expect('/var/long/deeply/nested/workspace/here'.endsWith(out.slice(1))).toBe(true) }) it('keeps paths shorter than max intact', () => { expect(shortCwd('/a/b', 10)).toBe('/a/b') }) }) describe('fmtCwdBranch', () => { const origHome = process.env.HOME beforeEach(() => { process.env.HOME = '/Users/bb' }) afterEach(() => { process.env.HOME = origHome }) it('returns bare cwd when branch is null', () => { expect(fmtCwdBranch('/Users/bb/proj', null)).toBe('~/proj') }) it('returns bare cwd when branch is empty', () => { expect(fmtCwdBranch('/Users/bb/proj', '')).toBe('~/proj') }) it('appends branch in parens', () => { expect(fmtCwdBranch('/Users/bb/proj', 'main')).toBe('~/proj (main)') }) it('truncates the path to keep the branch tag readable', () => { const out = fmtCwdBranch('/Users/bb/very/deeply/nested/project/folder', 'feature-branch', 30) expect(out).toMatch(/ \(feature-branch\)$/) expect(out.length).toBeLessThanOrEqual(30) }) it('truncates very long branch names from the right', () => { const out = fmtCwdBranch('/Users/bb/p', 'a-very-long-feature-branch-name') expect(out).toMatch(/^~\/p \(…/) expect(out).toContain(')') }) })