Files
tolaria/tests/smoke/editor-find-replace.spec.ts
2026-04-27 10:57:58 +02:00

63 lines
2.3 KiB
TypeScript

import { expect, test, type Page } from '@playwright/test'
import {
createFixtureVaultCopy,
openFixtureVaultDesktopHarness,
removeFixtureVaultCopy,
} from '../helpers/fixtureVault'
const FIND_SHORTCUT = process.platform === 'darwin' ? 'Meta+F' : 'Control+F'
let tempVaultDir: string
async function getRawEditorDoc(page: Page): Promise<string> {
return page.evaluate(() => {
const host = document.querySelector('[data-testid="raw-editor-codemirror"]') as (HTMLElement & {
__cmView?: { state: { doc: { toString(): string } } }
}) | null
if (!host?.__cmView) {
throw new Error('Raw editor CodeMirror view is not mounted')
}
return host.__cmView.state.doc.toString()
})
}
test.describe('editor find and replace', () => {
test.beforeEach(async ({ page }, testInfo) => {
testInfo.setTimeout(60_000)
tempVaultDir = createFixtureVaultCopy()
await openFixtureVaultDesktopHarness(page, tempVaultDir)
await page.setViewportSize({ width: 1600, height: 900 })
})
test.afterEach(() => {
removeFixtureVaultCopy(tempVaultDir)
})
test('Cmd+F opens current-note find and supports regex replacement @smoke', async ({ page }) => {
await page.getByText('Note B', { exact: true }).first().click()
await page.locator('.bn-editor').click()
await page.keyboard.press(FIND_SHORTCUT)
await expect(page.getByTestId('raw-editor-codemirror')).toBeVisible({ timeout: 5_000 })
await expect(page.getByTestId('raw-editor-find-input')).toBeFocused()
await page.getByRole('button', { name: 'Show replace' }).click()
await page.getByRole('button', { name: 'Use regular expression' }).click()
const findInput = page.getByTestId('raw-editor-find-input')
await findInput.pressSequentially('Note ([BC])')
await expect(findInput).toBeFocused()
await expect(findInput).toHaveValue('Note ([BC])')
await expect(page.getByTestId('raw-editor-find-count')).toContainText('1 / 3')
await page.getByTestId('raw-editor-replace-input').fill('Entry $1')
await page.getByRole('button', { name: 'Replace', exact: true }).click()
await expect.poll(() => getRawEditorDoc(page)).toContain('# Entry B')
await page.keyboard.press('Escape')
await expect(page.getByTestId('raw-editor-find-bar')).toHaveCount(0)
await expect(page.locator('.cm-content')).toBeFocused()
})
})