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)); });