agent-ecosystem/test/renderer/components/chat/SessionContextPanel/buildDirectoryTree.test.ts
infiniti 9c438e7c84
fix: harden Windows frontend path handling
Harden Windows path handling and packaged app smoke checks.
2026-05-16 17:34:50 +03:00

47 lines
1.5 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { buildDirectoryTree } from '@renderer/components/chat/SessionContextPanel/DirectoryTree/buildDirectoryTree';
import type { ClaudeMdContextInjection } from '@renderer/types/contextInjection';
function injection(path: string): ClaudeMdContextInjection {
return {
id: path,
category: 'claude-md',
path,
source: 'directory',
displayName: 'CLAUDE.md',
isGlobal: false,
estimatedTokens: 12,
firstSeenInGroup: 'ai-0',
};
}
describe('buildDirectoryTree Windows paths', () => {
it('strips project root case-insensitively for Windows paths with mixed separators', () => {
const root = buildDirectoryTree(
[injection('c:\\Users\\Alice\\repo\\src\\CLAUDE.md')],
'C:/Users/Alice/Repo'
);
expect(root.children.has('c:')).toBe(false);
expect(root.children.get('src')?.children.get('CLAUDE.md')?.path).toBe(
'c:\\Users\\Alice\\repo\\src\\CLAUDE.md'
);
});
it('does not strip sibling paths that only share a prefix', () => {
const root = buildDirectoryTree(
[injection('C:\\Users\\Alice\\Repo2\\CLAUDE.md')],
'C:\\Users\\Alice\\Repo'
);
expect(root.children.get('C:')?.children.get('Users')).toBeDefined();
});
it('falls back to the injection path when project root is empty', () => {
const root = buildDirectoryTree([injection('C:\\Users\\Alice\\Repo\\CLAUDE.md')], '');
expect(root.children.get('C:')?.children.get('Users')).toBeDefined();
});
});