fix: use pending name change in IDV post_save signal
This commit is contained in:
@@ -109,6 +109,17 @@ def get_course_access_role(user, org, course_id, role):
|
||||
return course_access_role
|
||||
|
||||
|
||||
def get_pending_name_change(user):
|
||||
"""
|
||||
Return a string representing the user's pending name change, or None if it does not exist.
|
||||
"""
|
||||
try:
|
||||
pending_name_change = _PendingNameChange.objects.get(user=user)
|
||||
return pending_name_change.new_name
|
||||
except _PendingNameChange.DoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
def do_name_change_request(user, new_name, rationale):
|
||||
"""
|
||||
Create a name change request. This either updates the user's current PendingNameChange, or creates
|
||||
|
||||
@@ -8,6 +8,7 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.dispatch import Signal
|
||||
from django.dispatch.dispatcher import receiver
|
||||
|
||||
from common.djangoapps.student.models_api import get_name, get_pending_name_change
|
||||
from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_LMS_CRITICAL
|
||||
from xmodule.modulestore.django import SignalHandler, modulestore
|
||||
|
||||
@@ -48,11 +49,14 @@ def send_idv_update(sender, instance, **kwargs): # pylint: disable=unused-argum
|
||||
as opposed to relying only on the post_save signal to avoid the chance that other apps
|
||||
import the SoftwareSecurePhotoVerification model.
|
||||
"""
|
||||
# Prioritize pending name change over current profile name, if the user has one
|
||||
full_name = get_pending_name_change(instance.user) or get_name(instance.user.id)
|
||||
|
||||
idv_update_signal.send(
|
||||
sender='idv_update',
|
||||
attempt_id=instance.id,
|
||||
user_id=instance.user.id,
|
||||
status=instance.status,
|
||||
full_name=instance.name,
|
||||
profile_name=instance.user.profile.name
|
||||
photo_id_name=instance.name,
|
||||
full_name=full_name
|
||||
)
|
||||
|
||||
@@ -8,6 +8,7 @@ from datetime import timedelta
|
||||
from django.utils.timezone import now
|
||||
from unittest.mock import patch
|
||||
|
||||
from common.djangoapps.student.models_api import do_name_change_request
|
||||
from common.djangoapps.student.tests.factories import UserFactory
|
||||
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification, VerificationDeadline
|
||||
from lms.djangoapps.verify_student.signals import _listen_for_course_publish, _listen_for_lms_retire
|
||||
@@ -112,17 +113,23 @@ class PostSavePhotoVerificationTest(ModuleStoreTestCase):
|
||||
the verification attempt that was updated.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.user = UserFactory.create()
|
||||
self.photo_id_name = 'Bob Doe'
|
||||
self.face_image_url = 'https://test.face'
|
||||
self.photo_id_image_url = 'https://test.photo'
|
||||
self.photo_id_key = 'test+key'
|
||||
|
||||
@patch('lms.djangoapps.verify_student.signals.idv_update_signal.send')
|
||||
def test_post_save_signal(self, mock_signal):
|
||||
user = UserFactory.create()
|
||||
|
||||
# create new softwaresecureverification
|
||||
attempt = SoftwareSecurePhotoVerification.objects.create(
|
||||
user=user,
|
||||
name='Bob Doe',
|
||||
face_image_url='https://test.face',
|
||||
photo_id_image_url='https://test.photo',
|
||||
photo_id_key='test+key'
|
||||
user=self.user,
|
||||
name=self.photo_id_name,
|
||||
face_image_url=self.face_image_url,
|
||||
photo_id_image_url=self.photo_id_image_url,
|
||||
photo_id_key=self.photo_id_key
|
||||
)
|
||||
self.assertTrue(mock_signal.called)
|
||||
mock_signal.assert_called_with(
|
||||
@@ -130,8 +137,8 @@ class PostSavePhotoVerificationTest(ModuleStoreTestCase):
|
||||
attempt_id=attempt.id,
|
||||
user_id=attempt.user.id,
|
||||
status=attempt.status,
|
||||
full_name=attempt.name,
|
||||
profile_name=attempt.user.profile.name
|
||||
photo_id_name=attempt.name,
|
||||
full_name=attempt.user.profile.name
|
||||
)
|
||||
mock_signal.reset_mock()
|
||||
|
||||
@@ -143,6 +150,27 @@ class PostSavePhotoVerificationTest(ModuleStoreTestCase):
|
||||
attempt_id=attempt.id,
|
||||
user_id=attempt.user.id,
|
||||
status=attempt.status,
|
||||
full_name=attempt.name,
|
||||
profile_name=attempt.user.profile.name
|
||||
photo_id_name=attempt.name,
|
||||
full_name=attempt.user.profile.name
|
||||
)
|
||||
|
||||
@patch('lms.djangoapps.verify_student.signals.idv_update_signal.send')
|
||||
def test_post_save_signal_pending_name(self, mock_signal):
|
||||
pending_name_change = do_name_change_request(self.user, 'Pending Name', 'test')[0]
|
||||
|
||||
attempt = SoftwareSecurePhotoVerification.objects.create(
|
||||
user=self.user,
|
||||
name=self.photo_id_name,
|
||||
face_image_url=self.face_image_url,
|
||||
photo_id_image_url=self.photo_id_image_url,
|
||||
photo_id_key=self.photo_id_key
|
||||
)
|
||||
|
||||
mock_signal.assert_called_with(
|
||||
sender='idv_update',
|
||||
attempt_id=attempt.id,
|
||||
user_id=attempt.user.id,
|
||||
status=attempt.status,
|
||||
photo_id_name=attempt.name,
|
||||
full_name=pending_name_change.new_name
|
||||
)
|
||||
|
||||
@@ -455,7 +455,7 @@ edx-i18n-tools==0.7.0
|
||||
# via ora2
|
||||
edx-milestones==0.3.2
|
||||
# via -r requirements/edx/base.in
|
||||
edx-name-affirmation==0.9.1
|
||||
edx-name-affirmation==0.9.2
|
||||
# via -r requirements/edx/base.in
|
||||
edx-opaque-keys[django]==2.2.2
|
||||
# via
|
||||
|
||||
@@ -559,7 +559,7 @@ edx-lint==5.1.0
|
||||
# via -r requirements/edx/testing.txt
|
||||
edx-milestones==0.3.2
|
||||
# via -r requirements/edx/testing.txt
|
||||
edx-name-affirmation==0.9.1
|
||||
edx-name-affirmation==0.9.2
|
||||
# via -r requirements/edx/testing.txt
|
||||
edx-opaque-keys[django]==2.2.2
|
||||
# via
|
||||
|
||||
@@ -541,7 +541,7 @@ edx-lint==5.1.0
|
||||
# via -r requirements/edx/testing.in
|
||||
edx-milestones==0.3.2
|
||||
# via -r requirements/edx/base.txt
|
||||
edx-name-affirmation==0.9.1
|
||||
edx-name-affirmation==0.9.2
|
||||
# via -r requirements/edx/base.txt
|
||||
edx-opaque-keys[django]==2.2.2
|
||||
# via
|
||||
|
||||
Reference in New Issue
Block a user