[UnitTests][Filters][Grade] Fix broken filter

This commit is contained in:
Aaro Koivukangas
2026-09-01 12:31:29 +03:00
parent 4fe98f3065
commit d714f8c2bf
2 changed files with 16 additions and 11 deletions
@@ -8,9 +8,9 @@ import { createFilter, FilterTrayProps } from '@/components/FilterView/filters/c
import { FormattedStudent } from '@oodikone/shared/types'
import { dateIsBetween } from '@oodikone/shared/util/datetime'
type Options = any
type Args = any
type Precompute = any
type Options = { selected: string[] }
type Args = { courseIds: string[]; from: string; to: string }
type Precompute = { grades: Record<string, string[]> }
const GradeFilterCard = ({ options, onOptionsChange, precomputed }: FilterTrayProps<Options, Args, Precompute>) => {
const { grades } = precomputed
@@ -21,9 +21,9 @@ const GradeFilterCard = ({ options, onOptionsChange, precomputed }: FilterTrayPr
// Therefore this cannot be filtered by Number
const choices = Object.keys(grades).sort((a, b) => +b - +a)
const checked = grade => selected.includes(grade)
const checked = (grade: string) => selected.includes(grade)
const onChange = grade => () => {
const onChange = (grade: string) => () => {
if (checked(grade)) {
onOptionsChange({
...options,
@@ -78,12 +78,14 @@ export const gradeFilter = createFilter<Options, Args, Precompute>({
[
student.studentNumber,
student.courses.filter(
(course: any) =>
course =>
args.courseIds.includes(course.course_id) &&
dateIsBetween(new Date(course.date), new Date(args.from), new Date(args.to))
),
] as [string, FormattedStudent['courses']]
)
// Students with no courses get assigned "No grade" incorrectly
.filter(([_, courses]) => courses.length > 0)
.map(([studentNumber, courses]) => [
studentNumber,
getHighestGradeOfCourseBetweenRange(courses, args.from, args.to),
@@ -113,7 +115,7 @@ export const gradeFilter = createFilter<Options, Args, Precompute>({
actions: {
selectGrade(options, grade) {
if (options.selected.indexOf(grade) === -1) {
if (!options.selected.includes(grade)) {
options.selected.push(grade)
}
@@ -4,12 +4,15 @@ import { gradeFilter } from '@/components/FilterView/filters/grade'
import { createCourse, createStudent } from '@oodikone/shared/test/utils'
const ARGS = { courseIds: ['TKT002'], from: '2024-01-01', to: '2024-12-31' }
const ARGS = { courseIds: ['hy-CU-TKT002'], from: '2024-01-01', to: '2024-12-31' }
void describe('gradeFilter', () => {
void it('should group student numbers by their highest grade for the given courses', () => {
const student = createStudent({
courses: [createCourse({ course_id: 'TKT002', grade: '5' }), createCourse({ course_id: 'TKT002', grade: '3' })],
courses: [
createCourse({ course_id: 'hy-CU-TKT002', grade: '5' }),
createCourse({ course_id: 'hy-CU-TKT002', grade: '3' }),
],
})
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
@@ -19,7 +22,7 @@ void describe('gradeFilter', () => {
void it('should ignore courses outside the requested date range', () => {
const student = createStudent({
courses: [createCourse({ course_id: 'TKT002', grade: '5', date: new Date('2023-01-01') })],
courses: [createCourse({ course_id: 'hy-CU-TKT002', grade: '5', date: new Date('2023-01-01') })],
})
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
@@ -40,7 +43,7 @@ void describe('gradeFilter', () => {
})
void it('should exclude a student whose grade is not selected', () => {
const student = createStudent({ courses: [createCourse({ course_id: 'TKT002', grade: '3' })] })
const student = createStudent({ courses: [createCourse({ course_id: 'hy-CU-TKT002', grade: '3' })] })
const result = gradeFilter().filter(student, {
args: ARGS,