test(web): cover preview import recovery and color schemes

This commit is contained in:
Yudong
2026-09-09 19:49:56 +08:00
parent 4e0a405a9b
commit 516bfd5f30
2 changed files with 23 additions and 0 deletions
@@ -81,6 +81,18 @@ describe('Markdown fence previews', () => {
})
describe('static preview documents', () => {
it.each(['light', 'dark'])('uses the document %s color scheme for HTML previews', (scheme) => {
const previous = document.documentElement.style.colorScheme
try {
document.documentElement.style.colorScheme = scheme
const doc = renderHtml('<h1>Example</h1>', new AbortController().signal)
const parsed = new DOMParser().parseFromString(doc, 'text/html')
expect(parsed.documentElement.style.colorScheme).toBe(scheme)
} finally {
document.documentElement.style.colorScheme = previous
}
})
it('preserves HTML styling while removing scripts, navigation, and nested documents', () => {
const doc = renderHtml(`<!doctype html><html><head><style>h1 { color: green }</style>
<meta http-equiv="refresh" content="0;url=https://example.com"><base href="https://example.com"></head>
@@ -13,6 +13,17 @@ beforeEach(() => {
afterEach(() => { vi.doUnmock('mermaid') })
describe('Mermaid runtime', () => {
it('allows another attempt after the runtime import fails', async () => {
vi.doMock('mermaid', () => { throw new Error('runtime unavailable') })
const { renderMermaid } = await import('../src/markdown/mermaid.ts')
await expect(renderMermaid('first', new AbortController().signal)).rejects.toThrow()
expect(initialize).not.toHaveBeenCalled()
vi.doMock('mermaid', () => ({ default: { initialize, render: renderDiagram } }))
renderDiagram.mockResolvedValue({ svg: '<svg/>' })
await expect(renderMermaid('retry', new AbortController().signal)).resolves.toContain('data:image/svg+xml')
expect(renderDiagram).toHaveBeenCalledOnce()
})
it('accepts native configuration without weakening preview restrictions', async () => {
const { renderMermaid } = await import('../src/markdown/mermaid.ts')
renderDiagram.mockResolvedValue({ svg: '<svg/>' })