Skip to content

Commit

Permalink
Revert back remove headings (#402)
Browse files Browse the repository at this point in the history
* Revert "Revert "Issues/KUI 1599 remove fields (#389)""

This reverts commit 46faa13.

* Revert "Revert "Issue/k UI 1608 remove fields - literature (#392)""

This reverts commit 39d87b0.
  • Loading branch information
amirhossein-haerian authored Jan 24, 2025
1 parent 9613457 commit 56f8a6c
Show file tree
Hide file tree
Showing 17 changed files with 27 additions and 169 deletions.
8 changes: 2 additions & 6 deletions i18n/messages.en.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,20 +134,19 @@ module.exports = {
course_requirments_for_final_grade: 'Other requirements for final grade',
course_literature: 'Literature',
course_literature_comment: 'Literature comment',
course_literature_not_exist:
'You can find information about course literature either in the course memo for the course offering or in the course room in Canvas.',
course_examination_comments: 'Examination comment',
course_examination: 'Examination',
course_examination_disclaimer:
'<p>If the course is discontinued, students may request to be examined during the following two academic years.</p>',
course_valid_from: 'Valid from',
course_main_subject: 'Main field of study',
course_language: 'Language of instruction',
course_required_equipment: 'Equipment',
course_level_code: 'Education cycle',
course_decision_to_discontinue: 'Avvecklingsbeslut',
course_transitional_reg: 'Transitional regulations',
course_ethical: 'Ethical approach',
course_possibility_to_completions: 'Opportunity to complete the requirements via supplementary examination',
course_possibility_to_addition: 'Opportunity to raise an approved grade via renewed examination',
course_short_semester: {
1: 'Spring ',
2: 'Autumn ',
Expand All @@ -159,12 +158,10 @@ module.exports = {
RESEARCH: 'Third cycle',
},
course_department: 'Offered by',
course_contact_name: 'Contact ',
course_prerequisites: 'Recommended prerequisites',
course_prerequisites_description:
'Describes the knowledge and skills (in addition to the eligibility requirements) that you need to be able to take the course.',
course_prerequisites_menu_aria_label: 'Information about recommended prerequisites',
course_suggested_addon_studies: 'Add-on studies',
course_supplemental_information_url: 'Supplementary information link',
course_supplemental_information_url_text: 'Supplementary information link text',
course_supplemental_information: 'Supplementary information ',
Expand All @@ -173,7 +170,6 @@ module.exports = {
course_room_canvas: 'Course room in Canvas',
course_room_canvas_info:
'Registered students find further information about the implementation of the course in the course room in Canvas. A link to the course room can be found under the tab Studies in the Personal menu at the start of the course.',
course_application_info: 'Information for research students about course offerings',
},
courseRoundInformation: {
round_header: 'Information for',
Expand Down
8 changes: 2 additions & 6 deletions i18n/messages.se.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,20 +136,19 @@ module.exports = {
course_requirments_for_final_grade: 'Övriga krav för slutbetyg',
course_literature: 'Kurslitteratur',
course_literature_comment: 'Kommentar till kurslitteratur',
course_literature_not_exist:
'Du hittar information om kurslitteratur antingen i kursomgångens kurs-PM eller i kursomgångens kursrum i Canvas.',
course_examination_comments: 'Kommentar till examinationsmoment',
course_examination: 'Examination',
course_examination_disclaimer:
'<p>När kurs inte längre ges har student möjlighet att examineras under ytterligare två läsår.</p>',
course_valid_from: 'Giltig från',
course_main_subject: 'Huvudområde',
course_language: 'Undervisningsspråk',
course_required_equipment: 'Utrustning',
course_level_code: 'Utbildningsnivå',
course_decision_to_discontinue: 'Avvecklingsbeslut',
course_transitional_reg: 'Övergångsbestämmelser',
course_ethical: 'Etiskt förhållningssätt',
course_possibility_to_completions: 'Möjlighet till komplettering',
course_possibility_to_addition: 'Möjlighet till plussning',
course_short_semester: {
1: 'VT ',
2: 'HT ',
Expand All @@ -161,12 +160,10 @@ module.exports = {
RESEARCH: 'Forskarnivå',
},
course_department: 'Ges av',
course_contact_name: 'Kontaktperson',
course_prerequisites: 'Rekommenderade förkunskaper',
course_prerequisites_description:
'Beskriver vilka kunskaper och färdigheter (utöver behörighetskraven) som du behöver för att kunna ta till dig kursen.',
course_prerequisites_menu_aria_label: 'Information om rekommenderade förkunskaper',
course_suggested_addon_studies: 'Påbyggnad',
course_supplemental_information_url: 'Övrig information - länk',
course_supplemental_information_url_text: 'Övrig information - länk text',
course_supplemental_information: 'Övrig information',
Expand All @@ -175,7 +172,6 @@ module.exports = {
course_room_canvas: 'Kursrum i Canvas',
course_room_canvas_info:
'Registrerade studenter hittar information för genomförande av kursen i kursrummet i Canvas. En länk till kursrummet finns under fliken Studier i Personliga menyn vid kursstart.',
course_application_info: 'Information för forskarstuderande om när kursen ges',
},
courseRoundInformation: {
round_header: 'Information för',
Expand Down
28 changes: 3 additions & 25 deletions public/js/app/components/CourseSectionList.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { SyllabusInformation } from './SyllabusInformation'

function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabusName }) {
const { translation } = useLanguage()
const { isMissingInfoLabel, missingInfoLabel } = useMissingInfo()
const { isMissingInfoLabel } = useMissingInfo()

function getContent() {
const content = [
Expand Down Expand Up @@ -38,25 +38,18 @@ function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabu
}

function getExecution() {
let literatureText = missingInfoLabel
const courseHasLiterature = courseInfo.course_literature && !isMissingInfoLabel(courseInfo.course_literature)
let literatureText = translation.courseInformation.course_literature_not_exist
const syllabusHasLiterature = syllabus.course_literature && !isMissingInfoLabel(syllabus.course_literature)
const syllabusHasLiteratureComment =
syllabus.course_literature_comment && !isMissingInfoLabel(syllabus.course_literature_comment)

if (courseHasLiterature) {
literatureText = courseInfo.course_literature
} else if (syllabusHasLiterature) {
if (syllabusHasLiterature) {
const literatureComment = syllabusHasLiteratureComment ? `<br />${syllabus.course_literature_comment}` : ''
literatureText = `${syllabus.course_literature}${literatureComment}`
} else if (syllabusHasLiteratureComment) {
literatureText = `${syllabus.course_literature_comment}`
}

const courseRequiredEquipment = !isMissingInfoLabel(courseInfo.course_required_equipment)
? courseInfo.course_required_equipment
: syllabus.course_required_equipment

const eligibility = getEligibility()

const during = [
Expand All @@ -70,7 +63,6 @@ function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabu
ariaLabel: translation.courseInformation.course_prerequisites_menu_aria_label,
},
},
{ header: translation.courseInformation.course_required_equipment, text: courseRequiredEquipment },
{ header: translation.courseInformation.course_literature, text: literatureText },
]

Expand Down Expand Up @@ -110,14 +102,6 @@ function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabu
syllabusMarker: true,
})
}
examination.push({
header: translation.courseInformation.course_possibility_to_completions,
text: courseInfo.course_possibility_to_completions,
})
examination.push({
header: translation.courseInformation.course_possibility_to_addition,
text: courseInfo.course_possibility_to_addition,
})
examination.push({ header: translation.courseInformation.course_examiners, text: courseInfo.course_examiners })
examination.push({
header: translation.courseInformation.course_ethical,
Expand Down Expand Up @@ -147,13 +131,7 @@ function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabu
text: translation.courseInformation.course_level_code_label[courseInfo.course_level_code],
syllabusMarker: true,
},
{
header: translation.courseInformation.course_suggested_addon_studies,
text: courseInfo.course_suggested_addon_studies,
},
]
if (!isMissingInfoLabel(courseInfo.course_contact_name))
prepare.push({ header: translation.courseInformation.course_contact_name, text: courseInfo.course_contact_name })
if (syllabus.course_transitional_reg !== '')
prepare.push({
header: translation.courseInformation.course_transitional_reg,
Expand Down
6 changes: 0 additions & 6 deletions public/js/app/components/MainCourseInformation.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,6 @@ const MainCourseInformation = ({ courseCode, courseData, semesterRoundState }) =
</Alert>
)}

{courseInfo.course_application_info.length > 0 && (
<Alert type="info" header={translation.courseInformation.course_application_info}>
<span dangerouslySetInnerHTML={{ __html: courseInfo.course_application_info }} />
</Alert>
)}

<CourseSectionList
courseInfo={courseInfo}
// if there is no syllabus, we still want to display empty syllabus data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { usePlannedModules } from '../../hooks/usePlannedModules'
import { RoundInformationInfoGrid } from './RoundInformationInfoGrid'
import { RoundInformationContacts } from './RoundInformationContacts'

function RoundInformation({ courseCode, courseData, courseRound, semesterRoundState }) {
function RoundInformation({ courseCode, courseRound, semesterRoundState }) {
const { translation } = useLanguage()

const { createRoundHeader } = useRoundUtils()
Expand Down Expand Up @@ -75,7 +75,7 @@ function RoundInformation({ courseCode, courseData, courseRound, semesterRoundSt
)}

<h3>{translation.courseLabels.header_contact}</h3>
<RoundInformationContacts courseData={courseData} courseRoundEmployees={courseRoundEmployees ?? {}} />
<RoundInformationContacts courseRoundEmployees={courseRoundEmployees ?? {}} />
</div>
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react'
import { useLanguage } from '../../hooks/useLanguage'
import { useMissingInfo } from '../../hooks/useMissingInfo'

function RoundInformationContacts({ courseData, courseRoundEmployees }) {
function RoundInformationContacts({ courseRoundEmployees }) {
const { translation } = useLanguage()
const { missingInfoLabel } = useMissingInfo()

Expand All @@ -26,15 +26,6 @@ function RoundInformationContacts({ courseData, courseRoundEmployees }) {
<dt>{translation.courseRoundInformation.round_teacher}</dt>
<dd dangerouslySetInnerHTML={{ __html: courseRoundEmployees.teachers || missingInfoLabel }} />
</div>

{courseData.course_contact_name && courseData.course_contact_name !== missingInfoLabel && (
<div>
<dt>{translation.courseInformation.course_contact_name}</dt>
<dd>
<p>{courseData.course_contact_name}</p>
</dd>
</div>
)}
</div>
)
}
Expand Down
38 changes: 13 additions & 25 deletions public/js/app/components/__tests__/CourseSectionList.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React from 'react'
import { render, screen } from '@testing-library/react'
import '@testing-library/jest-dom'
import { WebContextProvider } from '../../context/WebContext'
import i18n from '../../../../../i18n'

import CourseSectionList from '../CourseSectionList'

Expand All @@ -10,11 +11,9 @@ const INFORM_IF_IMPORTANT_INFO_IS_MISSING = ['No information inserted', 'Ingen i
describe('Component <CourseSectionList>', () => {
test('renders course literature correctly', () => {
const lang = 'en'
const [courseLiteratureNoTitle] = INFORM_IF_IMPORTANT_INFO_IS_MISSING // en
const courseInfoWithoutLiterature = { course_literature: `<i>${courseLiteratureNoTitle}</i>` }

const courseLiteratureTitle = 'Course Literature (1970)'
const courseInfoWithLiterature = { course_literature: courseLiteratureTitle }
const translation = i18n.getLanguageByShortname(lang)
const syllabusLiteratureDefaultEmptyValue = translation.courseInformation.course_literature

const [syllabusLiteratureNoTitle] = INFORM_IF_IMPORTANT_INFO_IS_MISSING // en
const syllabusWithoutLiterature = {
Expand Down Expand Up @@ -44,52 +43,41 @@ describe('Component <CourseSectionList>', () => {
lang,
}

// Course has no literature, and syllabus has no literature – Show 'No information inserted'
// Syllabus has no literature – Show the default text
const { rerender } = render(
<WebContextProvider configIn={context1}>
<CourseSectionList courseInfo={courseInfoWithoutLiterature} syllabus={syllabusWithoutLiterature} />
<CourseSectionList syllabus={syllabusWithoutLiterature} />
</WebContextProvider>
)
const noliteratureText = screen.getByText(courseLiteratureNoTitle)
const noliteratureText = screen.getByText(syllabusLiteratureDefaultEmptyValue)
expect(noliteratureText).toBeInTheDocument()

// Course has literature – Show only literature from course
// Syllabus has literature without comment – Show only literature (no comment) from syllabus
rerender(
<WebContextProvider configIn={context1}>
<CourseSectionList courseInfo={courseInfoWithLiterature} syllabus={syllabusWithLiteratureAndComment} />
<CourseSectionList syllabus={syllabusWithLiteratureNoComment} />
</WebContextProvider>
)
const literatureText = screen.getByText(courseLiteratureTitle)
expect(literatureText).toBeInTheDocument()
let syllabusText = screen.queryByText(syllabusLiteratureTitle)
expect(syllabusText).not.toBeInTheDocument()

// Course hasn't literature, syllabus does without comment – Show only literature (no comment) from syllabus
rerender(
<WebContextProvider configIn={context1}>
<CourseSectionList courseInfo={courseInfoWithoutLiterature} syllabus={syllabusWithLiteratureNoComment} />
</WebContextProvider>
)
syllabusText = screen.getByText(syllabusLiteratureTitle, { exact: false })
let syllabusText = screen.getByText(syllabusLiteratureTitle, { exact: false })
expect(syllabusText).toBeInTheDocument()
syllabusText = screen.queryByText(syllabusLiteratureNoComment)
expect(syllabusText).not.toBeInTheDocument()

// Course hasn't literature, syllabus does with comment – Show literature and literature comment from syllabus
// Syllabus has literature with comment – Show literature and literature comment from syllabus
rerender(
<WebContextProvider configIn={context1}>
<CourseSectionList courseInfo={courseInfoWithoutLiterature} syllabus={syllabusWithLiteratureAndComment} />
<CourseSectionList syllabus={syllabusWithLiteratureAndComment} />
</WebContextProvider>
)
syllabusText = screen.getByText(syllabusLiteratureTitle, { exact: false })
expect(syllabusText).toBeInTheDocument()
syllabusText = screen.getByText(syllabusLiteratureComment, { exact: false })
expect(syllabusText).toBeInTheDocument()

// Course hasn't literature, syllabus only has comment – Show literature comment from syllabus
// Syllabus hasn't literature and only has comment – Show literature comment from syllabus
rerender(
<WebContextProvider configIn={context1}>
<CourseSectionList courseInfo={courseInfoWithoutLiterature} syllabus={syllabusWithNoLiteratureAndComment} />
<CourseSectionList syllabus={syllabusWithNoLiteratureAndComment} />
</WebContextProvider>
)
syllabusText = screen.getByText(syllabusLiteratureComment, { exact: false })
Expand Down
6 changes: 0 additions & 6 deletions public/js/app/components/__tests__/RoundInformation.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ describe('Component <RoundInformation>', () => {
const propsWithStudyPace = {
memoStorageUri: '',
semesterRoundState: defaultSemesterRoundState,
courseData: {},
courseRound: {
round_course_term: ['2018', '1'],
round_study_pace: '25',
Expand All @@ -67,7 +66,6 @@ describe('Component <RoundInformation>', () => {
const propsWithEmployees = {
memoStorageUri: '',
semesterRoundState: defaultSemesterRoundState,
courseData: {},
courseCode: 'SF1624',
courseRound: mockCourseRound,
}
Expand Down Expand Up @@ -97,7 +95,6 @@ describe('Component <RoundInformation>', () => {
const propsWithEmptyEmployees = {
memoStorageUri: '',
semesterRoundState: defaultSemesterRoundState,
courseData: {},
courseCode: 'SF1624',
courseRound: mockCourseRound,
}
Expand All @@ -115,7 +112,6 @@ describe('Component <RoundInformation>', () => {
const propsWithoutEmployees = {
memoStorageUri: '',
semesterRoundState: defaultSemesterRoundState,
courseData: {},
courseCode: 'SF1624',
courseRound: mockCourseRound,
}
Expand Down Expand Up @@ -171,7 +167,6 @@ describe('Component <RoundInformation>', () => {
const propsWithoutSeatsNum = {
memoStorageUri: '',
semesterRoundState: defaultSemesterRoundState,
courseData: {},
courseRound: {
round_course_term: ['2018', '1'],
round_selection_criteria: '<p>English. Spicy jalapeno bacon ipsum</p>',
Expand Down Expand Up @@ -200,7 +195,6 @@ describe('Component <RoundInformation>', () => {
const propsWithEmptyCriteria = {
memoStorageUri: '',
semesterRoundState: defaultSemesterRoundState,
courseData: {},
courseRound: {
round_course_term: ['2018', '1'],
round_selection_criteria: '<p></p>',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const withinNextSibling = element => within(nextSibling(element))
describe('Component <RoundInformationContacts>', () => {
describe('examiners, responsibles and teachers', () => {
test('shoud show headers with "missing info" text when data is missing', () => {
render(<RoundInformationContacts courseData={{}} courseRoundEmployees={{}} />)
render(<RoundInformationContacts courseRoundEmployees={{}} />)
const examinerLabel = screen.getByText('Examiner')
expect(nextSibling(examinerLabel)).toHaveTextContent('No information inserted')

Expand All @@ -36,7 +36,6 @@ describe('Component <RoundInformationContacts>', () => {
test('shoud show headers with data inserted as html', () => {
render(
<RoundInformationContacts
courseData={{ courseInfo: { course_contact_name: undefined } }}
courseRoundEmployees={{
examiners: '<p class="person"><a href="/profile/testexaminers/">Test examiners</a></p>',
responsibles: '<p class="person"><a href="/profile/testresponsibles/">Test responsibles</a></p>',
Expand All @@ -60,24 +59,4 @@ describe('Component <RoundInformationContacts>', () => {
expect(teacherLink).toHaveAttribute('href', '/profile/testteachers/')
})
})

describe('cource contact', () => {
test('should show header and content for course contact name', () => {
render(
<RoundInformationContacts courseData={{ course_contact_name: 'Contact name' }} courseRoundEmployees={{}} />
)
const contactLabel = screen.getByText('Contact')
expect(contactLabel).toBeInTheDocument()
})
test.each([undefined, '<i>No information inserted</i>'])(
"shoud NOT show header if contact name is '%s'",
contactNameArg => {
render(
<RoundInformationContacts courseData={{ course_contact_name: contactNameArg }} courseRoundEmployees={{}} />
)
const contactLabel = screen.queryByText('Contact')
expect(contactLabel).not.toBeInTheDocument()
}
)
})
})
Loading

0 comments on commit 56f8a6c

Please sign in to comment.