Midcourse reverification: Events
This commit is contained in:
@@ -20,6 +20,8 @@ from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
|
||||
from mock import sentinel
|
||||
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from courseware.tests.tests import TEST_DATA_MONGO_MODULESTORE
|
||||
from student.tests.factories import UserFactory
|
||||
@@ -130,11 +132,33 @@ class TestMidCourseReverifyView(TestCase):
|
||||
self.course_id = 'Robot/999/Test_Course'
|
||||
CourseFactory.create(org='Robot', number='999', display_name='Test Course')
|
||||
|
||||
patcher = patch('student.models.server_track')
|
||||
self.mock_server_track = patcher.start()
|
||||
self.addCleanup(patcher.stop)
|
||||
|
||||
crum_patcher = patch('student.models.crum.get_current_request')
|
||||
self.mock_get_current_request = crum_patcher.start()
|
||||
self.addCleanup(crum_patcher.stop)
|
||||
self.mock_get_current_request.return_value = sentinel.request
|
||||
|
||||
@patch('verify_student.views.render_to_response', render_mock)
|
||||
def test_midcourse_reverify_get(self):
|
||||
url = reverse('verify_student_midcourse_reverify',
|
||||
kwargs={"course_id": self.course_id})
|
||||
response = self.client.get(url)
|
||||
|
||||
# Check that user entering the reverify flow was logged
|
||||
self.mock_server_track.assert_called_once_with(
|
||||
sentinel.request,
|
||||
'edx.course.enrollment.reverify.started',
|
||||
{
|
||||
'user_id': self.user.id,
|
||||
'course_id': self.course_id,
|
||||
'mode': "verified",
|
||||
}
|
||||
)
|
||||
self.mock_server_track.reset_mock()
|
||||
|
||||
self.assertEquals(response.status_code, 200)
|
||||
((_template, context), _kwargs) = render_mock.call_args
|
||||
self.assertFalse(context['error'])
|
||||
@@ -143,7 +167,21 @@ class TestMidCourseReverifyView(TestCase):
|
||||
def test_midcourse_reverify_post_success(self):
|
||||
window = MidcourseReverificationWindowFactory(course_id=self.course_id)
|
||||
url = reverse('verify_student_midcourse_reverify', kwargs={'course_id': self.course_id})
|
||||
|
||||
response = self.client.post(url, {'face_image': ','})
|
||||
|
||||
# Check that submission event was logged
|
||||
self.mock_server_track.assert_called_once_with(
|
||||
sentinel.request,
|
||||
'edx.course.enrollment.reverify.submitted',
|
||||
{
|
||||
'user_id': self.user.id,
|
||||
'course_id': self.course_id,
|
||||
'mode': "verified",
|
||||
}
|
||||
)
|
||||
self.mock_server_track.reset_mock()
|
||||
|
||||
self.assertEquals(response.status_code, 302)
|
||||
try:
|
||||
verification_attempt = SoftwareSecurePhotoVerification.objects.get(user=self.user, window=window)
|
||||
|
||||
@@ -6,6 +6,8 @@ import json
|
||||
import logging
|
||||
import decimal
|
||||
import datetime
|
||||
import crum
|
||||
from track.views import server_track
|
||||
from pytz import UTC
|
||||
|
||||
from edxmako.shortcuts import render_to_response
|
||||
@@ -39,6 +41,10 @@ from .exceptions import WindowExpiredException
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
EVENT_NAME_USER_ENTERED_MIDCOURSE_REVERIFY_VIEW = 'edx.course.enrollment.reverify.started'
|
||||
EVENT_NAME_USER_SUBMITTED_MIDCOURSE_REVERIFY = 'edx.course.enrollment.reverify.submitted'
|
||||
EVENT_NAME_USER_REVERIFICATION_REVIEWED_BY_SOFTWARESECURE = 'edx.course.enrollment.reverify.reviewed'
|
||||
|
||||
class VerifyView(View):
|
||||
|
||||
@method_decorator(login_required)
|
||||
@@ -251,6 +257,13 @@ def results_callback(request):
|
||||
"Result {} not understood. Known results: PASS, FAIL, SYSTEM FAIL".format(result)
|
||||
)
|
||||
|
||||
# If this is a reverification, log an event
|
||||
if attempt.window:
|
||||
course_id = window.course_id
|
||||
course = course_from_id(course_id)
|
||||
course_enrollment = CourseEnrollment.get_or_create_enrollment(attempt.user, course_id)
|
||||
course_enrollment.emit_event(EVENT_NAME_USER_REVERIFICATION_REVIEWED_BY_SOFTWARESECURE)
|
||||
|
||||
return HttpResponse("OK!")
|
||||
|
||||
|
||||
@@ -345,6 +358,9 @@ class MidCourseReverifyView(View):
|
||||
display this view
|
||||
"""
|
||||
course = course_from_id(course_id)
|
||||
course_enrollment = CourseEnrollment.get_or_create_enrollment(request.user, course_id)
|
||||
course_enrollment.update_enrollment(mode="verified")
|
||||
course_enrollment.emit_event(EVENT_NAME_USER_ENTERED_MIDCOURSE_REVERIFY_VIEW)
|
||||
context = {
|
||||
"user_full_name": request.user.profile.name,
|
||||
"error": False,
|
||||
@@ -353,8 +369,8 @@ class MidCourseReverifyView(View):
|
||||
"course_org": course.display_org_with_default,
|
||||
"course_num": course.display_number_with_default,
|
||||
"reverify": True,
|
||||
|
||||
}
|
||||
|
||||
return render_to_response("verify_student/midcourse_photo_reverification.html", context)
|
||||
|
||||
@method_decorator(login_required)
|
||||
@@ -376,6 +392,9 @@ class MidCourseReverifyView(View):
|
||||
|
||||
attempt.save()
|
||||
attempt.submit()
|
||||
course_enrollment = CourseEnrollment.get_or_create_enrollment(request.user, course_id)
|
||||
course_enrollment.update_enrollment(mode="verified")
|
||||
course_enrollment.emit_event(EVENT_NAME_USER_SUBMITTED_MIDCOURSE_REVERIFY)
|
||||
return HttpResponseRedirect(reverse('verify_student_midcourse_reverification_confirmation'))
|
||||
|
||||
except WindowExpiredException:
|
||||
|
||||
Reference in New Issue
Block a user