import { describe, expect, it } from 'vitest'; import { genericParser } from '../src/parsing/generic.js'; import { selectParser } from '../src/parsing/plugins.js'; describe('parser plugin selection', () => { it('selects Substack for Substack headers and generic otherwise', () => { expect(selectParser({ headers: { listId: 'thing.substack.com' }, html: '' }).name).toBe( 'substack' ); expect( selectParser({ headers: {}, html: 'Example' }).name ).toBe('generic'); }); }); describe('generic parser', () => { it('keeps descriptions local to each link when many links share a container', () => { const links = genericParser.parse({ html: `

CSS & HTML Tools

Cascade - CSS property icons. Fancy Frames - Decorative border generator. SPONSORED flexboxle - A daily puzzle game to master CSS Flexbox. Typescale AI - A typescale generator.
` }); expect(links.map((link) => link.description)).toEqual([ 'Cascade - CSS property icons.', 'Fancy Frames - Decorative border generator.', 'SPONSORED flexboxle - A daily puzzle game to master CSS Flexbox.', 'Typescale AI - A typescale generator.' ]); }); });