- 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>
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
// 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 &&')
|
|
})
|
|
})
|