All checks were successful
Deploy Development / deploy (push) Successful in 47s
Test Suite / pytest-backend (push) Successful in 41s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m16s
Test Suite / pytest-backend (pull_request) Successful in 36s
Test Suite / lint-backend (pull_request) Successful in 0s
Test Suite / build-frontend (pull_request) Successful in 13s
Test Suite / k6 /health Baseline (pull_request) Successful in 34s
Test Suite / playwright-tests (pull_request) Successful in 1m13s
- Updated PlanningLayout to conditionally render the PlanningRouteNav based on the current path, improving navigation for planning unit editors. - Enhanced TrainingUnitEditPage with unsaved changes detection, integrating a prompt for users to confirm before leaving the page with unsaved changes. - Introduced utility functions for creating a stable snapshot of form data to facilitate dirty-checking, ensuring better user experience during form editing. - Added tests for the new utility functions to validate their behavior in various scenarios.
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
buildPlanUnitEditPath,
|
|
buildPlanUnitNewPath,
|
|
buildPlanningHubReturnState,
|
|
isPlanningUnitEditorPath,
|
|
legacyPlanningUnitDeepLinkTarget,
|
|
parsePlanningHubQuery,
|
|
planningHubPathFromReturnState,
|
|
} from './planningUnitRoutes.js'
|
|
|
|
describe('planningUnitRoutes', () => {
|
|
it('buildPlanUnitEditPath', () => {
|
|
expect(buildPlanUnitEditPath(42)).toBe('/planning/units/42/edit')
|
|
expect(buildPlanUnitEditPath('7')).toBe('/planning/units/7/edit')
|
|
expect(buildPlanUnitEditPath(0)).toBe('/planning')
|
|
})
|
|
|
|
it('buildPlanUnitNewPath with query', () => {
|
|
expect(buildPlanUnitNewPath({ groupId: 3, plannedDate: '2026-05-20' })).toBe(
|
|
'/planning/units/new?group=3&date=2026-05-20'
|
|
)
|
|
expect(buildPlanUnitNewPath()).toBe('/planning/units/new')
|
|
})
|
|
|
|
it('isPlanningUnitEditorPath', () => {
|
|
expect(isPlanningUnitEditorPath('/planning/units/new')).toBe(true)
|
|
expect(isPlanningUnitEditorPath('/planning/units/42/edit')).toBe(true)
|
|
expect(isPlanningUnitEditorPath('/planning')).toBe(false)
|
|
expect(isPlanningUnitEditorPath('/planning/training-modules')).toBe(false)
|
|
})
|
|
|
|
it('legacyPlanningUnitDeepLinkTarget', () => {
|
|
expect(legacyPlanningUnitDeepLinkTarget('unit=5')).toBe('/planning/units/5/edit')
|
|
expect(legacyPlanningUnitDeepLinkTarget('unit=5&debrief=1')).toBe(
|
|
'/planning/units/5/edit?mode=debrief'
|
|
)
|
|
expect(legacyPlanningUnitDeepLinkTarget('')).toBeNull()
|
|
})
|
|
|
|
it('planning hub return roundtrip', () => {
|
|
const state = buildPlanningHubReturnState({
|
|
selectedGroupId: '12',
|
|
planView: 'calendar',
|
|
calendarMonthStr: '2026-06',
|
|
assignedToMeOnly: true,
|
|
})
|
|
const path = planningHubPathFromReturnState(state)
|
|
expect(path).toContain('/planning?')
|
|
expect(path).toContain('group=12')
|
|
expect(path).toContain('view=calendar')
|
|
expect(path).toContain('month=2026-06')
|
|
expect(path).toContain('mine=1')
|
|
|
|
const parsed = parsePlanningHubQuery(path.split('?')[1] || '')
|
|
expect(parsed.selectedGroupId).toBe('12')
|
|
expect(parsed.planView).toBe('calendar')
|
|
expect(parsed.calendarMonthStr).toBe('2026-06')
|
|
expect(parsed.assignedToMeOnly).toBe(true)
|
|
})
|
|
})
|