Merge pull request #17912 from edx/LEARNER-1487/send_successfull_verification_email

Send verification email status
This commit is contained in:
Uzair Rasheed
2018-04-18 12:09:42 +05:00
committed by GitHub
4 changed files with 79 additions and 1 deletions

View File

@@ -1783,6 +1783,7 @@ class TestPhotoVerificationResultsCallback(ModuleStoreTestCase):
attempt = SoftwareSecurePhotoVerification.objects.get(receipt_id=self.receipt_id)
self.assertEqual(attempt.status, u'approved')
self.assertEquals(response.content, 'OK!')
self.assertEqual(len(mail.outbox), 1)
@mock.patch(
'lms.djangoapps.verify_student.ssencrypt.has_valid_signature',
@@ -1862,6 +1863,29 @@ class TestPhotoVerificationResultsCallback(ModuleStoreTestCase):
)
self.assertIn('Result Unknown not understood', response.content)
@mock.patch(
'lms.djangoapps.verify_student.utils.send_mail',
mock.Mock(side_effect=Exception())
)
def test_verification_status_email_not_sent(self):
"""
Test email is not sent in case of exception
"""
data = {
"EdX-ID": self.receipt_id,
"Result": "PASS",
"Reason": "",
"MessageType": "You have been verified."
}
json_data = json.dumps(data)
self.client.post(
reverse('verify_student_results_callback'), data=json_data,
content_type='application/json',
HTTP_AUTHORIZATION='test BBBBBBBBBBBBBBBBBBBB:testing',
HTTP_DATE='testdate'
)
self.assertEqual(len(mail.outbox), 0)
@attr(shard=2)
class TestReverifyView(TestCase):

View File

@@ -8,6 +8,11 @@ import logging
import pytz
from django.conf import settings
from django.core.mail import send_mail
from django.utils.translation import ugettext as _
from edxmako.shortcuts import render_to_string
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
log = logging.getLogger(__name__)
@@ -68,3 +73,25 @@ def verification_for_datetime(deadline, candidates):
for verification in candidates:
if verification.active_at_datetime(deadline):
return verification
def send_verification_status_email(context):
"""
Send an email to inform learners about their verification status
"""
subject = context['subject']
message = render_to_string(context['message'], context['email_template_context'])
from_address = configuration_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
to_address = context['email']
try:
send_mail(subject, message, from_address, [to_address], fail_silently=False)
except: # pylint: disable=bare-except
# We catch all exceptions and log them.
# It would be much, much worse to roll back the transaction due to an uncaught
# exception than to skip sending the notification email.
log.exception(
_("Could not send verification status email having subject: {subject} and email of user: {email}").format(
subject=context['subject'],
email=context['email']
))

View File

@@ -37,7 +37,7 @@ from lms.djangoapps.verify_student.image import InvalidImageData, decode_image_d
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification, VerificationDeadline
from lms.djangoapps.verify_student.services import IDVerificationService
from lms.djangoapps.verify_student.ssencrypt import has_valid_signature
from lms.djangoapps.verify_student.utils import is_verification_expiring_soon
from lms.djangoapps.verify_student.utils import is_verification_expiring_soon, send_verification_status_email
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.djangoapps.embargo import api as embargo_api
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
@@ -1154,10 +1154,26 @@ def results_callback(request):
except SoftwareSecurePhotoVerification.DoesNotExist:
log.error("Software Secure posted back for receipt_id %s, but not found", receipt_id)
return HttpResponseBadRequest("edX ID {} not found".format(receipt_id))
user = attempt.user
context = {
'email': user.email
}
email_template_context = {'platform_name': settings.PLATFORM_NAME}
if result == "PASS":
log.debug("Approving verification for %s", receipt_id)
attempt.approve()
status = "approved"
expiry_date = datetime.date.today() + datetime.timedelta(
days=settings.VERIFY_STUDENT["DAYS_GOOD_FOR"]
)
email_template_context['full_name'] = user.profile.name
email_template_context['expiry_date'] = expiry_date.strftime("%m/%d/%Y")
context['email_template_context'] = email_template_context
context['subject'] = _("Your {platform_name} ID Verification Approved").format(
platform_name=settings.PLATFORM_NAME
)
context['message'] = 'emails/successfull_verification_email.txt'
send_verification_status_email(context)
elif result == "FAIL":
log.debug("Denying verification for %s", receipt_id)

View File

@@ -0,0 +1,11 @@
<%! from django.utils.translation import ugettext as _ %>
${_("Hi {full_name},").format(full_name=full_name)}
${_("Congratulations! Your ID verification process was successful.")}
${_("Your verification is effective for one year. It will expire on {expiry_date}").format(expiry_date=expiry_date)}
${_("Thank you,")}
${_("The {platform_name} team").format(platform_name=platform_name)}