mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[UnitTests][Filters][Grade] Fix broken filter
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user