diff --git a/src/containers/CourseCard/components/Banners/CertificateBanner.jsx b/src/containers/CourseCard/components/Banners/CertificateBanner.jsx
index 879a2d2..3f02001 100644
--- a/src/containers/CourseCard/components/Banners/CertificateBanner.jsx
+++ b/src/containers/CourseCard/components/Banners/CertificateBanner.jsx
@@ -61,23 +61,12 @@ export const CertificateBanner = ({ cardId }) => {
);
}
if (certificate.isDownloadable) {
- if (certificate.certPreviewUrl) {
- return (
-
- {formatMessage(messages.certReady)}
- {' '}
-
- {formatMessage(messages.viewCertificate)}
-
-
- );
- }
return (
{formatMessage(messages.certReady)}
{' '}
-
- {formatMessage(messages.downloadCertificate)}
+
+ {formatMessage(messages.viewCertificate)}
);
diff --git a/src/containers/CourseCard/components/CourseCardDetails/hooks.js b/src/containers/CourseCard/components/CourseCardDetails/hooks.js
index 2646b2a..93d361e 100644
--- a/src/containers/CourseCard/components/CourseCardDetails/hooks.js
+++ b/src/containers/CourseCard/components/CourseCardDetails/hooks.js
@@ -8,6 +8,9 @@ export const useAccessMessage = ({ cardId }) => {
const { formatMessage, formatDate } = useIntl();
const enrollment = appHooks.useCardEnrollmentData(cardId);
const courseRun = appHooks.useCardCourseRunData(cardId);
+ if (!courseRun.isStarted) {
+ return formatMessage(messages.courseStarts, { startDate: courseRun.startDate });
+ }
if (enrollment.isEnrolled) {
if (enrollment.isAudit) {
const {
diff --git a/src/containers/CourseCard/components/CourseCardDetails/hooks.test.js b/src/containers/CourseCard/components/CourseCardDetails/hooks.test.js
index 8c34bdc..ebfd6cc 100644
--- a/src/containers/CourseCard/components/CourseCardDetails/hooks.test.js
+++ b/src/containers/CourseCard/components/CourseCardDetails/hooks.test.js
@@ -80,8 +80,10 @@ describe('CourseCardDetails hooks', () => {
isAuditAccessExpired: false,
};
const courseRunData = {
+ isStarted: true,
isFinished: false,
- endDate: '10/20/1000',
+ startDate: '10/10/1000',
+ endDate: '10/20/2000',
};
const runHook = ({ enrollment = {}, courseRun = {} }) => {
appHooks.useCardCourseRunData.mockReturnValueOnce({
@@ -101,6 +103,19 @@ describe('CourseCardDetails hooks', () => {
expect(appHooks.useCardEnrollmentData).toHaveBeenCalledWith(cardId);
});
+ describe('if not started yet', () => {
+ it('returns accessExpired message with accessExpirationDate from cardData', () => {
+ runHook({
+ enrollment: { isAudit: true, isAuditAccessExpired: true },
+ courseRun: { isStarted: false },
+ });
+ expect(out).toEqual(formatMessage(
+ messages.courseStarts,
+ { startDate: dateFormatter(formatDate, courseRunData.startDate) },
+ ));
+ });
+ });
+
describe('if audit, and expired', () => {
it('returns accessExpired message with accessExpirationDate from cardData', () => {
runHook({ enrollment: { isAudit: true, isAuditAccessExpired: true } });
diff --git a/src/containers/CourseCard/components/CourseCardDetails/messages.js b/src/containers/CourseCard/components/CourseCardDetails/messages.js
index 13738e4..3e5ee85 100644
--- a/src/containers/CourseCard/components/CourseCardDetails/messages.js
+++ b/src/containers/CourseCard/components/CourseCardDetails/messages.js
@@ -21,6 +21,11 @@ export const messages = StrictDict({
description: 'Course ending message on course card.',
defaultMessage: 'Course ends {endDate}',
},
+ courseStarts: {
+ id: 'learner-dash.courseCard.CourseCardDetails.courseStarts',
+ description: 'Course start date message on course card.',
+ defaultMessage: 'Course starts {startDate}',
+ },
unknownProviderName: {
id: 'learner-dash.courseCard.CourseCardDetails.unknownProviderName',
description: 'Provider name display when name is unknown',
diff --git a/src/data/redux/app/selectors.js b/src/data/redux/app/selectors.js
index 056c67d..b4db860 100644
--- a/src/data/redux/app/selectors.js
+++ b/src/data/redux/app/selectors.js
@@ -48,8 +48,6 @@ dateSixMonthsFromNow.setDate(dateSixMonthsFromNow.getDate() + 180);
export const courseCard = StrictDict({
certificates: mkCardSelector(({ certificates }) => ({
availableDate: certificates.availableDate,
- certDownloadUrl: certificates.certDownloadUrl,
- honorCertDownloadUrl: certificates.honorCertDownloadUrl,
certPreviewUrl: certificates.certPreviewUrl,
isDownloadable: certificates.isDownloadable,
isEarnedButUnavailable: certificates.isEarned && !certificates.isAvailable,
@@ -68,6 +66,7 @@ export const courseCard = StrictDict({
isStarted: courseRun.isStarted,
isFinished: courseRun.isFinished,
minPassingGrade: courseRun.minPassingGrade,
+ startDate: courseRun.startDate,
})),
enrollment: mkCardSelector(({ enrollment }) => {
if (enrollment == null) {
diff --git a/src/data/services/lms/fakeData/courses.js b/src/data/services/lms/fakeData/courses.js
index 6e38551..5b28b3e 100644
--- a/src/data/services/lms/fakeData/courses.js
+++ b/src/data/services/lms/fakeData/courses.js
@@ -48,8 +48,10 @@ const logos = {
science: 'https://courses.edx.org/asset-v1:HarvardX+PH525.5x+3T2020+type@thumbnail+block@course_image-375x200.jpg',
};
+const farPastDate = '11/11/1900';
const pastDate = '11/11/2000';
const futureDate = '11/11/3030';
+const farFutureDate = '11/11/4040';
const soonDate = new Date();
soonDate.setDate(soonDate.getDate() + 60);
const soonDateStr = soonDate.toDateString();
@@ -102,7 +104,8 @@ const globalData = {
export const genCourseRunData = (data = {}) => ({
isStarted: false,
isArchived: false,
- endDate: futureDate,
+ startDate: data.isStarted ? farPastDate : futureDate,
+ endDate: farFutureDate,
minPassingGrade: 70,
homeUrl: 'edx.com/courses/my-course-url/home',
marketingUrl: 'edx.com/courses/my-course-url/marketing',
@@ -319,7 +322,6 @@ export const courseRuns = [
isAvailable: true,
isDownloadable: true,
availableDate: pastDate,
- certDownloadUrl: logos.social,
certPreviewUrl: logos.edx,
},
},
@@ -339,7 +341,6 @@ export const courseRuns = [
isAvailable: true,
isDownloadable: true,
availableDate: pastDate,
- certDownloadUrl: logos.social,
},
},
// verified, course archived, learner finished, cert earned, downloadable (web + link)
@@ -359,7 +360,6 @@ export const courseRuns = [
isAvailable: true,
isDownloadable: true,
availableDate: pastDate,
- certDownloadUrl: logos.social,
certPreviewUrl: logos.edx,
},
},
@@ -471,7 +471,6 @@ export const courseRuns = [
isAvailable: true,
isDownloadable: true,
availableDate: pastDate,
- certDownloadUrl: logos.social,
certPreviewUrl: logos.edx,
},
},
@@ -523,7 +522,6 @@ export const courseRuns = [
isAvailable: true,
isDownloadable: true,
availableDate: pastDate,
- certDownloadUrl: logos.social,
certPreviewUrl: logos.edx,
},
},
diff --git a/src/test/app.test.jsx b/src/test/app.test.jsx
index 4b48031..3e01e41 100644
--- a/src/test/app.test.jsx
+++ b/src/test/app.test.jsx
@@ -155,8 +155,8 @@ describe('ESG app integration tests', () => {
[
courseData.provider.name,
courseData.course.courseNumber,
- appMessages.withValues.CourseCardDetails.accessExpires({
- accessExpirationDate: courseData.enrollment.accessExpirationDate,
+ appMessages.withValues.CourseCardDetails.courseStarts({
+ startDate: courseData.courseRun.startDate,
}),
].forEach(value => inspector.verifyTextIncludes(cardDetails, value));
});