mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[UnitTests] Add programmeFilter tests
This commit is contained in:
@@ -132,7 +132,8 @@ const getStudentProgrammes = (student: FormattedStudent) =>
|
||||
|
||||
const NO_PROGRAMME = { code: '00000', name: { en: 'No programme', fi: 'Ei ohjelmaa' } }
|
||||
|
||||
const createStudentToProgrammeMap = (students: FormattedStudent[], studyRightPredicate) => {
|
||||
// TODO: Implement a better type for predicate
|
||||
const createStudentToProgrammeMap = (students: FormattedStudent[], studyRightPredicate: (..._: any[]) => boolean) => {
|
||||
const studentToProgrammeMap = {}
|
||||
|
||||
for (const student of students) {
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
import { assert, describe, it } from 'vitest'
|
||||
|
||||
import { createStudent, createStudyRight, createStudyRightElement } from './helpers'
|
||||
|
||||
const { programmeFilter } = await import('@/components/FilterView/filters/programmes')
|
||||
|
||||
const ARGS = { additionalModes: [] }
|
||||
|
||||
void describe('programmeFilter', () => {
|
||||
void it('should precompute the programmes a student has had in "any" mode', () => {
|
||||
const student = createStudent({ studyRights: [createStudyRight()] })
|
||||
|
||||
const precomputed = programmeFilter().precompute!({
|
||||
students: [student],
|
||||
options: { selectedProgrammes: [], mode: 'any' },
|
||||
args: ARGS,
|
||||
})
|
||||
|
||||
assert.deepStrictEqual(
|
||||
precomputed[student.studentNumber].map(({ code }) => code),
|
||||
['KH50_001']
|
||||
)
|
||||
})
|
||||
|
||||
void it('should map students without any study rights to the "no programme" placeholder', () => {
|
||||
const student = createStudent({ studyRights: [] })
|
||||
|
||||
const precomputed = programmeFilter().precompute!({
|
||||
students: [student],
|
||||
options: { selectedProgrammes: [], mode: 'any' },
|
||||
args: ARGS,
|
||||
})
|
||||
|
||||
assert.deepStrictEqual(
|
||||
precomputed[student.studentNumber].map(({ code }) => code),
|
||||
['00000']
|
||||
)
|
||||
})
|
||||
|
||||
void it('should include student when the student has every selected programme', () => {
|
||||
const student = createStudent({ studyRights: [createStudyRight()] })
|
||||
|
||||
const precomputed = { [student.studentNumber]: [{ code: 'KH50_001', name: { fi: 'Testiohjelma' } }] }
|
||||
|
||||
const result = programmeFilter().filter(student, {
|
||||
args: ARGS,
|
||||
options: { selectedProgrammes: ['KH50_001'], mode: 'any' },
|
||||
precomputed,
|
||||
})
|
||||
|
||||
assert.strictEqual(result, true)
|
||||
})
|
||||
|
||||
void it('should exclude student when the student is missing a selected programme', () => {
|
||||
const student = createStudent({ studyRights: [createStudyRight()] })
|
||||
|
||||
const precomputed = { [student.studentNumber]: [{ code: 'KH99_999', name: { fi: 'Testiohjelma' } }] }
|
||||
|
||||
const result = programmeFilter().filter(student, {
|
||||
args: ARGS,
|
||||
options: { selectedProgrammes: ['KH50_001'], mode: 'any' },
|
||||
precomputed,
|
||||
})
|
||||
|
||||
assert.strictEqual(result, false)
|
||||
})
|
||||
|
||||
void it('should include student when the student has an currently active study right', () => {
|
||||
const thisYear = new Date().getFullYear()
|
||||
const student = createStudent({
|
||||
studyRights: [
|
||||
createStudyRight({
|
||||
startDate: new Date('2024-01-01'),
|
||||
studyRightElements: [
|
||||
createStudyRightElement({
|
||||
startDate: new Date(`${thisYear}-01-01`),
|
||||
endDate: new Date(`${thisYear + 1}-01-01`),
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
const precomputed = programmeFilter().precompute!({
|
||||
students: [student],
|
||||
options: { selectedProgrammes: ['KH50_001'], mode: 'active' },
|
||||
args: ARGS,
|
||||
})
|
||||
|
||||
const result = programmeFilter().filter(student, {
|
||||
args: ARGS,
|
||||
options: { selectedProgrammes: ['KH50_001'], mode: 'active' },
|
||||
precomputed,
|
||||
})
|
||||
|
||||
assert.strictEqual(result, true)
|
||||
})
|
||||
|
||||
void it("should exclude student when the student doesnt' have a currently active study right", () => {
|
||||
const thisYear = new Date().getFullYear() - 3
|
||||
const student = createStudent({
|
||||
studyRights: [
|
||||
createStudyRight({
|
||||
startDate: new Date('2020-01-01'),
|
||||
studyRightElements: [
|
||||
createStudyRightElement({
|
||||
startDate: new Date(`${thisYear}-01-01`),
|
||||
endDate: new Date(`${thisYear + 1}-01-01`),
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
const precomputed = programmeFilter().precompute!({
|
||||
students: [student],
|
||||
options: { selectedProgrammes: ['KH50_001'], mode: 'active' },
|
||||
args: ARGS,
|
||||
})
|
||||
|
||||
const result = programmeFilter().filter(student, {
|
||||
args: ARGS,
|
||||
options: { selectedProgrammes: ['KH50_001'], mode: 'active' },
|
||||
precomputed,
|
||||
})
|
||||
|
||||
assert.strictEqual(result, false)
|
||||
})
|
||||
|
||||
void it.todo('should include student when the student has an attainment during the timeframe (attainment)')
|
||||
void it.todo('should exclude student when the student does not have attainment during the timeframe (attainment)')
|
||||
|
||||
void it.todo(
|
||||
'should include student when the student has had a study right since the start year associated with a study guidance group (assoc-year)'
|
||||
)
|
||||
void it.todo(
|
||||
'should exclude student when the student has not had a study right since the start year associated with a study guidance group (assoc-year)'
|
||||
)
|
||||
|
||||
void it('isActive should match the filter state', () => {
|
||||
assert.strictEqual(programmeFilter().isActive({ selectedProgrammes: [], mode: 'any' }, ''), false)
|
||||
assert.strictEqual(programmeFilter().isActive({ selectedProgrammes: ['KH50_001'], mode: 'any' }, ''), true)
|
||||
|
||||
assert.strictEqual(programmeFilter().isActive({ selectedProgrammes: [], mode: 'active' }, ''), false)
|
||||
assert.strictEqual(programmeFilter().isActive({ selectedProgrammes: ['KH50_001'], mode: 'active' }, ''), true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user