mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[Filters][Grade] Fix No grade option not working
This commit is contained in:
@@ -6,6 +6,7 @@ import Typography from '@mui/material/Typography'
|
||||
import { getHighestGradeOfCourseBetweenRange } from '@/common'
|
||||
import { createFilter, FilterTrayProps } from '@/components/FilterView/filters/createFilter'
|
||||
import { FormattedStudent } from '@oodikone/shared/types'
|
||||
import { dateIsBetween } from '@oodikone/shared/util/datetime'
|
||||
|
||||
type Options = any
|
||||
type Args = any
|
||||
@@ -76,17 +77,21 @@ export const gradeFilter = createFilter<Options, Args, Precompute>({
|
||||
student =>
|
||||
[
|
||||
student.studentNumber,
|
||||
student.courses.filter((course: any) => args.courseCodes.includes(course.course_code)),
|
||||
student.courses.filter(
|
||||
(course: any) =>
|
||||
args.courseCodes.includes(course.course_code) &&
|
||||
dateIsBetween(course.date, new Date(args.from), new Date(args.to))
|
||||
),
|
||||
] as [string, FormattedStudent['courses']]
|
||||
)
|
||||
.map(([studentNumber, courses]) => [
|
||||
studentNumber,
|
||||
getHighestGradeOfCourseBetweenRange(courses, args.from, args.to),
|
||||
])
|
||||
.filter(([_, grade]) => grade !== undefined)
|
||||
.reduce((acc, [studentNumber, grade]) => {
|
||||
acc[grade!] ??= []
|
||||
acc[grade!].push(studentNumber)
|
||||
const fixedGrade = grade ?? 'No grade'
|
||||
acc[fixedGrade] ??= []
|
||||
acc[fixedGrade].push(studentNumber)
|
||||
return acc
|
||||
}, {}),
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ void describe('gradeFilter', () => {
|
||||
|
||||
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
|
||||
|
||||
assert.deepStrictEqual(precomputed.grades, {})
|
||||
assert.deepStrictEqual(precomputed.grades, { 'No grade': [student.studentNumber] })
|
||||
})
|
||||
|
||||
void it('should include a student whose grade is selected', () => {
|
||||
@@ -54,6 +54,18 @@ void describe('gradeFilter', () => {
|
||||
assert.strictEqual(result, false)
|
||||
})
|
||||
|
||||
void it('should include student with no grade in No grade', () => {
|
||||
const student = createStudent({ courses: [] })
|
||||
|
||||
const result = gradeFilter().filter(student, {
|
||||
args: ARGS,
|
||||
options: { selected: ['No grade'] },
|
||||
precomputed: { grades: { 'No grade': [student.studentNumber] } },
|
||||
})
|
||||
|
||||
assert.strictEqual(result, true)
|
||||
})
|
||||
|
||||
void it('isActive should match the filter state', () => {
|
||||
assert.strictEqual(gradeFilter().isActive({ selected: ['5'] }, undefined), true)
|
||||
assert.strictEqual(gradeFilter().isActive({ selected: [] }, undefined), false)
|
||||
|
||||
Reference in New Issue
Block a user