import { describe, expect, it } from 'vitest'; import { parseMarkdown } from '../src/lib/markdown'; import { isTemplatedUrl, parseTemplateParameters, resolveTemplateUrl } from '../src/lib/templates'; describe('parseMarkdown', () => { it('renders headings, paragraphs, and links', () => { const html = parseMarkdown('# Title\n\nA paragraph with [a link](https://example.com).'); expect(html).toContain('
x');
expect(html).toContain('');
expect(html).toContain('var x = 1');
});
it('renders lists, bold, and italics', () => {
const html = parseMarkdown('- **bold** and *italic*\n- two');
expect(html).toContain('| a | '); expect(html).toContain('1 | '); }); }); describe('client template helpers', () => { it('detects templated urls', () => { expect(isTemplatedUrl('https://example.com/?q={query}')).toBe(true); expect(isTemplatedUrl('https://example.com/static')).toBe(false); expect(isTemplatedUrl(null)).toBe(false); }); it('parses parameter names and defaults', () => { const params = parseTemplateParameters('https://example.com/{region}/?q={query,default="go"}'); expect(params).toHaveLength(2); expect(params[0].name).toBe('region'); expect(params[0].defaultValue).toBeUndefined(); expect(params[1].name).toBe('query'); expect(params[1].defaultValue).toBe('go'); }); it('resolves placeholders with provided values, falling back to defaults', () => { const url = resolveTemplateUrl('https://example.com/{region}/?q={query,default="go"}', { region: 'au', }); expect(url).toBe('https://example.com/au/?q=go'); }); it('encodes parameter values', () => { const url = resolveTemplateUrl('https://example.com/?q={query}', { query: 'go links & more' }); expect(url).toBe('https://example.com/?q=go%20links%20%26%20more'); }); });
|---|