diff --git a/AUTHORS b/AUTHORS index 28ee38920cd5a2893e1837036d475ef6c3b024af..c04dc2c40ed91373a397dca50df0014bdcea72e9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -255,3 +255,4 @@ Douglas Hall <dhall@edx.org> Awais Jibran <awaisdar001@gmail.com> Muhammad Rehan <muhammadrehan69@gmail.com> Shawn Milochik <shawn@milochik.com> +Afeef Janjua <janjua.afeef@gmail.com> diff --git a/lms/djangoapps/verify_student/tests/test_views.py b/lms/djangoapps/verify_student/tests/test_views.py index 82127df3ce4105ec4620d07d68a029617f946fc6..588690dd7431d1ffd394c1fb55230e092b99cc71 100644 --- a/lms/djangoapps/verify_student/tests/test_views.py +++ b/lms/djangoapps/verify_student/tests/test_views.py @@ -1870,14 +1870,22 @@ class TestReverifyView(TestCase): # Allow the student to reverify self._assert_can_reverify() - def test_reverify_view_cannot_reverify_pending(self): + def test_reverify_view_can_reverify_pending(self): + """ Test that the user can still re-verify even if the previous photo + verification is in pending state. + + A photo verification is considered in pending state when the user has + either submitted the photo verification (status in database: 'submitted') + or photo verification submission failed (status in database: 'must_retry'). + """ + # User has submitted a verification attempt, but Software Secure has not yet responded attempt = SoftwareSecurePhotoVerification.objects.create(user=self.user) attempt.mark_ready() attempt.submit() - # Cannot reverify because an attempt has already been submitted. - self._assert_cannot_reverify() + # Can re-verify because an attempt has already been submitted. + self._assert_can_reverify() def test_reverify_view_cannot_reverify_approved(self): # Submitted attempt has been approved diff --git a/lms/djangoapps/verify_student/views.py b/lms/djangoapps/verify_student/views.py index 271094436529df5003b883517f5c49f1ff45f69a..46d831d5239bbac4a0bebee94d1e97f7631e4708 100644 --- a/lms/djangoapps/verify_student/views.py +++ b/lms/djangoapps/verify_student/views.py @@ -1350,7 +1350,11 @@ class ReverifyView(View): Backbone views used in the initial verification flow. """ status, _ = SoftwareSecurePhotoVerification.user_status(request.user) - if status in ["must_reverify", "expired"]: + + # If the verification process is still ongoing i.e. the status for photo + # verification is either 'submitted' or 'must_retry' then its marked as + # 'pending' + if status in ["must_reverify", "expired", "pending"]: context = { "user_full_name": request.user.profile.name, "platform_name": settings.PLATFORM_NAME,