67 lines
2 KiB
TypeScript
67 lines
2 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
||
|
||
import {
|
||
buildSyntheticRepositoryGroup,
|
||
encodeProjectPathForNavigation,
|
||
findMatchingWorktree,
|
||
} from '@features/recent-projects/renderer/utils/navigation';
|
||
|
||
import type { RepositoryGroup } from '@renderer/types/data';
|
||
|
||
describe('recent-projects navigation utils', () => {
|
||
it('finds a matching worktree across normalized candidate paths', () => {
|
||
const groups: RepositoryGroup[] = [
|
||
{
|
||
id: 'repo-alpha',
|
||
identity: null,
|
||
name: 'alpha',
|
||
mostRecentSession: 1_000,
|
||
totalSessions: 2,
|
||
worktrees: [
|
||
{
|
||
id: 'wt-alpha',
|
||
path: '/Users/test/Alpha',
|
||
name: 'alpha',
|
||
isMainWorktree: true,
|
||
source: 'unknown',
|
||
sessions: [],
|
||
totalSessions: 2,
|
||
createdAt: 1_000,
|
||
},
|
||
],
|
||
},
|
||
];
|
||
|
||
expect(findMatchingWorktree(groups, ['/users/test/alpha/', '/users/test/other'])).toEqual({
|
||
repoId: 'repo-alpha',
|
||
worktreeId: 'wt-alpha',
|
||
});
|
||
});
|
||
|
||
it('builds a synthetic repository group with encoded repo and worktree ids', () => {
|
||
vi.useFakeTimers();
|
||
vi.setSystemTime(new Date('2026-04-14T12:00:00Z'));
|
||
|
||
const group = buildSyntheticRepositoryGroup('/Users/test/dev/my project');
|
||
|
||
expect(group.id).toBe('-Users-test-dev-my project');
|
||
expect(group.name).toBe('my project');
|
||
expect(group.worktrees).toHaveLength(1);
|
||
expect(group.worktrees[0]).toMatchObject({
|
||
id: '-Users-test-dev-my project',
|
||
path: '/Users/test/dev/my project',
|
||
name: 'my project',
|
||
isMainWorktree: true,
|
||
totalSessions: 0,
|
||
});
|
||
expect(group.worktrees[0].createdAt).toBe(Date.parse('2026-04-14T12:00:00Z'));
|
||
|
||
vi.useRealTimers();
|
||
});
|
||
|
||
it('encodes Windows custom project paths with the same drive format as session ids', () => {
|
||
expect(encodeProjectPathForNavigation('C:\\Users\\User\\PROJECT_IT\\сlaude_team')).toBe(
|
||
'C--Users-User-PROJECT_IT-сlaude_team'
|
||
);
|
||
});
|
||
});
|