mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[Test] test
This commit is contained in:
@@ -2,16 +2,28 @@ import { assert, describe, it } from 'vitest'
|
|||||||
|
|
||||||
import { calculateExcelData, getHopsCourses } from '@/components/CustomPopulation/courseMatrix'
|
import { calculateExcelData, getHopsCourses } from '@/components/CustomPopulation/courseMatrix'
|
||||||
import { CreditTypeCode } from '@oodikone/shared/types'
|
import { CreditTypeCode } from '@oodikone/shared/types'
|
||||||
|
import type { StudentCourse } from '@oodikone/shared/types/studentData'
|
||||||
|
|
||||||
import { createCourse as createBaseCourse, createStudent, createStudyPlan } from '@oodikone/shared/test/utils'
|
import { createCourse as createBaseCourse, createStudent, createStudyPlan } from '@oodikone/shared/test/utils'
|
||||||
|
|
||||||
|
// Each course id is its own course group unless overridden
|
||||||
const createCourse = (
|
const createCourse = (
|
||||||
course_id: string,
|
course_id: string,
|
||||||
credits: number,
|
credits: number,
|
||||||
passed: boolean,
|
passed: boolean,
|
||||||
date: Date,
|
date: Date,
|
||||||
credittypecode: CreditTypeCode = passed ? CreditTypeCode.PASSED : CreditTypeCode.FAILED
|
overrides: Partial<StudentCourse> = {}
|
||||||
) => createBaseCourse({ course_id, date, passed, grade: passed ? '5' : 'Hyl.', credits, credittypecode })
|
) =>
|
||||||
|
createBaseCourse({
|
||||||
|
course_id,
|
||||||
|
courseGroupId: course_id,
|
||||||
|
date,
|
||||||
|
passed,
|
||||||
|
grade: passed ? '5' : 'Hyl.',
|
||||||
|
credits,
|
||||||
|
credittypecode: passed ? CreditTypeCode.PASSED : CreditTypeCode.FAILED,
|
||||||
|
...overrides,
|
||||||
|
})
|
||||||
|
|
||||||
const createHops = (includedCourses: string[]) => createStudyPlan({ included_courses: includedCourses })
|
const createHops = (includedCourses: string[]) => createStudyPlan({ included_courses: includedCourses })
|
||||||
|
|
||||||
@@ -52,6 +64,21 @@ void describe('getHopsCourses', () => {
|
|||||||
assert.equal(result.length, 1)
|
assert.equal(result.length, 1)
|
||||||
assert.equal(result[0].credits, 6)
|
assert.equal(result[0].credits, 6)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
void it('dedupes completions of different versions of the same course group keeping the latest', () => {
|
||||||
|
const student = createStudent({
|
||||||
|
courses: [
|
||||||
|
createCourse('A-2023', 5, true, new Date('2024-09-01'), { courseGroupId: 'group-a' }),
|
||||||
|
createCourse('A-2025', 6, true, new Date('2025-01-15'), { courseGroupId: 'group-a' }),
|
||||||
|
],
|
||||||
|
studyplans: [createHops(['A-2023', 'A-2025'])],
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = getHopsCourses(student)
|
||||||
|
|
||||||
|
assert.equal(result.length, 1)
|
||||||
|
assert.equal(result[0].course_id, 'A-2025')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
void describe('calculateExcelData', () => {
|
void describe('calculateExcelData', () => {
|
||||||
@@ -71,12 +98,12 @@ void describe('calculateExcelData', () => {
|
|||||||
studyplans: [createHops(['course-a', 'course-b'])],
|
studyplans: [createHops(['course-a', 'course-b'])],
|
||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
const courseInfoById = new Map([
|
const courseInfoByGroupId = new Map([
|
||||||
['course-a', { code: 'A', name: 'Course A' }],
|
['course-a', { code: 'A', name: 'Course A' }],
|
||||||
['course-b', { code: 'B', name: 'Course B' }],
|
['course-b', { code: 'B', name: 'Course B' }],
|
||||||
])
|
])
|
||||||
|
|
||||||
const data = calculateExcelData(students, courseInfoById)
|
const data = calculateExcelData(students, courseInfoByGroupId)
|
||||||
|
|
||||||
assert.deepEqual(data.completedCoursesRows, [
|
assert.deepEqual(data.completedCoursesRows, [
|
||||||
['1', 'Testi Opiskelija', 'Course A (A)'],
|
['1', 'Testi Opiskelija', 'Course A (A)'],
|
||||||
@@ -88,18 +115,42 @@ void describe('calculateExcelData', () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
void it('falls back to id as the code for courses missing from the course map', () => {
|
void it('displays the course group code for other versions and aggregates versions of the same group', () => {
|
||||||
const students = [
|
const students = [
|
||||||
createStudent({
|
createStudent({
|
||||||
studentNumber: '1',
|
studentNumber: '1',
|
||||||
courses: [createCourse('unknown-course-id', 5, true, new Date('2024-09-01'))],
|
courses: [createCourse('course-a-v1', 5, true, new Date('2024-09-01'), { courseGroupId: 'group-a' })],
|
||||||
|
studyplans: [createHops(['course-a-v1'])],
|
||||||
|
}),
|
||||||
|
createStudent({
|
||||||
|
studentNumber: '2',
|
||||||
|
courses: [createCourse('course-a-v2', 5, true, new Date('2025-09-01'), { courseGroupId: 'group-a' })],
|
||||||
|
studyplans: [createHops(['course-a-v2'])],
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
const courseInfoByGroupId = new Map([['group-a', { code: 'A', name: 'Course A' }]])
|
||||||
|
|
||||||
|
const data = calculateExcelData(students, courseInfoByGroupId)
|
||||||
|
|
||||||
|
assert.deepEqual(data.completedCoursesRows, [
|
||||||
|
['1', 'Testi Opiskelija', 'Course A (A)'],
|
||||||
|
['2', 'Testi Opiskelija', 'Course A (A)'],
|
||||||
|
])
|
||||||
|
assert.deepEqual(data.courseCounterRows, [['A', 'Course A', '2', '10']])
|
||||||
|
})
|
||||||
|
|
||||||
|
void it('falls back to the course code of the credit for courses missing from the course map', () => {
|
||||||
|
const students = [
|
||||||
|
createStudent({
|
||||||
|
studentNumber: '1',
|
||||||
|
courses: [createCourse('unknown-course-id', 5, true, new Date('2024-09-01'), { course_code: 'UNKNOWN01' })],
|
||||||
studyplans: [createHops(['unknown-course-id'])],
|
studyplans: [createHops(['unknown-course-id'])],
|
||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
|
|
||||||
const data = calculateExcelData(students, new Map())
|
const data = calculateExcelData(students, new Map())
|
||||||
|
|
||||||
assert.deepEqual(data.completedCoursesRows, [['1', 'Testi Opiskelija', ' (unknown-course-id)']])
|
assert.deepEqual(data.completedCoursesRows, [['1', 'Testi Opiskelija', ' (UNKNOWN01)']])
|
||||||
assert.deepEqual(data.courseCounterRows, [['unknown-course-id', '', '1', '5']])
|
assert.deepEqual(data.courseCounterRows, [['UNKNOWN01', '', '1', '5']])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user