mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[UnitTests][Filter] Change to use course_id instead of course_code
This commit is contained in:
committed by
Aaro Koivukangas
parent
7b772e188a
commit
a656667fa3
@@ -7,19 +7,28 @@ import { createCourse, createStudent } from '@oodikone/shared/test/utils'
|
|||||||
|
|
||||||
const { courseFilter } = await import('@/components/FilterView/filters/courses')
|
const { courseFilter } = await import('@/components/FilterView/filters/courses')
|
||||||
|
|
||||||
|
const TKT001_GROUP = 'group-tkt001'
|
||||||
|
const TKT002_ID = 'course-tkt002'
|
||||||
|
const TKT002_GROUP = 'group-tkt002'
|
||||||
|
const TKT003_ID = 'course-tkt003'
|
||||||
|
const TKT003_GROUP = 'group-tkt003'
|
||||||
|
|
||||||
const baseOptions = () => ({
|
const baseOptions = () => ({
|
||||||
courseFilters: {},
|
courseFilters: {},
|
||||||
courses: {},
|
courses: {},
|
||||||
substitutedBy: {},
|
substitutedBy: {},
|
||||||
includeSubstitutions: true,
|
includeSubstitutions: true,
|
||||||
|
idToGroupIdMap: {},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const baseArgs = () => ({ courses: [], idToGroupIdMap: {} })
|
||||||
|
|
||||||
void describe('courseFilter', () => {
|
void describe('courseFilter', () => {
|
||||||
void it('should keep every student when no course filters are selected', () => {
|
void it('should keep every student when no course filters are selected', () => {
|
||||||
const student = createStudent()
|
const student = createStudent()
|
||||||
|
|
||||||
const result = courseFilter().filter(student, {
|
const result = courseFilter().filter(student, {
|
||||||
args: { courses: [] },
|
args: baseArgs(),
|
||||||
options: baseOptions(),
|
options: baseOptions(),
|
||||||
precomputed: undefined,
|
precomputed: undefined,
|
||||||
})
|
})
|
||||||
@@ -28,11 +37,15 @@ void describe('courseFilter', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
void it('should include a student who passed the course when filtering for PASSED', () => {
|
void it('should include a student who passed the course when filtering for PASSED', () => {
|
||||||
const student = createStudent({ courses: [createCourse({ course_code: 'TKT002', passed: true })] })
|
const student = createStudent({ courses: [createCourse({ course_id: TKT002_ID, passed: true })] })
|
||||||
|
|
||||||
const result = courseFilter().filter(student, {
|
const result = courseFilter().filter(student, {
|
||||||
args: { courses: [] },
|
args: baseArgs(),
|
||||||
options: { ...baseOptions(), courseFilters: { TKT002: FilterType.PASSED } },
|
options: {
|
||||||
|
...baseOptions(),
|
||||||
|
courseFilters: { [TKT002_GROUP]: FilterType.PASSED },
|
||||||
|
idToGroupIdMap: { [TKT002_ID]: TKT002_GROUP },
|
||||||
|
},
|
||||||
precomputed: undefined,
|
precomputed: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -43,8 +56,8 @@ void describe('courseFilter', () => {
|
|||||||
const student = createStudent({ courses: [] })
|
const student = createStudent({ courses: [] })
|
||||||
|
|
||||||
const result = courseFilter().filter(student, {
|
const result = courseFilter().filter(student, {
|
||||||
args: { courses: [] },
|
args: baseArgs(),
|
||||||
options: { ...baseOptions(), courseFilters: { TKT002: FilterType.PASSED } },
|
options: { ...baseOptions(), courseFilters: { [TKT002_GROUP]: FilterType.PASSED } },
|
||||||
precomputed: undefined,
|
precomputed: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -53,12 +66,16 @@ void describe('courseFilter', () => {
|
|||||||
|
|
||||||
void it('should include a student who failed the course when filtering for FAILED', () => {
|
void it('should include a student who failed the course when filtering for FAILED', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
courses: [createCourse({ course_code: 'TKT002', passed: false, credittypecode: CreditTypeCode.FAILED })],
|
courses: [createCourse({ course_id: TKT002_ID, passed: false, credittypecode: CreditTypeCode.FAILED })],
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = courseFilter().filter(student, {
|
const result = courseFilter().filter(student, {
|
||||||
args: { courses: [] },
|
args: baseArgs(),
|
||||||
options: { ...baseOptions(), courseFilters: { TKT002: FilterType.FAILED } },
|
options: {
|
||||||
|
...baseOptions(),
|
||||||
|
courseFilters: { [TKT002_GROUP]: FilterType.FAILED },
|
||||||
|
idToGroupIdMap: { [TKT002_ID]: TKT002_GROUP },
|
||||||
|
},
|
||||||
precomputed: undefined,
|
precomputed: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -68,14 +85,18 @@ void describe('courseFilter', () => {
|
|||||||
void it('should include a student who failed and passed the course when filtering for PASSED', () => {
|
void it('should include a student who failed and passed the course when filtering for PASSED', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
courses: [
|
courses: [
|
||||||
createCourse({ course_code: 'TKT002', passed: false, credittypecode: CreditTypeCode.FAILED }),
|
createCourse({ course_id: TKT002_ID, passed: false, credittypecode: CreditTypeCode.FAILED }),
|
||||||
createCourse({ course_code: 'TKT003', passed: true, credittypecode: CreditTypeCode.PASSED }),
|
createCourse({ course_id: TKT003_ID, passed: true, credittypecode: CreditTypeCode.PASSED }),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = courseFilter().filter(student, {
|
const result = courseFilter().filter(student, {
|
||||||
args: { courses: [] },
|
args: baseArgs(),
|
||||||
options: { ...baseOptions(), courseFilters: { TKT003: FilterType.PASSED } },
|
options: {
|
||||||
|
...baseOptions(),
|
||||||
|
courseFilters: { [TKT003_GROUP]: FilterType.PASSED },
|
||||||
|
idToGroupIdMap: { [TKT002_ID]: TKT002_GROUP, [TKT003_ID]: TKT003_GROUP },
|
||||||
|
},
|
||||||
precomputed: undefined,
|
precomputed: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -85,14 +106,18 @@ void describe('courseFilter', () => {
|
|||||||
void it('should exclude a student who failed and passed the course when filtering for FAILED', () => {
|
void it('should exclude a student who failed and passed the course when filtering for FAILED', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
courses: [
|
courses: [
|
||||||
createCourse({ course_code: 'TKT002', passed: false, credittypecode: CreditTypeCode.FAILED }),
|
createCourse({ course_id: TKT002_ID, passed: false, credittypecode: CreditTypeCode.FAILED }),
|
||||||
createCourse({ course_code: 'TKT003', passed: true, credittypecode: CreditTypeCode.PASSED }),
|
createCourse({ course_id: TKT003_ID, passed: true, credittypecode: CreditTypeCode.PASSED }),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = courseFilter().filter(student, {
|
const result = courseFilter().filter(student, {
|
||||||
args: { courses: [] },
|
args: baseArgs(),
|
||||||
options: { ...baseOptions(), courseFilters: { TKT002: FilterType.FAILED } },
|
options: {
|
||||||
|
...baseOptions(),
|
||||||
|
courseFilters: { [TKT002_GROUP]: FilterType.FAILED },
|
||||||
|
idToGroupIdMap: { [TKT002_ID]: TKT002_GROUP, [TKT003_ID]: TKT003_GROUP },
|
||||||
|
},
|
||||||
precomputed: undefined,
|
precomputed: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -103,28 +128,30 @@ void describe('courseFilter', () => {
|
|||||||
const args = {
|
const args = {
|
||||||
courses: [
|
courses: [
|
||||||
{
|
{
|
||||||
|
id: TKT002_ID,
|
||||||
code: 'TKT002',
|
code: 'TKT002',
|
||||||
|
groupId: TKT002_GROUP,
|
||||||
name: { fi: 'Testi' },
|
name: { fi: 'Testi' },
|
||||||
is_study_module: false,
|
isStudyModule: false,
|
||||||
substitutions: [],
|
substitutionGroups: [[TKT001_GROUP, TKT003_GROUP]],
|
||||||
substitution_groups: [['TKT001', 'TKT003']],
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
includeSubstitutions: false,
|
includeSubstitutions: false,
|
||||||
|
idToGroupIdMap: { [TKT002_ID]: TKT002_GROUP },
|
||||||
}
|
}
|
||||||
const options = baseOptions()
|
const options = baseOptions()
|
||||||
|
|
||||||
// Modifies passed options
|
// Modifies passed options
|
||||||
courseFilter().precompute!({ students: [], options, args })
|
courseFilter().precompute!({ students: [], options, args })
|
||||||
|
|
||||||
assert.deepStrictEqual(Object.keys(options.courses), ['TKT002'])
|
assert.deepStrictEqual(Object.keys(options.courses), [TKT002_GROUP])
|
||||||
assert.strictEqual(options.includeSubstitutions, false)
|
assert.strictEqual(options.includeSubstitutions, false)
|
||||||
assert.deepStrictEqual(options.substitutedBy, { TKT002: [['TKT001', 'TKT003']] })
|
assert.deepStrictEqual(options.substitutedBy, { [TKT002_GROUP]: [[TKT001_GROUP, TKT003_GROUP]] })
|
||||||
})
|
})
|
||||||
|
|
||||||
void it('isActive should match filter state', () => {
|
void it('isActive should match filter state', () => {
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
courseFilter().isActive({ ...baseOptions(), courseFilters: { TKT002: FilterType.ALL } }, undefined),
|
courseFilter().isActive({ ...baseOptions(), courseFilters: { [TKT002_GROUP]: FilterType.ALL } }, undefined),
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
assert.strictEqual(courseFilter().isActive(baseOptions(), undefined), false)
|
assert.strictEqual(courseFilter().isActive(baseOptions(), undefined), false)
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ void describe('creditDateFilter', () => {
|
|||||||
void it('should keep only courses within the selected date range when mutating', () => {
|
void it('should keep only courses within the selected date range when mutating', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
courses: [
|
courses: [
|
||||||
createCourse({ course_code: 'TKT-IN', date: new Date('2024-06-01') }),
|
createCourse({ course_id: 'TKT-IN', date: new Date('2024-06-01') }),
|
||||||
createCourse({ course_code: 'TKT-OUT', date: new Date('2023-01-01') }),
|
createCourse({ course_id: 'TKT-OUT', date: new Date('2023-01-01') }),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ void describe('creditDateFilter', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
assert.deepStrictEqual(
|
assert.deepStrictEqual(
|
||||||
result.courses.map(({ course_code }) => course_code),
|
result.courses.map(({ course_id }) => course_id),
|
||||||
['TKT-IN']
|
['TKT-IN']
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@@ -41,8 +41,8 @@ void describe('creditDateFilter', () => {
|
|||||||
void it('should keep only enrollments within the selected date range when mutating', () => {
|
void it('should keep only enrollments within the selected date range when mutating', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
enrollments: [
|
enrollments: [
|
||||||
createEnrollment({ course_code: 'TKT-IN', enrollment_date_time: new Date('2024-06-01') }),
|
createEnrollment({ course_id: 'TKT-IN', enrollment_date_time: new Date('2024-06-01') }),
|
||||||
createEnrollment({ course_code: 'TKT-OUT', enrollment_date_time: new Date('2023-01-01') }),
|
createEnrollment({ course_id: 'TKT-OUT', enrollment_date_time: new Date('2023-01-01') }),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ void describe('creditDateFilter', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
assert.deepStrictEqual(
|
assert.deepStrictEqual(
|
||||||
result.enrollments.map(({ course_code }) => course_code),
|
result.enrollments.map(({ course_id }) => course_id),
|
||||||
['TKT-IN']
|
['TKT-IN']
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,15 +4,12 @@ import { gradeFilter } from '@/components/FilterView/filters/grade'
|
|||||||
|
|
||||||
import { createCourse, createStudent } from '@oodikone/shared/test/utils'
|
import { createCourse, createStudent } from '@oodikone/shared/test/utils'
|
||||||
|
|
||||||
const ARGS = { courseCodes: ['TKT002'], from: '2024-01-01', to: '2024-12-31' }
|
const ARGS = { courseIds: ['TKT002'], from: '2024-01-01', to: '2024-12-31' }
|
||||||
|
|
||||||
void describe('gradeFilter', () => {
|
void describe('gradeFilter', () => {
|
||||||
void it('should group student numbers by their highest grade for the given courses', () => {
|
void it('should group student numbers by their highest grade for the given courses', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
courses: [
|
courses: [createCourse({ course_id: 'TKT002', grade: '5' }), createCourse({ course_id: 'TKT002', grade: '3' })],
|
||||||
createCourse({ course_code: 'TKT002', grade: '5' }),
|
|
||||||
createCourse({ course_code: 'TKT002', grade: '3' }),
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
|
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
|
||||||
@@ -22,7 +19,7 @@ void describe('gradeFilter', () => {
|
|||||||
|
|
||||||
void it('should ignore courses outside the requested date range', () => {
|
void it('should ignore courses outside the requested date range', () => {
|
||||||
const student = createStudent({
|
const student = createStudent({
|
||||||
courses: [createCourse({ course_code: 'TKT002', grade: '5', date: new Date('2023-01-01') })],
|
courses: [createCourse({ course_id: 'TKT002', grade: '5', date: new Date('2023-01-01') })],
|
||||||
})
|
})
|
||||||
|
|
||||||
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
|
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
|
||||||
@@ -43,7 +40,7 @@ void describe('gradeFilter', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
void it('should exclude a student whose grade is not selected', () => {
|
void it('should exclude a student whose grade is not selected', () => {
|
||||||
const student = createStudent({ courses: [createCourse({ course_code: 'TKT002', grade: '3' })] })
|
const student = createStudent({ courses: [createCourse({ course_id: 'TKT002', grade: '3' })] })
|
||||||
|
|
||||||
const result = gradeFilter().filter(student, {
|
const result = gradeFilter().filter(student, {
|
||||||
args: ARGS,
|
args: ARGS,
|
||||||
|
|||||||
Reference in New Issue
Block a user