From 1d26e2aeb4bef302f562af0706f2ad62027f33cf Mon Sep 17 00:00:00 2001 From: CP Date: Wed, 11 Mar 2026 13:16:24 -0400 Subject: [PATCH 1/3] Prefer enrollable course runs for start date When computing the start date label for multi-run courses, prefer runs that are still open for enrollment (is_enrollable). If no enrollable runs exist, fall back to all runs. This avoids showing start dates from long-past, closed runs while preserving existing behavior for single-run courseware and still using compareCourseRunStartDates for sorting. --- frontend/public/src/lib/util.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/frontend/public/src/lib/util.js b/frontend/public/src/lib/util.js index d1973d6bb7..bfcf4af43a 100644 --- a/frontend/public/src/lib/util.js +++ b/frontend/public/src/lib/util.js @@ -351,9 +351,24 @@ export const getStartDateText = ( return "" } - const courseRun = courseware.courseruns ? - courseware.courseruns.sort(compareCourseRunStartDates)[0] : - courseware + // When a course with multiple runs is provided, compute the label + // from runs that are still open for enrollment + // (`is_enrollable` true). This keeps the catalog card from showing + // start dates for long‑past, closed runs when a newer enrollable run + // exists. + let courseRun + if (courseware.courseruns) { + const enrollableRuns = courseware.courseruns.filter( + run => run.is_enrollable + ) + + const runsToConsider = + enrollableRuns.length > 0 ? enrollableRuns : courseware.courseruns + + courseRun = runsToConsider.sort(compareCourseRunStartDates)[0] + } else { + courseRun = courseware + } if (!courseRun.start_date) { return "" From e767ee7a50349553dee6f18d4c8eb630979199cb Mon Sep 17 00:00:00 2001 From: CP Date: Wed, 11 Mar 2026 13:18:07 -0400 Subject: [PATCH 2/3] Add test --- frontend/public/src/lib/util_test.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/frontend/public/src/lib/util_test.js b/frontend/public/src/lib/util_test.js index 1cf08accbc..eaa18ba1d9 100644 --- a/frontend/public/src/lib/util_test.js +++ b/frontend/public/src/lib/util_test.js @@ -435,6 +435,34 @@ describe("utility functions", () => { getStartDateText(course).includes(formatPrettyDate(startDates[0])) ) }) + + it("prefers enrollable runs when choosing the start date for a course", () => { + const pastDate = moment().subtract(30, "days") + const futureDate = moment().add(10, "days") + + const course = { + courseruns: [ + { + start_date: pastDate, + is_enrollable: false, + is_self_paced: false, + is_archived: false + }, + { + start_date: futureDate, + is_enrollable: true, + is_self_paced: false, + is_archived: false + } + ] + } + + const text = getStartDateText(course) + + assert.isTrue(text.includes("Starts")) + assert.isTrue(text.includes(formatPrettyDate(futureDate))) + assert.isFalse(text.includes(formatPrettyDate(pastDate))) + }) it("displays an empty string if it's a course and there's no course runs", () => { const course = { courseruns: [] From b404b4f741d1f40c34b428a52c3b2941e634b48b Mon Sep 17 00:00:00 2001 From: CP Date: Wed, 11 Mar 2026 13:23:28 -0400 Subject: [PATCH 3/3] fmt --- frontend/public/src/lib/util_test.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/public/src/lib/util_test.js b/frontend/public/src/lib/util_test.js index eaa18ba1d9..1fdb63f80f 100644 --- a/frontend/public/src/lib/util_test.js +++ b/frontend/public/src/lib/util_test.js @@ -443,16 +443,16 @@ describe("utility functions", () => { const course = { courseruns: [ { - start_date: pastDate, - is_enrollable: false, - is_self_paced: false, - is_archived: false + start_date: pastDate, + is_enrollable: false, + is_self_paced: false, + is_archived: false }, { - start_date: futureDate, - is_enrollable: true, - is_self_paced: false, - is_archived: false + start_date: futureDate, + is_enrollable: true, + is_self_paced: false, + is_archived: false } ] }