Files
orca/tests/e2e/markdown-fallback-preview.spec.ts

57 lines
2.1 KiB
TypeScript

import { readFileSync } from 'node:fs'
import { test, expect } from './helpers/orca-app'
import { waitForActiveWorktree, waitForSessionReady } from './helpers/store'
import {
cleanupMarkdownFixture,
createMarkdownFixture,
getActiveWorktreeContext,
openMarkdownFixture
} from './helpers/markdown-editor-fixture'
const SOURCE = '# Saved title\n\n[Reference][id]\n\n[id]: https://example.com\n'
test('fallback preview shows the unsaved draft', async ({ orcaPage }, testInfo) => {
await waitForSessionReady(orcaPage)
await waitForActiveWorktree(orcaPage)
const context = await getActiveWorktreeContext(orcaPage)
const file = await createMarkdownFixture(
context,
'markdown-preview',
'draft',
testInfo.workerIndex,
SOURCE
)
try {
await openMarkdownFixture(orcaPage, context, file)
const openPreview = orcaPage.getByRole('button', { name: 'Open preview', exact: true })
await expect(openPreview).toBeVisible()
const monaco = orcaPage.locator('.monaco-editor').first()
await monaco.click()
await orcaPage.keyboard.press('ControlOrMeta+Home')
await orcaPage.keyboard.press('ControlOrMeta+A')
await orcaPage.keyboard.insertText(SOURCE.replace('Saved title', 'Unsaved draft'))
await expect(monaco).toContainText('Unsaved draft')
await expect(openPreview).toBeVisible()
expect(readFileSync(file, 'utf8')).toBe(SOURCE)
await testInfo.attach('before-preview', {
body: await orcaPage.screenshot({ path: testInfo.outputPath('before-preview.png') }),
contentType: 'image/png'
})
await openPreview.click()
await expect(
orcaPage.getByRole('heading', { name: 'Unsaved draft', exact: true })
).toBeVisible()
await expect(orcaPage.getByRole('link', { name: 'Reference', exact: true })).toHaveAttribute(
'href',
'https://example.com'
)
expect(readFileSync(file, 'utf8')).toBe(SOURCE)
await testInfo.attach('after-preview', {
body: await orcaPage.screenshot({ path: testInfo.outputPath('after-preview.png') }),
contentType: 'image/png'
})
} finally {
await cleanupMarkdownFixture(file)
}
})