import type { App } from 'vuepress' import MarkdownIt from 'markdown-it' import { describe, expect, it, vi } from 'vitest' import { obsidianPlugin } from '../src/node/obsidian/index.js' vi.mock('vuepress/utils', async () => { const actual = await vi.importActual('vuepress/utils') return { ...actual, tinyglobby: { globSync: vi.fn(() => []), }, } }) function createMockApp(pages: App['pages'] = []): App { return { pages, options: { pagePatterns: ['**/*.md'], }, dir: { source: () => '/source', }, } as unknown as App } function createMarkdownWithMockRules() { return MarkdownIt({ html: true }).use((md) => { md.block.ruler.before('code', 'import_code', () => false) md.renderer.rules.import_code = () => '' }) } describe('obsidianPlugin', () => { it('should enable all plugins by default', () => { const md = createMarkdownWithMockRules() const mockApp = createMockApp([{ path: '/', filePathRelative: 'README.md', title: 'Home' }] as unknown as App['pages']) obsidianPlugin(mockApp, md, {}) // Wiki link should not work since findFirstPage returns undefined when pagePaths is empty const wikiResult = md.render('[[Home]]') expect(wikiResult).not.toContain(' { const md = createMarkdownWithMockRules() const mockApp = createMockApp() obsidianPlugin(mockApp, md, { obsidian: { wikiLink: false } }) const wikiResult = md.render('[[Page]]') expect(wikiResult).not.toContain(' { const md = createMarkdownWithMockRules() const mockApp = createMockApp() obsidianPlugin(mockApp, md, { obsidian: false }) const result = md.render('![[image.png]]') expect(result).toContain('![[image.png]]') }) it('should disable embedLink when explicitly set to false', () => { const md = createMarkdownWithMockRules() const mockApp = createMockApp() obsidianPlugin(mockApp, md, { obsidian: { embedLink: false } }) const result = md.render('![[image.png]]') expect(result).not.toContain(' { const md = createMarkdownWithMockRules() const mockApp = createMockApp() obsidianPlugin(mockApp, md, { obsidian: { comment: false } }) const commentResult = md.render('%%comment%%') expect(commentResult).toContain('%%comment%%') }) })