mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[UnitTests] Add graduatedFromProgrammeFilter tests
This commit is contained in:
@@ -10,7 +10,7 @@ const DEFAULT_STATE = '0' as const
|
||||
|
||||
const BACHELORS = DegreeProgrammeType.BACHELOR
|
||||
const MASTERS = DegreeProgrammeType.MASTER
|
||||
const GRADUATION_PHASE = {
|
||||
export const GRADUATION_PHASE = {
|
||||
NOT_GRADUATED: '-1',
|
||||
NOT_GRADUATED_BACHELOR: '-1',
|
||||
NOT_GRADUATED_MASTER: '-2',
|
||||
@@ -19,6 +19,7 @@ const GRADUATION_PHASE = {
|
||||
GRADUATED_BACHELOR: '1',
|
||||
GRADUATED_MASTER: '2',
|
||||
} as const
|
||||
export type GraduationPhase = (typeof GRADUATION_PHASE)[keyof typeof GRADUATION_PHASE]
|
||||
|
||||
const GraduatedFromProgrammeFilterCard = ({ args, onOptionsChange }: FilterTrayProps<Options, Args, Precompute>) => {
|
||||
const isCombinedExtent = !!args.code && (!!args.combinedProgrammeCode || !!args.showBachelorAndMaster)
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import { assert, describe, it } from 'vitest'
|
||||
|
||||
import {
|
||||
graduatedFromProgrammeFilter,
|
||||
GRADUATION_PHASE,
|
||||
GraduationPhase,
|
||||
} from '@/components/FilterView/filters/graduatedFromProgramme'
|
||||
import { FormattedStudent, StudentStudyRight, StudentStudyRightElement } from '@oodikone/shared/types/studentData'
|
||||
|
||||
import { createStudent, createStudyRight as createBaseStudyRight, createStudyRightElement } from './helpers'
|
||||
|
||||
const createElement = (overrides: Partial<StudentStudyRightElement> = {}): StudentStudyRightElement =>
|
||||
createStudyRightElement({ code: 'KH50_001', endDate: new Date('2024-08-01'), ...overrides })
|
||||
|
||||
const createStudyRight = (overrides: Partial<StudentStudyRight> = {}): StudentStudyRight =>
|
||||
createBaseStudyRight({ studyRightElements: [createElement()], ...overrides })
|
||||
|
||||
const ARGS = { code: 'KH50_001', showBachelorAndMaster: false }
|
||||
|
||||
const filterStudent = (student: FormattedStudent, mode: GraduationPhase) =>
|
||||
graduatedFromProgrammeFilter(ARGS).filter(student, { args: ARGS, options: { mode }, precomputed: undefined })
|
||||
|
||||
void describe('graduatedFromProgrammeFilter', () => {
|
||||
void it('should exclude student who has no study right for the given programme', () => {
|
||||
const student = createStudent({ studyRights: [] })
|
||||
|
||||
assert.strictEqual(filterStudent(student, GRADUATION_PHASE.GRADUATED), false)
|
||||
})
|
||||
|
||||
void it('should include student when mode is Graduated and student has graduated from the programme', () => {
|
||||
const student = createStudent({
|
||||
studyRights: [createStudyRight({ studyRightElements: [createElement({ graduated: true })] })],
|
||||
})
|
||||
|
||||
assert.strictEqual(filterStudent(student, GRADUATION_PHASE.GRADUATED), true)
|
||||
})
|
||||
|
||||
void it('should exclude student when mode is Graduated and student has not graduated', () => {
|
||||
const student = createStudent({
|
||||
studyRights: [createStudyRight({ studyRightElements: [createElement({ graduated: false })] })],
|
||||
})
|
||||
|
||||
assert.strictEqual(filterStudent(student, GRADUATION_PHASE.GRADUATED), false)
|
||||
})
|
||||
|
||||
void it('should include student when mode is Not graduated and student has not graduated', () => {
|
||||
const student = createStudent({
|
||||
studyRights: [createStudyRight({ studyRightElements: [createElement({ graduated: false })] })],
|
||||
})
|
||||
|
||||
assert.strictEqual(filterStudent(student, GRADUATION_PHASE.NOT_GRADUATED), true)
|
||||
})
|
||||
|
||||
void it('isActive should match the filter state', () => {
|
||||
assert.strictEqual(graduatedFromProgrammeFilter(ARGS).isActive({ mode: '0' }, undefined), false)
|
||||
assert.strictEqual(
|
||||
graduatedFromProgrammeFilter(ARGS).isActive({ mode: GRADUATION_PHASE.GRADUATED }, undefined),
|
||||
true
|
||||
)
|
||||
assert.strictEqual(
|
||||
graduatedFromProgrammeFilter(ARGS).isActive({ mode: GRADUATION_PHASE.NOT_GRADUATED }, undefined),
|
||||
true
|
||||
)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user