feat: unify task and habit pages with Today
ci / gitleaks (push) Successful in 8s
ci / docker (push) Successful in 6m49s

This commit is contained in:
2026-09-18 10:51:57 +08:00
parent 6d568273ef
commit 978c4b87ed
9 changed files with 204 additions and 20 deletions
+22 -1
View File
@@ -135,6 +135,20 @@ test('approved polish keeps search state, dense rows, title-only memos, and uniq
await page.goto('/')
await openSidebarView(page, '收集箱')
const mobileGeometry = await page.evaluate(() => {
const main = document.querySelector('main.list-main')!.getBoundingClientRect()
const header = document.querySelector('.list-page-context')!.getBoundingClientRect()
const filter = document.querySelector('.list-inline-filter')!.getBoundingClientRect()
const search = document.querySelector('.list-search-reveal')!.getBoundingClientRect()
const toggle = document.querySelector('.list-search-reveal .task-search-toggle')!.getBoundingClientRect()
return { main: { left: main.left, right: main.right }, header: { left: header.left, right: header.right, bottom: header.bottom }, filter: { left: filter.left, bottom: filter.bottom }, search: { left: search.left, right: search.right, top: search.top }, toggle: { left: toggle.left, top: toggle.top } }
})
expect(mobileGeometry.header.left - mobileGeometry.main.left).toBeCloseTo(29, 0)
expect(mobileGeometry.main.right - mobileGeometry.header.right).toBeCloseTo(29, 0)
expect(mobileGeometry.search.left).toBeGreaterThanOrEqual(mobileGeometry.header.left)
expect(mobileGeometry.search.right).toBeLessThanOrEqual(mobileGeometry.header.right)
expect(mobileGeometry.toggle.top).toBeGreaterThanOrEqual(mobileGeometry.header.bottom - 1)
expect(mobileGeometry.toggle.left).toBeGreaterThanOrEqual(mobileGeometry.filter.left)
const searchToggle = page.getByRole('button', { name: '展开搜索任务' })
await expect(searchToggle).toHaveAttribute('aria-expanded', 'false')
await searchToggle.click()
@@ -219,10 +233,17 @@ test('approved polish keeps search state, dense rows, title-only memos, and uniq
await expect(page.getByRole('button', { name: /展开搜索任务|收起搜索任务/ })).toBeHidden()
const desktopSearch = page.getByRole('textbox', { name: '搜索任务' })
await expect(desktopSearch).toBeVisible()
const desktopPanel = page.locator('.search-reveal')
const desktopPanel = page.locator('.list-search-reveal')
const desktopBox = await desktopPanel.boundingBox()
expect(desktopBox).not.toBeNull()
expect(desktopBox!.width).toBeGreaterThanOrEqual(320)
const desktopHeader = page.locator('.list-page-context')
const desktopList = page.locator('.task-list')
const desktopGeometry = await Promise.all([desktopHeader, desktopPanel, desktopList].map(async locator => locator.boundingBox()))
for (const box of desktopGeometry) expect(box).not.toBeNull()
expect(Math.abs(desktopGeometry[0]!.x - desktopGeometry[1]!.x)).toBeLessThanOrEqual(1)
expect(Math.abs(desktopGeometry[1]!.x - desktopGeometry[2]!.x)).toBeLessThanOrEqual(1)
expect(desktopGeometry[0]!.width).toBeLessThanOrEqual(900)
await desktopSearch.fill(`搜索保留-${suffix}`)
const desktopTaskRow = page.locator('.task-row').filter({ hasText: taskTitle })
await expect(desktopTaskRow).toHaveCount(1)