Commit 4bd15cf2 by Clinton Blackburn

Merge pull request #7911 from edx/clintonb/deprecate-verify-later

Deprecated Verify Later Page
parents f7e8b2e4 5e687531
...@@ -1751,7 +1751,7 @@ class CertificateItem(OrderItem): ...@@ -1751,7 +1751,7 @@ class CertificateItem(OrderItem):
if is_enrollment_mode_verified: if is_enrollment_mode_verified:
domain = microsite.get_value('SITE_NAME', settings.SITE_NAME) domain = microsite.get_value('SITE_NAME', settings.SITE_NAME)
path = reverse('verify_student_verify_later', kwargs={'course_id': unicode(self.course_id)}) path = reverse('verify_student_verify_now', kwargs={'course_id': unicode(self.course_id)})
verification_url = "http://{domain}{path}".format(domain=domain, path=path) verification_url = "http://{domain}{path}".format(domain=domain, path=path)
verification_reminder = _( verification_reminder = _(
......
...@@ -275,20 +275,18 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -275,20 +275,18 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
@ddt.data( @ddt.data(
"verify_student_verify_now", "verify_student_verify_now",
"verify_student_verify_later",
"verify_student_payment_confirmation" "verify_student_payment_confirmation"
) )
def test_verify_now_or_later_not_enrolled(self, page_name): def test_verify_now_not_enrolled(self, page_name):
course = self._create_course("verified") course = self._create_course("verified")
response = self._get_page(page_name, course.id, expected_status_code=302) response = self._get_page(page_name, course.id, expected_status_code=302)
self._assert_redirects_to_start_flow(response, course.id) self._assert_redirects_to_start_flow(response, course.id)
@ddt.data( @ddt.data(
"verify_student_verify_now", "verify_student_verify_now",
"verify_student_verify_later",
"verify_student_payment_confirmation" "verify_student_payment_confirmation"
) )
def test_verify_now_or_later_unenrolled(self, page_name): def test_verify_now_unenrolled(self, page_name):
course = self._create_course("verified") course = self._create_course("verified")
self._enroll(course.id, "verified") self._enroll(course.id, "verified")
self._unenroll(course.id) self._unenroll(course.id)
...@@ -297,46 +295,21 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -297,46 +295,21 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
@ddt.data( @ddt.data(
"verify_student_verify_now", "verify_student_verify_now",
"verify_student_verify_later",
"verify_student_payment_confirmation" "verify_student_payment_confirmation"
) )
def test_verify_now_or_later_not_paid(self, page_name): def test_verify_now_not_paid(self, page_name):
course = self._create_course("verified") course = self._create_course("verified")
self._enroll(course.id, "honor") self._enroll(course.id, "honor")
response = self._get_page(page_name, course.id, expected_status_code=302) response = self._get_page(page_name, course.id, expected_status_code=302)
self._assert_redirects_to_upgrade(response, course.id) self._assert_redirects_to_upgrade(response, course.id)
def test_verify_later(self): def test_verify_later(self):
""" The deprecated verify-later page should redirect to the verification start page. """
course = self._create_course("verified") course = self._create_course("verified")
self._enroll(course.id, "verified") course_key = course.id
response = self._get_page("verify_student_verify_later", course.id) self._enroll(course_key, "verified")
response = self._get_page("verify_student_verify_later", course_key, expected_status_code=301)
self._assert_messaging(response, PayAndVerifyView.VERIFY_LATER_MSG) self._assert_redirects_to_verify_start(response, course_key, 301)
# Expect that the payment steps are NOT displayed
self._assert_steps_displayed(
response,
[PayAndVerifyView.INTRO_STEP] + PayAndVerifyView.VERIFICATION_STEPS,
PayAndVerifyView.INTRO_STEP
)
self._assert_requirements_displayed(response, [
PayAndVerifyView.PHOTO_ID_REQ,
PayAndVerifyView.WEBCAM_REQ,
])
def test_verify_later_already_verified(self):
course = self._create_course("verified")
self._enroll(course.id, "verified")
self._set_verification_status("submitted")
# Already verified, so if we somehow end up here,
# redirect immediately to the dashboard
response = self._get_page(
'verify_student_verify_later',
course.id,
expected_status_code=302
)
self._assert_redirects_to_dashboard(response)
def test_payment_confirmation(self): def test_payment_confirmation(self):
course = self._create_course("verified") course = self._create_course("verified")
...@@ -489,7 +462,7 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -489,7 +462,7 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
course.id, course.id,
expected_status_code=302 expected_status_code=302
) )
self._assert_redirects_to_verify_later(response, course.id) self._assert_redirects_to_verify_start(response, course.id)
def test_upgrade_already_verified_and_paid(self): def test_upgrade_already_verified_and_paid(self):
course = self._create_course("verified") course = self._create_course("verified")
...@@ -531,7 +504,6 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -531,7 +504,6 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
pages = [ pages = [
'verify_student_start_flow', 'verify_student_start_flow',
'verify_student_verify_now', 'verify_student_verify_now',
'verify_student_verify_later',
'verify_student_upgrade_and_verify', 'verify_student_upgrade_and_verify',
] ]
...@@ -553,7 +525,6 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -553,7 +525,6 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
@ddt.data( @ddt.data(
"verify_student_start_flow", "verify_student_start_flow",
"verify_student_verify_now", "verify_student_verify_now",
"verify_student_verify_later",
"verify_student_upgrade_and_verify", "verify_student_upgrade_and_verify",
) )
def test_require_login(self, url_name): def test_require_login(self, url_name):
...@@ -571,7 +542,6 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -571,7 +542,6 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
@ddt.data( @ddt.data(
"verify_student_start_flow", "verify_student_start_flow",
"verify_student_verify_now", "verify_student_verify_now",
"verify_student_verify_later",
"verify_student_upgrade_and_verify", "verify_student_upgrade_and_verify",
) )
def test_no_such_course(self, url_name): def test_no_such_course(self, url_name):
...@@ -654,7 +624,7 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -654,7 +624,7 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
# The course mode has expired, so expect an explanation # The course mode has expired, so expect an explanation
# to the student that the deadline has passed # to the student that the deadline has passed
response = self._get_page("verify_student_verify_later", course.id) response = self._get_page("verify_student_verify_now", course.id)
self.assertContains(response, "verification deadline") self.assertContains(response, "verification deadline")
self.assertContains(response, "Jan 02, 1999 at 00:00 UTC") self.assertContains(response, "Jan 02, 1999 at 00:00 UTC")
...@@ -821,10 +791,10 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase): ...@@ -821,10 +791,10 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase):
url = reverse('verify_student_start_flow', kwargs={'course_id': unicode(course_id)}) url = reverse('verify_student_start_flow', kwargs={'course_id': unicode(course_id)})
self.assertRedirects(response, url) self.assertRedirects(response, url)
def _assert_redirects_to_verify_later(self, response, course_id): def _assert_redirects_to_verify_start(self, response, course_id, status_code=302):
"""Check that the page redirects to the "verify later" part of the flow. """ """Check that the page redirects to the "verify later" part of the flow. """
url = reverse('verify_student_verify_later', kwargs={'course_id': unicode(course_id)}) url = reverse('verify_student_verify_now', kwargs={'course_id': unicode(course_id)})
self.assertRedirects(response, url) self.assertRedirects(response, url, status_code)
def _assert_redirects_to_upgrade(self, response, course_id): def _assert_redirects_to_upgrade(self, response, course_id):
"""Check that the page redirects to the "upgrade" part of the flow. """ """Check that the page redirects to the "upgrade" part of the flow. """
...@@ -1765,8 +1735,7 @@ class TestInCourseReverifyView(ModuleStoreTestCase): ...@@ -1765,8 +1735,7 @@ class TestInCourseReverifyView(ModuleStoreTestCase):
self._create_checkpoint() self._create_checkpoint()
response = self.client.get(self._get_url(self.course_key, self.MIDTERM)) response = self.client.get(self._get_url(self.course_key, self.MIDTERM))
url = reverse('verify_student_verify_later', url = reverse('verify_student_verify_now', kwargs={"course_id": unicode(self.course_key)})
kwargs={"course_id": unicode(self.course_key)})
self.assertRedirects(response, url) self.assertRedirects(response, url)
@override_settings(SEGMENT_IO_LMS_KEY="foobar") @override_settings(SEGMENT_IO_LMS_KEY="foobar")
...@@ -1810,8 +1779,7 @@ class TestInCourseReverifyView(ModuleStoreTestCase): ...@@ -1810,8 +1779,7 @@ class TestInCourseReverifyView(ModuleStoreTestCase):
self._create_checkpoint() self._create_checkpoint()
response = self.client.post(self._get_url(self.course_key, self.MIDTERM)) response = self.client.post(self._get_url(self.course_key, self.MIDTERM))
url = reverse('verify_student_verify_later', url = reverse('verify_student_verify_now', kwargs={"course_id": unicode(self.course_key)})
kwargs={"course_id": unicode(self.course_key)})
self.assertRedirects(response, url) self.assertRedirects(response, url)
......
""" URL definitions for the verify_student app. """
from django.conf import settings
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from verify_student import views from verify_student import views
from verify_student.views import PayAndVerifyView
from django.conf import settings
urlpatterns = patterns( urlpatterns = patterns(
...@@ -19,7 +19,7 @@ urlpatterns = patterns( ...@@ -19,7 +19,7 @@ urlpatterns = patterns(
views.PayAndVerifyView.as_view(), # pylint: disable=no-value-for-parameter views.PayAndVerifyView.as_view(), # pylint: disable=no-value-for-parameter
name="verify_student_start_flow", name="verify_student_start_flow",
kwargs={ kwargs={
'message': PayAndVerifyView.FIRST_TIME_VERIFY_MSG 'message': views.PayAndVerifyView.FIRST_TIME_VERIFY_MSG
} }
), ),
...@@ -31,7 +31,7 @@ urlpatterns = patterns( ...@@ -31,7 +31,7 @@ urlpatterns = patterns(
views.PayAndVerifyView.as_view(), # pylint: disable=no-value-for-parameter views.PayAndVerifyView.as_view(), # pylint: disable=no-value-for-parameter
name="verify_student_upgrade_and_verify", name="verify_student_upgrade_and_verify",
kwargs={ kwargs={
'message': PayAndVerifyView.UPGRADE_MSG 'message': views.PayAndVerifyView.UPGRADE_MSG
} }
), ),
...@@ -47,8 +47,8 @@ urlpatterns = patterns( ...@@ -47,8 +47,8 @@ urlpatterns = patterns(
name="verify_student_verify_now", name="verify_student_verify_now",
kwargs={ kwargs={
'always_show_payment': True, 'always_show_payment': True,
'current_step': PayAndVerifyView.FACE_PHOTO_STEP, 'current_step': views.PayAndVerifyView.FACE_PHOTO_STEP,
'message': PayAndVerifyView.VERIFY_NOW_MSG 'message': views.PayAndVerifyView.VERIFY_NOW_MSG
} }
), ),
...@@ -59,11 +59,8 @@ urlpatterns = patterns( ...@@ -59,11 +59,8 @@ urlpatterns = patterns(
# (since the user already paid). # (since the user already paid).
url( url(
r'^verify-later/{course}/$'.format(course=settings.COURSE_ID_PATTERN), r'^verify-later/{course}/$'.format(course=settings.COURSE_ID_PATTERN),
views.PayAndVerifyView.as_view(), # pylint: disable=no-value-for-parameter views.VerifyLaterView.as_view(), # pylint: disable=no-value-for-parameter
name="verify_student_verify_later", name="verify_student_verify_later"
kwargs={
'message': PayAndVerifyView.VERIFY_LATER_MSG
}
), ),
# The user is returning to the flow after paying. # The user is returning to the flow after paying.
...@@ -75,8 +72,8 @@ urlpatterns = patterns( ...@@ -75,8 +72,8 @@ urlpatterns = patterns(
name="verify_student_payment_confirmation", name="verify_student_payment_confirmation",
kwargs={ kwargs={
'always_show_payment': True, 'always_show_payment': True,
'current_step': PayAndVerifyView.PAYMENT_CONFIRMATION_STEP, 'current_step': views.PayAndVerifyView.PAYMENT_CONFIRMATION_STEP,
'message': PayAndVerifyView.PAYMENT_CONFIRMATION_MSG 'message': views.PayAndVerifyView.PAYMENT_CONFIRMATION_MSG
} }
), ),
......
...@@ -20,7 +20,7 @@ from django.http import ( ...@@ -20,7 +20,7 @@ from django.http import (
from django.shortcuts import redirect from django.shortcuts import redirect
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
from django.views.generic.base import View from django.views.generic.base import View, RedirectView
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _, ugettext_lazy from django.utils.translation import ugettext as _, ugettext_lazy
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
...@@ -473,10 +473,9 @@ class PayAndVerifyView(View): ...@@ -473,10 +473,9 @@ class PayAndVerifyView(View):
url = reverse('verify_student_start_flow', kwargs=course_kwargs) url = reverse('verify_student_start_flow', kwargs=course_kwargs)
elif message == self.UPGRADE_MSG: elif message == self.UPGRADE_MSG:
if is_enrolled: if is_enrolled:
# If upgrading and we've paid but haven't verified,
# then the "verify later" messaging makes more sense.
if already_paid: if already_paid:
url = reverse('verify_student_verify_later', kwargs=course_kwargs) # If the student has paid, but not verified, redirect to the verification flow.
url = reverse('verify_student_verify_now', kwargs=course_kwargs)
else: else:
url = reverse('verify_student_start_flow', kwargs=course_kwargs) url = reverse('verify_student_start_flow', kwargs=course_kwargs)
...@@ -1205,7 +1204,7 @@ class InCourseReverifyView(View): ...@@ -1205,7 +1204,7 @@ class InCourseReverifyView(View):
Returns: Returns:
HttpResponse with status_code 400 if photo is missing or any error HttpResponse with status_code 400 if photo is missing or any error
or redirect to verify_student_verify_later url if initial verification doesn't exist otherwise or redirect to the verification flow if initial verification doesn't exist otherwise
HttpsResponse with status code 200 HttpsResponse with status code 200
""" """
# Check the in-course re-verification is enabled or not # Check the in-course re-verification is enabled or not
...@@ -1330,4 +1329,12 @@ class InCourseReverifyView(View): ...@@ -1330,4 +1329,12 @@ class InCourseReverifyView(View):
u"for the course %s.", u"for the course %s.",
user.id, course_key user.id, course_key
) )
return redirect(reverse('verify_student_verify_later', kwargs={'course_id': unicode(course_key)})) return redirect(reverse('verify_student_verify_now', kwargs={'course_id': unicode(course_key)}))
class VerifyLaterView(RedirectView):
""" This view has been deprecated and should redirect to the unified verification flow. """
permanent = True
def get_redirect_url(self, course_id, **kwargs): # pylint: disable=unused-argument
return reverse('verify_student_verify_now', kwargs={'course_id': unicode(course_id)})
...@@ -292,7 +292,7 @@ from student.helpers import ( ...@@ -292,7 +292,7 @@ from student.helpers import (
% endif % endif
</div> </div>
<div class="verification-cta"> <div class="verification-cta">
<a href="${reverse('verify_student_verify_later', kwargs={'course_id': unicode(course.id)})}" class="cta" data-course-id="${course.id | h}">${_('Verify Now')}</a> <a href="${reverse('verify_student_verify_now', kwargs={'course_id': unicode(course.id)})}" class="cta" data-course-id="${course.id | h}">${_('Verify Now')}</a>
</div> </div>
% elif verification_status['status'] == VERIFY_STATUS_SUBMITTED: % elif verification_status['status'] == VERIFY_STATUS_SUBMITTED:
<h4 class="message-title">${_('You have already verified your ID!')}</h4> <h4 class="message-title">${_('You have already verified your ID!')}</h4>
......
...@@ -122,6 +122,7 @@ if settings.FEATURES["ENABLE_MOBILE_REST_API"]: ...@@ -122,6 +122,7 @@ if settings.FEATURES["ENABLE_MOBILE_REST_API"]:
# if settings.FEATURES.get("MULTIPLE_ENROLLMENT_ROLES"): # if settings.FEATURES.get("MULTIPLE_ENROLLMENT_ROLES"):
urlpatterns += ( urlpatterns += (
# TODO Namespace these!
url(r'^verify_student/', include('verify_student.urls')), url(r'^verify_student/', include('verify_student.urls')),
url(r'^course_modes/', include('course_modes.urls')), url(r'^course_modes/', include('course_modes.urls')),
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment