62 lines
2.3 KiB
TypeScript
62 lines
2.3 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
import { createFixtureVaultCopy, openFixtureVaultDesktopHarness, removeFixtureVaultCopy } from '../helpers/fixtureVault'
|
|
import { sendShortcut } from './helpers'
|
|
|
|
let tempVaultDir: string
|
|
|
|
function missingTypeNotePath(vaultPath: string): string {
|
|
return path.join(vaultPath, 'hotel-guide.md')
|
|
}
|
|
|
|
test.describe('Missing type warning', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
tempVaultDir = createFixtureVaultCopy()
|
|
fs.writeFileSync(
|
|
missingTypeNotePath(tempVaultDir),
|
|
'---\ntype: Hotel\nstatus: Active\n---\n# Hotel Guide\n\nMissing type test note.\n',
|
|
)
|
|
await openFixtureVaultDesktopHarness(page, tempVaultDir)
|
|
await page.setViewportSize({ width: 1600, height: 900 })
|
|
})
|
|
|
|
test.afterEach(() => {
|
|
removeFixtureVaultCopy(tempVaultDir)
|
|
})
|
|
|
|
test('lets keyboard users inspect, cancel, and create a missing type from the Properties panel', async ({ page }) => {
|
|
await page.getByText('Hotel Guide', { exact: true }).click()
|
|
await sendShortcut(page, 'i', ['Control', 'Shift'])
|
|
|
|
const warning = page.getByTestId('missing-type-warning')
|
|
await expect(warning).toBeVisible()
|
|
await expect(warning).toHaveAttribute('aria-label', 'Missing type Hotel. Click to create this type.')
|
|
|
|
await warning.focus()
|
|
await page.keyboard.press('Enter')
|
|
const dialog = page.getByRole('dialog')
|
|
const typeNameInput = dialog.getByPlaceholder('e.g. Recipe, Book, Habit...')
|
|
await expect(dialog).toBeVisible()
|
|
await expect(typeNameInput).toHaveValue('Hotel')
|
|
await expect(typeNameInput).toBeFocused()
|
|
|
|
await page.keyboard.press('Escape')
|
|
await expect(dialog).not.toBeVisible()
|
|
await expect(warning).toBeVisible()
|
|
|
|
await warning.focus()
|
|
await page.keyboard.press('Enter')
|
|
await expect(typeNameInput).toBeFocused()
|
|
await page.keyboard.press('Enter')
|
|
|
|
await expect(warning).toHaveCount(0)
|
|
await expect(page.getByRole('combobox')).toContainText('Hotel')
|
|
await expect.poll(() => fs.existsSync(path.join(tempVaultDir, 'type', 'hotel.md'))).toBe(true)
|
|
|
|
await page.getByText('Alpha Project', { exact: true }).click()
|
|
await page.getByText('Hotel Guide', { exact: true }).click()
|
|
await expect(page.getByTestId('missing-type-warning')).toHaveCount(0)
|
|
})
|
|
})
|