// @ts-check
import { describe, expect, it } from 'vitest'
import { mdxBodyToMarkdown } from '../mdxToMarkdown.mjs'
describe('mdxBodyToMarkdown', () => {
it('preserves plain markdown unchanged', async () => {
const out = await mdxBodyToMarkdown('# Title\n\nA **bold** word.')
expect(out).toContain('# Title')
expect(out).toContain('**bold**')
})
it('preserves code fences containing JSX literally', async () => {
const src = [
'```tsx',
'function App() {',
' return hi
',
'}',
'```',
].join('\n')
const out = await mdxBodyToMarkdown(src)
expect(out).toContain('hi
')
expect(out).toContain('```tsx')
})
it('rewrites
to a markdown image', async () => {
const out = await mdxBodyToMarkdown('
')
expect(out.trim()).toBe('')
})
it('rewrites
without alt', async () => {
const out = await mdxBodyToMarkdown('
')
expect(out.trim()).toBe('')
})
it('rewrites to a labeled blockquote', async () => {
const out = await mdxBodyToMarkdown('\n\nHeads up.\n\n')
expect(out).toMatch(/^>\s+\*\*NOTE\*\*/m)
expect(out).toContain('Heads up.')
})
it('rewrites with caption to a blockquote with em-dash attribution', async () => {
const out = await mdxBodyToMarkdown(
'\n\nIt was great.\n\n
'
)
expect(out).toContain('> It was great.')
expect(out).toContain('*— Jane Doe, CEO*')
})
it('rewrites to a markdown link', async () => {
const out = await mdxBodyToMarkdown('click')
expect(out.trim()).toBe('[click](/x)')
})
it('rewrites and to bold', async () => {
const out = await mdxBodyToMarkdown('foo bar')
expect(out).toContain('**foo**')
expect(out).toContain('**bar**')
})
it('drops entirely', async () => {
const out = await mdxBodyToMarkdown(' rest')
expect(out).not.toContain('Avatar')
expect(out).toContain('rest')
})
it('flattens unknown inline JSX to text, preserving inner content', async () => {
const out = await mdxBodyToMarkdown('Some text with kept inline.')
expect(out).toContain('kept')
expect(out).toContain('Some text with')
expect(out).toContain('inline.')
expect(out).not.toContain(' {
const out = await mdxBodyToMarkdown('hello {/* internal note */} world')
expect(out).toContain('hello')
expect(out).toContain('world')
expect(out).not.toContain('internal')
})
it('strips orphan mdxjsEsm imports at the top level', async () => {
const src = "import X from 'y'\n\n# Title"
const out = await mdxBodyToMarkdown(src)
expect(out).toContain('# Title')
expect(out).not.toContain('import')
})
})