Adds "retire_user" to CreditRequest.
This commit is contained in:
@@ -681,6 +681,21 @@ class CreditRequest(TimeStampedModel):
|
||||
unique_together = ('username', 'course', 'provider')
|
||||
get_latest_by = 'created'
|
||||
|
||||
@classmethod
|
||||
def retire_user(cls, original_username, retired_username):
|
||||
"""
|
||||
Obfuscates CreditRecord instances associated with `original_username`.
|
||||
Empties the records' `parameters` field and replaces username with its
|
||||
anonymized value, `retired_username`.
|
||||
"""
|
||||
num_updated_credit_requests = cls.objects.filter(
|
||||
username=original_username
|
||||
).update(
|
||||
username=retired_username,
|
||||
parameters={},
|
||||
)
|
||||
return num_updated_credit_requests > 0
|
||||
|
||||
@classmethod
|
||||
def credit_requests_for_user(cls, username):
|
||||
"""
|
||||
|
||||
@@ -10,6 +10,9 @@ from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from openedx.core.djangoapps.credit.models import CreditCourse, CreditRequirement, CreditRequirementStatus
|
||||
from student.models import get_retired_username_by_username
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
from ..models import CreditRequest, CreditProvider, CreditCourse
|
||||
|
||||
|
||||
def add_credit_course(course_key):
|
||||
@@ -145,7 +148,9 @@ class CreditRequirementStatusTests(TestCase):
|
||||
retirement_succeeded = CreditRequirementStatus.retire_user(self.old_username)
|
||||
self.assertTrue(retirement_succeeded)
|
||||
|
||||
old_username_records_exist = CreditRequirementStatus.objects.filter(username=self.old_username).exists()
|
||||
old_username_records_exist = CreditRequirementStatus.objects.filter(
|
||||
username=self.old_username
|
||||
).exists()
|
||||
self.assertFalse(old_username_records_exist)
|
||||
|
||||
new_username_records_exist = CreditRequirementStatus.objects.filter(username=self.retired_username).exists()
|
||||
@@ -154,3 +159,66 @@ class CreditRequirementStatusTests(TestCase):
|
||||
def test_retire_user_with_data(self):
|
||||
retirement_succeeded = CreditRequirementStatus.retire_user(self.retired_username)
|
||||
self.assertFalse(retirement_succeeded)
|
||||
|
||||
|
||||
class CreditRequestTest(TestCase):
|
||||
"""
|
||||
The CreditRequest model's test suite.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(CreditRequestTest, self).setUp()
|
||||
self.user = UserFactory.create()
|
||||
self.credit_course = CreditCourse.objects.create()
|
||||
self.provider = CreditProvider.objects.create()
|
||||
|
||||
def test_can_retire_user_from_credit_request(self):
|
||||
test_parameters = {'hi': 'there'}
|
||||
CreditRequest.objects.create(
|
||||
username=self.user.username,
|
||||
course=self.credit_course,
|
||||
provider=self.provider,
|
||||
parameters=test_parameters,
|
||||
)
|
||||
|
||||
credit_request_before_retire = CreditRequest.objects.filter(
|
||||
username=self.user.username
|
||||
)[0]
|
||||
|
||||
self.assertEqual(credit_request_before_retire.parameters, test_parameters)
|
||||
|
||||
user_was_retired = CreditRequest.retire_user(
|
||||
original_username=self.user.username,
|
||||
retired_username=get_retired_username_by_username(self.user.username)
|
||||
)
|
||||
credit_request_before_retire.refresh_from_db()
|
||||
credit_requests_after_retire = CreditRequest.objects.filter(
|
||||
username=self.user.username
|
||||
)
|
||||
|
||||
self.assertTrue(user_was_retired)
|
||||
self.assertEqual(credit_request_before_retire.parameters, {})
|
||||
self.assertFalse(credit_requests_after_retire.exists())
|
||||
|
||||
def test_cannot_retire_nonexistent_user(self):
|
||||
test_parameters = {'hi': 'there'}
|
||||
CreditRequest.objects.create(
|
||||
username=self.user.username,
|
||||
course=self.credit_course,
|
||||
provider=self.provider,
|
||||
parameters=test_parameters,
|
||||
)
|
||||
another_user = UserFactory.create()
|
||||
|
||||
credit_request_before_retire = CreditRequest.objects.filter(
|
||||
username=self.user.username
|
||||
)[0]
|
||||
|
||||
was_retired = CreditRequest.retire_user(
|
||||
original_username=another_user.username,
|
||||
retired_username=get_retired_username_by_username(another_user.username)
|
||||
)
|
||||
credit_request_before_retire.refresh_from_db()
|
||||
|
||||
self.assertFalse(was_retired)
|
||||
self.assertEqual(credit_request_before_retire.parameters, test_parameters)
|
||||
|
||||
Reference in New Issue
Block a user