diff --git a/src/courseware/course/course-exit/CourseCelebration.jsx b/src/courseware/course/course-exit/CourseCelebration.jsx
index 1f80ce83..db2f2ce5 100644
--- a/src/courseware/course/course-exit/CourseCelebration.jsx
+++ b/src/courseware/course/course-exit/CourseCelebration.jsx
@@ -46,6 +46,7 @@ function CourseCelebration({ intl }) {
relatedPrograms,
verifiedMode,
verifyIdentityUrl,
+ verificationStatus,
} = useModel('courses', courseId);
const {
@@ -157,23 +158,27 @@ function CourseCelebration({ intl }) {
footnote = ;
break;
case 'unverified':
- buttonText = intl.formatMessage(messages.verifyIdentityButton);
- buttonEvent = 'verify_id';
- buttonLocation = verifyIdentityUrl;
certHeader = intl.formatMessage(messages.certificateHeaderUnverified);
- // todo: check for idVerificationSupportLink null
- message = (
-
-
-
- );
visitEvent = 'celebration_unverified';
footnote = ;
+ if (verificationStatus === 'pending') {
+ message = ({intl.formatMessage(messages.verificationPending)}
);
+ } else {
+ buttonText = intl.formatMessage(messages.verifyIdentityButton);
+ buttonEvent = 'verify_id';
+ buttonLocation = verifyIdentityUrl;
+ // todo: check for idVerificationSupportLink null
+ message = (
+
+
+
+ );
+ }
break;
case 'audit_passing':
case 'honor_passing':
diff --git a/src/courseware/course/course-exit/CourseExit.test.jsx b/src/courseware/course/course-exit/CourseExit.test.jsx
index f104177b..e6fc38de 100644
--- a/src/courseware/course/course-exit/CourseExit.test.jsx
+++ b/src/courseware/course/course-exit/CourseExit.test.jsx
@@ -146,6 +146,18 @@ describe('Course Exit Pages', () => {
expect(screen.queryByRole('img', { name: 'Sample certificate' })).not.toBeInTheDocument();
});
+ it('Displays verification pending message', async () => {
+ setMetadata({
+ certificate_data: { cert_status: 'unverified' },
+ verification_status: 'pending',
+ verify_identity_url: `${getConfig().LMS_BASE_URL}/verify_student/verify-now/${defaultMetadata.id}/`,
+ });
+ await fetchAndRender();
+ expect(screen.getByText('Your ID verification is pending and your certificate will be available once approved.')).toBeInTheDocument();
+ expect(screen.queryByRole('link', { name: 'Verify ID now' })).not.toBeInTheDocument();
+ expect(screen.queryByRole('img', { name: 'Sample certificate' })).not.toBeInTheDocument();
+ });
+
it('Displays upgrade link when available', async () => {
setMetadata({
certificate_data: { cert_status: 'audit_passing' },
diff --git a/src/courseware/course/course-exit/messages.js b/src/courseware/course/course-exit/messages.js
index ec3448fb..9d449d0f 100644
--- a/src/courseware/course/course-exit/messages.js
+++ b/src/courseware/course/course-exit/messages.js
@@ -131,6 +131,10 @@ const messages = defineMessages({
id: 'courseExit.upgradeLink',
defaultMessage: 'upgrade now',
},
+ verificationPending: {
+ id: 'courseCelebration.verificationPending',
+ defaultMessage: 'Your ID verification is pending and your certificate will be available once approved.',
+ },
verifiedCertificateSupportLink: {
id: 'courseExit.verifiedCertificateSupportLink',
defaultMessage: 'Learn more about verified certificates',
diff --git a/src/courseware/data/__factories__/courseMetadata.factory.js b/src/courseware/data/__factories__/courseMetadata.factory.js
index 4bb364e6..58d06a20 100644
--- a/src/courseware/data/__factories__/courseMetadata.factory.js
+++ b/src/courseware/data/__factories__/courseMetadata.factory.js
@@ -56,6 +56,7 @@ Factory.define('courseMetadata')
user_has_passing_grade: false,
certificate_data: null,
verify_identity_url: null,
+ verification_status: 'none',
linkedin_add_to_profile_url: null,
related_programs: null,
}).attr(
diff --git a/src/courseware/data/api.js b/src/courseware/data/api.js
index e8ee16a5..ca5505f6 100644
--- a/src/courseware/data/api.js
+++ b/src/courseware/data/api.js
@@ -139,6 +139,7 @@ function normalizeMetadata(metadata) {
courseExitPageIsActive: metadata.course_exit_page_is_active,
certificateData: camelCaseObject(metadata.certificate_data),
verifyIdentityUrl: metadata.verify_identity_url,
+ verificationStatus: metadata.verification_status,
linkedinAddToProfileUrl: metadata.linkedin_add_to_profile_url,
relatedPrograms: camelCaseObject(metadata.related_programs),
};