shinkan-jinkendo/frontend/src/utils/frameworkProgramListHelpers.test.js
Lars a4548f5587
Some checks failed
Test Suite / playwright-tests (push) Waiting to run
Deploy Development / deploy (push) Successful in 40s
Test Suite / pytest-backend (push) Successful in 36s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 14s
Test Suite / k6 /health Baseline (push) Has been cancelled
Refactor Training Framework Programs List Page with Enhanced Styling and New Utility Functions
- Updated the TrainingFrameworkProgramsListPage to utilize new CSS classes for improved layout and styling.
- Removed deprecated components and functions, streamlining the codebase for better maintainability.
- Introduced utility functions for splitting aggregated strings, enhancing data handling for framework program attributes.
- Enhanced the user interface with loading and empty state indicators, improving overall user experience.
2026-05-20 16:21:16 +02:00

47 lines
1.8 KiB
JavaScript

import { describe, expect, it } from 'vitest'
import {
collectDistinctSessionDurationsMinutes,
filterFrameworkPrograms,
hasActiveFrameworkImportFilters,
splitFrameworkCommaAgg,
splitFrameworkGoalsAgg,
} from './frameworkProgramListHelpers.js'
describe('frameworkProgramListHelpers', () => {
const rows = [
{ id: 1, title: 'A', session_duration_min: 60, session_duration_max: 60, focus_area_ids: [1] },
{ id: 2, title: 'B', session_duration_min: 90, session_duration_max: 120, focus_area_ids: [2] },
{ id: 3, title: 'C', session_duration_min: null, session_duration_max: null },
]
it('collectDistinctSessionDurationsMinutes', () => {
expect(collectDistinctSessionDurationsMinutes(rows)).toEqual([60, 90, 120])
})
it('filterFrameworkPrograms duration preset', () => {
const out = filterFrameworkPrograms(rows, { durationMode: 'preset', durationPresetMin: 90 })
expect(out.map((r) => r.id)).toEqual([2])
})
it('filterFrameworkPrograms duration range overlap', () => {
const out = filterFrameworkPrograms(rows, {
durationMode: 'range',
durationRangeFrom: '75',
durationRangeTo: '100',
})
expect(out.map((r) => r.id)).toEqual([2])
})
it('hasActiveFrameworkImportFilters', () => {
expect(hasActiveFrameworkImportFilters({})).toBe(false)
expect(hasActiveFrameworkImportFilters({ query: 'x' })).toBe(true)
expect(hasActiveFrameworkImportFilters({ durationMode: 'preset', durationPresetMin: 60 })).toBe(true)
})
it('splitFrameworkCommaAgg and splitFrameworkGoalsAgg', () => {
expect(splitFrameworkCommaAgg('Technik, Kondition')).toEqual(['Technik', 'Kondition'])
expect(splitFrameworkCommaAgg('')).toEqual([])
expect(splitFrameworkGoalsAgg('Gürtel | Koordination')).toEqual(['Gürtel', 'Koordination'])
})
})