mirror of
https://github.com/wahyd4/heygo.git
synced 2026-08-08 21:05:48 +10:00
64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
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('<h1>Title</h1>');
|
|
expect(html).toContain('<a href="https://example.com"');
|
|
expect(html).toContain('a link</a>');
|
|
});
|
|
|
|
it('renders fenced code blocks and inline code', () => {
|
|
const html = parseMarkdown('Use `x` to do things.\n\n```js\nvar x = 1\n```');
|
|
expect(html).toContain('<code>x</code>');
|
|
expect(html).toContain('<pre>');
|
|
expect(html).toContain('var x = 1');
|
|
});
|
|
|
|
it('renders lists, bold, and italics', () => {
|
|
const html = parseMarkdown('- **bold** and *italic*\n- two');
|
|
expect(html).toContain('<ul>');
|
|
expect(html).toContain('<strong>bold</strong>');
|
|
expect(html).toContain('<em>italic</em>');
|
|
expect(html).toContain('<li>two</li>');
|
|
});
|
|
|
|
it('renders tables', () => {
|
|
const html = parseMarkdown('| a | b |\n|---|---|\n| 1 | 2 |');
|
|
expect(html).toContain('<table>');
|
|
expect(html).toContain('<th>a</th>');
|
|
expect(html).toContain('<td>1</td>');
|
|
});
|
|
});
|
|
|
|
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');
|
|
});
|
|
});
|