Skip to content

Commit a493f4e

Browse files
authored
fix run matching (#3365)
1 parent 2cf23ad commit a493f4e

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/model/dashboardViewModel.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,35 @@ describe("dashboardViewModel", () => {
7272
pickDisplayedEnrollmentForLegacyDashboard(course, [lower, higher]),
7373
).toEqual(higher)
7474
})
75+
76+
test("keeps an older enrolled run when the course payload only lists the newer run", () => {
77+
const olderRun = factories.courses.courseRun({
78+
id: 101,
79+
title: "Older run",
80+
})
81+
const newerRun = factories.courses.courseRun({
82+
id: 202,
83+
title: "Newer run",
84+
})
85+
const course = factories.courses.course({
86+
id: 77,
87+
courseruns: [newerRun],
88+
next_run_id: newerRun.id,
89+
})
90+
const olderEnrollment = factories.enrollment.courseEnrollment({
91+
run: {
92+
id: olderRun.id,
93+
title: olderRun.title,
94+
course: { id: course.id, title: course.title },
95+
},
96+
certificate: null,
97+
grades: [],
98+
})
99+
100+
expect(
101+
pickDisplayedEnrollmentForLegacyDashboard(course, [olderEnrollment]),
102+
).toEqual(olderEnrollment)
103+
})
75104
})
76105

77106
describe("groupCourseRunEnrollmentsByCourseId", () => {

frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/model/dashboardViewModel.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ const getMaxEnrollmentGrade = (enrollment: CourseRunEnrollmentV3): number => {
7777
return Math.max(0, ...enrollment.grades.map((grade) => grade.grade ?? 0))
7878
}
7979

80+
const enrollmentBelongsToCourse = (
81+
course: CourseWithCourseRunsSerializerV2,
82+
enrollment: CourseRunEnrollmentV3,
83+
): boolean => {
84+
if (enrollment.run.course?.id === course.id) {
85+
return true
86+
}
87+
88+
return course.courseruns.some((run) => run.id === enrollment.run.id)
89+
}
90+
8091
/**
8192
* Legacy display policy used by dashboard cards.
8293
*
@@ -90,7 +101,7 @@ const pickDisplayedEnrollmentForLegacyDashboard = (
90101
enrollments: CourseRunEnrollmentV3[],
91102
): CourseRunEnrollmentV3 | null => {
92103
const courseEnrollments = enrollments.filter((enrollment) =>
93-
course.courseruns.some((run) => run.id === enrollment.run.id),
104+
enrollmentBelongsToCourse(course, enrollment),
94105
)
95106
if (courseEnrollments.length === 0) {
96107
return null

0 commit comments

Comments
 (0)