Files
Ncurator/tests/case/unit/workbench/markdown-image-path.test.ts

50 lines
2.0 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
dirnamePath,
joinFsPath,
resolveMarkdownImageLocalPath
} from '../../../../src/shared/markdownImagePath'
import { resolveMarkdownEditorLinkTarget } from '../../../../src/shared/markdownEditorLink'
describe('markdownImagePath', () => {
it('resolves relative paths against the markdown file directory', () => {
expect(
resolveMarkdownImageLocalPath('/Users/test/docs/note.md', './media/cover.png')
).toBe('/Users/test/docs/media/cover.png')
expect(resolveMarkdownImageLocalPath('/Users/test/docs/note.md', '../assets/a.jpg')).toBe(
'/Users/test/assets/a.jpg'
)
})
it('keeps absolute and file:// local paths', () => {
expect(resolveMarkdownImageLocalPath('/tmp/a.md', '/tmp/pic.png')).toBe('/tmp/pic.png')
expect(resolveMarkdownImageLocalPath('/tmp/a.md', 'file:///tmp/pic.png')).toBe('/tmp/pic.png')
})
it('does not treat remote or in-memory urls as local paths', () => {
expect(resolveMarkdownImageLocalPath('/tmp/a.md', 'https://cdn.example/a.png')).toBeNull()
expect(resolveMarkdownImageLocalPath('/tmp/a.md', 'http://cdn.example/a.png')).toBeNull()
expect(resolveMarkdownImageLocalPath('/tmp/a.md', 'data:image/png;base64,xx')).toBeNull()
expect(resolveMarkdownImageLocalPath('/tmp/a.md', 'blob:https://x/1')).toBeNull()
})
it('normalizes dirname and join helpers', () => {
expect(dirnamePath('/Users/test/docs/note.md')).toBe('/Users/test/docs')
expect(joinFsPath('/Users/test/docs', 'media/./x.png')).toBe('/Users/test/docs/media/x.png')
})
})
describe('markdownEditorLink', () => {
it('classifies https as web and relative paths as local files', () => {
expect(resolveMarkdownEditorLinkTarget('/tmp/a.md', 'https://example.com/x')).toEqual({
kind: 'web',
url: 'https://example.com/x'
})
expect(resolveMarkdownEditorLinkTarget('/tmp/docs/a.md', './notes.txt')).toEqual({
kind: 'file',
path: '/tmp/docs/notes.txt'
})
})
})