mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
86 lines
2.6 KiB
TypeScript
86 lines
2.6 KiB
TypeScript
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('<VPLink')
|
|
|
|
const commentResult = md.render('%%comment%%')
|
|
expect(commentResult).not.toContain('comment')
|
|
})
|
|
|
|
it('should allow disabling specific plugins', () => {
|
|
const md = createMarkdownWithMockRules()
|
|
const mockApp = createMockApp()
|
|
obsidianPlugin(mockApp, md, { obsidian: { wikiLink: false } })
|
|
|
|
const wikiResult = md.render('[[Page]]')
|
|
expect(wikiResult).not.toContain('<VPLink')
|
|
expect(wikiResult).toContain('[[Page]]')
|
|
})
|
|
|
|
it('should disable all plugins when obsidian is false', () => {
|
|
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('<img')
|
|
})
|
|
|
|
it('should disable comment when explicitly set to false', () => {
|
|
const md = createMarkdownWithMockRules()
|
|
const mockApp = createMockApp()
|
|
obsidianPlugin(mockApp, md, { obsidian: { comment: false } })
|
|
|
|
const commentResult = md.render('%%comment%%')
|
|
expect(commentResult).toContain('%%comment%%')
|
|
})
|
|
})
|