import { describe, expect, it } from 'vitest';
import { createBibFieldEdit, parseBibTeX } from '../index';

describe('BibTeX parsing', () => {
  it('keeps exact field ranges for targeted edits', () => {
    const source = '@article{smith2026,\n  title = {Old {Nested} Title},\n  year = "2026"\n}\n';
    const parsed = parseBibTeX(source);
    const entry = parsed.entries[0]!;
    expect(entry.key).toBe('smith2026');
    expect(entry.fields.map((field) => field.name)).toEqual(['title', 'year']);
    const edit = createBibFieldEdit(source, entry, 'title', 'New Title');
    expect(source.slice(0, edit.from) + edit.text + source.slice(edit.to)).toContain('title = {New Title}');
  });

  it('reports duplicate keys without discarding either entry', () => {
    const source = '@book{x, title={One}}\n@article{x, title={Two}}';
    const parsed = parseBibTeX(source);
    expect(parsed.entries).toHaveLength(2);
    expect(parsed.diagnostics.some((item) => item.kind === 'duplicate-key')).toBe(true);
  });
});
