From bb5a92d5a0c9c02cfb5d9836fa5a255339736627 Mon Sep 17 00:00:00 2001 From: Karl Andin Date: Mon, 9 Sep 2024 08:45:36 +0200 Subject: [PATCH] test(KUI-1380): fix failing tests. --- server/apiCalls/getFilteredData.js | 4 +-- .../controllers/__tests__/courseCtrl.test.js | 27 ++++++++---------- server/controllers/mocks/mockedLadokData.js | 28 +++++++++++++++++++ .../__tests__/courseDepartmentUtils.test.js | 9 +++--- server/util/courseDepartmentUtils.js | 2 +- server/util/languageUtil.js | 4 +-- 6 files changed, 49 insertions(+), 25 deletions(-) create mode 100644 server/controllers/mocks/mockedLadokData.js diff --git a/server/apiCalls/getFilteredData.js b/server/apiCalls/getFilteredData.js index c311f86e..59ef375b 100644 --- a/server/apiCalls/getFilteredData.js +++ b/server/apiCalls/getFilteredData.js @@ -24,11 +24,11 @@ function _parseCourseDefaultInformation(koppsCourseDetails, ladokCourse, languag const mainSubjects = ladokCourse.huvudomraden?.map(x => getNameInLanguage(x, language)) return { - course_code: parseOrSetEmpty(ladokCourse.code), + course_code: parseOrSetEmpty(ladokCourse.kod), course_department: getNameInLanguageOrSetEmpty(ladokCourse.organisation, language), course_department_code: parseOrSetEmpty(ladokCourse.organisation.code, language), course_department_link: buildCourseDepartmentLink(ladokCourse.organisation, language), - course_education_type_id: ladokCourse.utbildningstyp.id, + course_education_type_id: ladokCourse.utbildningstyp?.id, course_level_code: parseOrSetEmpty(ladokCourse.utbildningstyp.level.code), course_main_subject: mainSubjects && mainSubjects.length > 0 diff --git a/server/controllers/__tests__/courseCtrl.test.js b/server/controllers/__tests__/courseCtrl.test.js index bd85a175..5e8c9926 100644 --- a/server/controllers/__tests__/courseCtrl.test.js +++ b/server/controllers/__tests__/courseCtrl.test.js @@ -1,6 +1,7 @@ 'use strict' import { mockedCourseMemosForDiscontinuedCourse, mockedDiscontinuedCourse } from '../mocks/mockedDiscontinuedCourse' +import { mockedLadokData } from '../mocks/mockedLadokData' const applicationPaths = { system: { @@ -32,6 +33,12 @@ jest.mock('@kth/kth-node-web-common/lib/language', () => ({ jest.mock('kth-node-express-routing', () => ({ getPaths: jest.fn(() => applicationPaths), })) +jest.mock('om-kursen-ladok-client', () => ({ + createApiClient: () => ({ + getLatestCourseVersion: () => mockedLadokData.mockedLadokCourseVersion, + getActiveCourseRounds: () => mockedLadokData.mockedLadokRounds, + }), +})) // jest.mock('@kth/kth-node-response') jest.mock('../../configuration', () => ({ server: { @@ -72,8 +79,7 @@ function buildReq(overrides) { return req } -// const courseCtrl = require('../courseCtrl') -const courseCtrl = {} +const courseCtrl = require('../courseCtrl') let response beforeEach(() => { @@ -85,8 +91,7 @@ afterEach(() => { response = {} }) -// TODO(karl): fix -describe.skip('Discontinued course to test', () => { +describe('Discontinued course to test', () => { test('Gets correct data', async () => { const req = buildReq({ params: { courseCode: mockedDiscontinuedCourse.course.courseCode }, @@ -105,13 +110,7 @@ describe.skip('Discontinued course to test', () => { expect(response.render).toHaveBeenCalled() expect(testResponse.title).toBe(mockedDiscontinuedCourse.course.courseCode) expect(testResponse.compressedData.courseCode).toBe(mockedDiscontinuedCourse.course.courseCode) - expect(testResponse.compressedData.courseData.courseInfo.course_application_info).toBe( - mockedDiscontinuedCourse.course.applicationInfo - ) expect(testResponse.html.context.courseCode).toBe(mockedDiscontinuedCourse.course.courseCode) - expect(testResponse.html.context.courseData.courseInfo.course_application_info).toBe( - mockedDiscontinuedCourse.course.applicationInfo - ) expect(testResponse.html).toMatchInlineSnapshot(` { @@ -126,24 +125,23 @@ describe.skip('Discontinued course to test', () => { "courseCode": "FCK3305", "courseData": { "courseInfo": { - "course_application_info": "

Kursen ges inte läsåret 22/23.

Kontakta examinator / kursansvarig för information.

", + "course_application_info": "Ingen information tillagd", "course_code": "FCK3305", "course_contact_name": "Ingen information tillagd", "course_department": "CBH/Kemi", "course_department_code": "CE", "course_department_link": "CBH/Kemi", "course_disposition": "

Kursupplägg på svenska

", - "course_education_type_id": null, + "course_education_type_id": undefined, "course_examiners": "

Examiner 1

", "course_grade_scale": "P, F", "course_last_exam": [], - "course_level_code": "RESEARCH", + "course_level_code": "3", "course_literature": "

Litteratur anvisas vid kursstart.

", "course_main_subject": "Denna kurs tillhör inget huvudområde.", "course_possibility_to_addition": "Ingen information tillagd", "course_possibility_to_completions": "Ingen information tillagd", "course_prerequisites": "Ingen information tillagd", - "course_recruitment_text": "

Teori och metoder inom glykovetenskap.

", "course_required_equipment": "Ingen information tillagd", "course_state": "ESTABLISHED", "course_suggested_addon_studies": "Ingen information tillagd", @@ -157,7 +155,6 @@ describe.skip('Discontinued course to test', () => { "course_code": "FCK3305", "course_credits": 7.5, "course_credits_text": "hp", - "course_other_title": "Carbohydrate Technologies in Glycoscience", "course_title": "Kolhydratteknik inom glykovetenskap", }, "emptySyllabusData": { diff --git a/server/controllers/mocks/mockedLadokData.js b/server/controllers/mocks/mockedLadokData.js new file mode 100644 index 00000000..eba5cdfd --- /dev/null +++ b/server/controllers/mocks/mockedLadokData.js @@ -0,0 +1,28 @@ +const mockedLadokCourseVersion = { + kod: 'FCK3305', + benamning: { sv: 'Kolhydratteknik inom glykovetenskap', en: 'Carbohydrate Technologies in Glycoscience' }, + omfattning: 7.5, + organisation: { + code: 'CE', + sv: 'CBH/Kemi', + en: 'CBH/Kemi', + }, + utbildningstyp: { + creditsUnitCode: 'HP', + level: { + code: '3', + sv: 'Grundnivå', + en: 'First cycle', + }, + }, + betygsskala: { + code: 'PF', + }, + huvudomraden: [], +} + +const mockedLadokRounds = [] + +const mockedLadokData = { mockedLadokCourseVersion, mockedLadokRounds } + +module.exports = { mockedLadokData } diff --git a/server/util/__tests__/courseDepartmentUtils.test.js b/server/util/__tests__/courseDepartmentUtils.test.js index 2c72dd34..9a1e1a96 100644 --- a/server/util/__tests__/courseDepartmentUtils.test.js +++ b/server/util/__tests__/courseDepartmentUtils.test.js @@ -9,20 +9,19 @@ function htmlStringToElement(html) { return htmlElement } -// TODO(karl): fix -describe.skip('course department link utils', () => { +describe('course department link utils', () => { test('returns department link', () => { - const department = { code: 'JH', name: 'EECS/Datavetenskap' } + const department = { code: 'JH', sv: 'EECS/Datavetenskap', en: 'EECS/Computer Science' } const result = buildCourseDepartmentLink(department, 'en') expect(result).toBeDefined() const element = htmlStringToElement(result) expect(element.href).toBe('/eecs/') - expect(element.innerHTML).toBe('EECS/Datavetenskap') + expect(element.innerHTML).toBe('EECS/Computer Science') }) test('returns undefined for Stockholm university as department', () => { - const department = { code: 'UL', name: 'Stockholms universitet' } + const department = { code: 'UL', sv: 'Stockholms universitet', en: 'Stockholm University' } const result = buildCourseDepartmentLink(department, 'en') expect(result).not.toBeDefined() diff --git a/server/util/courseDepartmentUtils.js b/server/util/courseDepartmentUtils.js index bbe8e28c..d21395b5 100644 --- a/server/util/courseDepartmentUtils.js +++ b/server/util/courseDepartmentUtils.js @@ -5,7 +5,7 @@ function isDepartmentStockholmUniversity(courseDepartment) { } function buildCourseDepartmentLink(courseDepartment, language) { - const name = courseDepartment[language] + const name = courseDepartment && courseDepartment[language] if (!name) { return INFORM_IF_IMPORTANT_INFO_IS_MISSING[language] } diff --git a/server/util/languageUtil.js b/server/util/languageUtil.js index da06376c..bef43085 100644 --- a/server/util/languageUtil.js +++ b/server/util/languageUtil.js @@ -1,10 +1,10 @@ const { parseOrSetEmpty } = require('../controllers/courseCtrlHelpers') // Used for most Ladok objects that have Sv/En props -const getNameInLanguage = (obj, lang = 'sv') => (lang === 'en' ? obj.en : obj.sv) +const getNameInLanguage = (obj, lang = 'sv') => (lang === 'en' ? obj?.en : obj?.sv) const getNameInLanguageOrSetEmpty = (obj, lang = 'sv') => { - const v = lang === 'en' ? obj.en : obj.sv + const v = lang === 'en' ? obj?.en : obj?.sv return parseOrSetEmpty(v, lang) }