import { render } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import type { ReactNode } from 'react'; import type { GraphNode } from 'gitnexus-shared'; import { CodeReferencesPanel } from '../../src/components/CodeReferencesPanel'; import { readFile } from '../../src/services/backend-client'; const fileNode: GraphNode = { id: 'File:src/foo.ts', label: 'File', properties: { name: 'foo.ts', filePath: 'src/foo.ts' }, }; // Mutable mock state: the useAppState factory closes over this object so each // test can reassign fields (e.g. currentRepo) before rendering. const appState = { graph: null, selectedNode: fileNode, codeReferences: [], removeCodeReference: vi.fn(), clearCodeReferences: vi.fn(), setSelectedNode: vi.fn(), codeReferenceFocus: null, projectName: 'reels', currentRepo: undefined as string | undefined, }; vi.mock('../../src/hooks/useAppState', () => ({ useAppState: () => appState, })); vi.mock('../../src/services/backend-client', () => ({ readFile: vi.fn(), })); vi.mock('react-syntax-highlighter', () => ({ Prism: ({ children }: { children?: ReactNode }) =>
{children},
}));
vi.mock('react-syntax-highlighter/dist/esm/styles/prism', () => ({
vscDarkPlus: {},
}));
vi.mock('react-i18next', () => ({
useTranslation: () => ({
t: (key: string) => key,
}),
}));
describe('CodeReferencesPanel repo identity (#2420)', () => {
beforeEach(() => {
vi.clearAllMocks();
vi.mocked(readFile).mockResolvedValue({ content: 'const a = 1;', totalLines: 1 });
});
it('reads the selected file from the active repo path, not the display name', () => {
appState.currentRepo = '/ws/b/reels';
appState.projectName = 'reels';
render(