Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions frontend/public/src/lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
Expand Down
28 changes: 28 additions & 0 deletions frontend/public/src/lib/util_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: []
Expand Down
Loading