shinkan-jinkendo/frontend/src/utils/trainingUnitEditorCore.test.js
Lars cb868373f4
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
Enhance PlanningLayout and TrainingUnitEditPage with unsaved changes handling
- 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.
2026-05-19 14:39:46 +02:00

54 lines
2.3 KiB
JavaScript

import { describe, expect, it } from 'vitest'
import {
buildTrainingUnitSavePayload,
createEmptyTrainingUnitFormData,
trainingUnitFormSnapshot,
validateTrainingUnitFormForSave,
} from './trainingUnitEditorCore.js'
describe('trainingUnitEditorCore', () => {
it('createEmptyTrainingUnitFormData defaults', () => {
const fd = createEmptyTrainingUnitFormData({ groupId: '2', plannedDate: '2026-05-01' })
expect(fd.group_id).toBe('2')
expect(fd.planned_date).toBe('2026-05-01')
expect(fd.sections).toHaveLength(1)
expect(fd.sections[0].title).toBe('Hauptteil')
})
it('validateTrainingUnitFormForSave', () => {
expect(validateTrainingUnitFormForSave({ group_id: '', planned_date: '' }).ok).toBe(false)
expect(validateTrainingUnitFormForSave({ group_id: '1', planned_date: '2026-01-01' }).ok).toBe(true)
})
it('buildTrainingUnitSavePayload create includes group and template', () => {
const formData = createEmptyTrainingUnitFormData({ groupId: '5', plannedDate: '2026-05-10' })
const payload = buildTrainingUnitSavePayload(formData, { draftPlanTemplateId: '9' })
expect(payload.group_id).toBe(5)
expect(payload.plan_template_id).toBe(9)
expect(payload.planned_date).toBe('2026-05-10')
expect(payload.sections).toBeDefined()
})
it('buildTrainingUnitSavePayload update sets debrief and clears lead when empty', () => {
const formData = {
...createEmptyTrainingUnitFormData({ groupId: '5', plannedDate: '2026-05-10' }),
status: 'completed',
debrief_completed: true,
lead_trainer_profile_id: '',
session_assistants_inherit: true,
}
const payload = buildTrainingUnitSavePayload(formData, { editingUnit: { id: 1 } })
expect(payload.debrief_completed).toBe(true)
expect(payload.lead_trainer_profile_id).toBeNull()
expect(payload.assistant_trainer_profile_ids).toBeNull()
expect(payload.group_id).toBeUndefined()
})
it('trainingUnitFormSnapshot matches save payload', () => {
const formData = createEmptyTrainingUnitFormData({ groupId: '5', plannedDate: '2026-05-10' })
const snap = trainingUnitFormSnapshot(formData, { draftPlanTemplateId: '3' })
const payload = buildTrainingUnitSavePayload(formData, { draftPlanTemplateId: '3' })
expect(snap).toBe(JSON.stringify(payload))
})
})