feat(ST-1137): mobile Product Backlog-pagina (T-328/T-329/T-330)
- app/(mobile)/m/products/[id]/page.tsx — hergebruikt BacklogHydrationWrapper +
BacklogSplitPane + PbiList/StoryPanel/TaskPanel (1:1 zelfde data-fetch als
desktop-page; demo blijft read-only via PbiList/StoryPanel)
- Cookie-key gescheiden: `backlog-${id}-mobile` (beslissing C in
docs/plans/PBI-11-mobile-shell.md) — tab-mode-gebruikers vervuilen de
desktop-split-percentages niet
- closePath en redirect-targets blijven onder /m/products/
- Tab-mode rendert automatisch op <1024px via SplitPane (uit ST-1116)
- Tests: regressie-vangnet op cookie-key, /m/-paden, hergebruik
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
0a3dc401b7
commit
5b42740461
2 changed files with 182 additions and 0 deletions
38
__tests__/app/m-products-page.test.ts
Normal file
38
__tests__/app/m-products-page.test.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
// Lichte regressie-tests voor de mobile backlog-page. Server-component render
|
||||
// vereist te veel mocking; we asserten op statische source-eigenschappen die
|
||||
// kritisch zijn voor de mobile-shell (cookie-key gescheiden, /m/-paden).
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { resolve } from 'node:path'
|
||||
|
||||
const PAGE = resolve(process.cwd(), 'app/(mobile)/m/products/[id]/page.tsx')
|
||||
const src = readFileSync(PAGE, 'utf-8')
|
||||
|
||||
describe('mobile backlog page (ST-1137)', () => {
|
||||
it('gebruikt gescheiden cookie-key (backlog-{id}-mobile)', () => {
|
||||
// Beslissing C: tab-mode-gebruikers vervuilen desktop-split niet.
|
||||
expect(src).toMatch(/cookieKey=\{`backlog-\$\{id\}-mobile`\}/)
|
||||
})
|
||||
|
||||
it('closePath en TaskDialog redirect blijven onder /m/products/', () => {
|
||||
expect(src).toContain('const closePath = `/m/products/${id}`')
|
||||
})
|
||||
|
||||
it('hergebruikt BacklogHydrationWrapper + BacklogSplitPane (geen content-componenten dupliceren)', () => {
|
||||
expect(src).toContain('BacklogHydrationWrapper')
|
||||
expect(src).toContain('BacklogSplitPane')
|
||||
expect(src).toContain('PbiList')
|
||||
expect(src).toContain('StoryPanel')
|
||||
expect(src).toContain('TaskPanel')
|
||||
})
|
||||
|
||||
it('auth via requireSession() (gedeelde guard)', () => {
|
||||
expect(src).toContain("from '@/lib/auth-guard'")
|
||||
expect(src).toContain('requireSession()')
|
||||
})
|
||||
|
||||
it('rendert TaskDialog op ?newTask en EditTaskLoader op ?editTask', () => {
|
||||
expect(src).toContain('{newTask &&')
|
||||
expect(src).toContain('{editTask && !newTask &&')
|
||||
})
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue