guanghu/e2e/sidebar-collapse.spec.ts
冰朔 8739805f99
Some checks failed
Auto-update PR branches / Update open PR branches (push) Has been cancelled
CI / Frontend Static Quality Checks (push) Has been cancelled
CI / Frontend Tests & Coverage (push) Has been cancelled
CI / Rust Tests & Quality Checks (push) Has been cancelled
CI / Linux build verification (push) Has been cancelled
Release (Alpha) / Compute alpha version (push) Has been cancelled
Release (Alpha) / Build release artifacts (push) Has been cancelled
Release (Alpha) / GitHub Release (alpha) (push) Has been cancelled
Release (Alpha) / Update docs and release pages (push) Has been cancelled
Deploy docs / Build VitePress site (push) Has been cancelled
Deploy docs / Deploy to GitHub Pages (push) Has been cancelled
光湖开源源码快照 · Tolaria AGPL 分叉基线 · 独立更新链
2026-07-05 17:45:16 +08:00

91 lines
3.1 KiB
TypeScript

import { test, expect } from '@playwright/test'
// On macOS, Alt+key produces special characters, so we dispatch events directly
function dispatchAltKey(page: import('@playwright/test').Page, key: string) {
return page.evaluate((k) => {
window.dispatchEvent(new KeyboardEvent('keydown', {
key: k, altKey: true, metaKey: false, ctrlKey: false,
bubbles: true, cancelable: true,
}))
}, key)
}
async function loadApp(page: import('@playwright/test').Page) {
await page.goto('/')
// Clear stored view mode so we start fresh
await page.evaluate(() => localStorage.removeItem('laputa-view-mode'))
await page.reload()
await page.waitForTimeout(500)
}
test.describe('Sidebar collapse', () => {
test('default: all three panels visible', async ({ page }) => {
await loadApp(page)
await expect(page.locator('.app__sidebar')).toBeVisible()
await expect(page.locator('.app__note-list')).toBeVisible()
await expect(page.locator('.app__editor')).toBeVisible()
await page.screenshot({ path: 'test-results/collapse-all-panels.png', fullPage: true })
})
test('collapse button hides sidebar', async ({ page }) => {
await loadApp(page)
const collapseBtn = page.locator('button[aria-label="Collapse sidebar"]')
await expect(collapseBtn).toBeVisible()
await collapseBtn.click()
await page.waitForTimeout(500)
await expect(page.locator('.app__sidebar')).toHaveCount(0)
await expect(page.locator('.app__note-list')).toBeVisible()
await expect(page.locator('.app__editor')).toBeVisible()
await page.screenshot({ path: 'test-results/collapse-sidebar-hidden.png', fullPage: true })
})
test('Alt+1 shows editor only', async ({ page }) => {
await loadApp(page)
await dispatchAltKey(page, '1')
await page.waitForTimeout(500)
await expect(page.locator('.app__sidebar')).toHaveCount(0)
await expect(page.locator('.app__note-list')).toHaveCount(0)
await expect(page.locator('.app__editor')).toBeVisible()
await page.screenshot({ path: 'test-results/collapse-editor-only.png', fullPage: true })
})
test('Alt+2 shows editor + note list', async ({ page }) => {
await loadApp(page)
await dispatchAltKey(page, '2')
await page.waitForTimeout(500)
await expect(page.locator('.app__sidebar')).toHaveCount(0)
await expect(page.locator('.app__note-list')).toBeVisible()
await expect(page.locator('.app__editor')).toBeVisible()
await page.screenshot({ path: 'test-results/collapse-editor-list.png', fullPage: true })
})
test('Alt+3 restores all panels after collapse', async ({ page }) => {
await loadApp(page)
// Collapse first
await dispatchAltKey(page, '1')
await page.waitForTimeout(500)
await expect(page.locator('.app__sidebar')).toHaveCount(0)
// Restore
await dispatchAltKey(page, '3')
await page.waitForTimeout(500)
await expect(page.locator('.app__sidebar')).toBeVisible()
await expect(page.locator('.app__note-list')).toBeVisible()
await expect(page.locator('.app__editor')).toBeVisible()
await page.screenshot({ path: 'test-results/collapse-restored.png', fullPage: true })
})
})