import type { App } from 'vuepress' import type { MarkdownEnv } from 'vuepress/markdown' import MarkdownIt from 'markdown-it' import { describe, expect, it } from 'vitest' import { embedLinkPlugin } from '../src/node/obsidian/embedLink.js' function createMockApp(pages: App['pages'] = []): App { return { pages, } as App } function createMockEnv(filePathRelative = 'test.md'): MarkdownEnv { return { filePathRelative, base: '/', links: [], importedFiles: [], } } function createMarkdownWithMockRules() { return MarkdownIt({ html: true }).use((md) => { md.block.ruler.before('code', 'import_code', () => false) md.renderer.rules.import_code = () => '' }) } describe('embedLinkPlugin', () => { const mockApp = createMockApp() const md = createMarkdownWithMockRules().use(embedLinkPlugin, mockApp) it('should render image embed', () => { const result = md.render('![[image.png]]') expect(result).toContain(' { const result = md.render('![[image.png|300]]') expect(result).toContain(' { const result = md.render('![[image.png|300x200]]') expect(result).toContain(' { const result = md.render('![[audio.mp3]]') expect(result).toContain(' { const result = md.render('![[video.mp4]]') expect(result).toContain(' { const result = md.render('![[document.pdf]]') expect(result).toContain(' { const result = md.render('![[document.pdf#page=1]]') expect(result).toContain('page="1"') }) it('should render external http link as anchor', () => { const result = md.render('![[https://example.com/file]]') expect(result).toContain(' { const env = createMockEnv('docs/page.md') const result = md.render('![[./image.png]]', env) expect(result).toContain(' { const result = md.render('![[/images/cover.jpg]]') expect(result).toContain(' { const result = md.render('![[file.unknown]]') expect(result).toContain(' { const result = md.render('![[image.png]') expect(result).toContain('![[image.png]') }) it('should render markdown file embed as link when page not found', () => { const result = md.render('![[nonexistent.md]]') expect(result).toContain(' { const result = md.render('![[nonexistent.md#heading1#heading2]]') expect(result).toContain(' { const result = md.render('![[]]') expect(result).toContain('![[]]') }) })