import { describe, test, expect } from 'vitest'; import { buildSlugIndex, resolveTarget, type FileRef } from '../src/resolver.js'; const refs: FileRef[] = [ { slug: 'clock-modulation', dir: 'concepts' }, { slug: 'euclidean-rhythms', dir: 'concepts' }, { slug: 'clock', dir: 'concepts' }, { slug: 'clock', dir: 'entities' }, ]; describe('resolveTarget', () => { const index = buildSlugIndex(refs); test('resolves an exact slug to its node id', () => { expect(resolveTarget('euclidean-rhythms', 'concepts', index)).toEqual({ node: 'euclidean-rhythms', collision: false, }); }); test('matches case-insensitively, normalizing node id to lowercase', () => { expect(resolveTarget('Clock-Modulation', 'concepts', index)).toEqual({ node: 'clock-modulation', collision: false, }); }); test('returns null for an unresolved (dangling) target', () => { expect(resolveTarget('', 'concepts', index)).toBeNull(); expect(resolveTarget('does-not-exist', 'concepts', index)).toBeNull(); }); test('on basename collision prefers same-dir and flags collision', () => { expect(resolveTarget('clock', 'entities', index)).toEqual({ node: 'clock', collision: true, }); }); test('on collision with no same-dir match still resolves and flags collision', () => { expect(resolveTarget('clock', 'packages', index)).toEqual({ node: 'clock', collision: true, }); }); });