Skip to content
Snippets Groups Projects
Unverified Commit 26ab5959 authored by Alessandro Roux's avatar Alessandro Roux Committed by GitHub
Browse files

Merge pull request #18114 from edx/roux/creditrequest_model_retirement

EDUCATOR-2658: Adds retire_user to CreditRequest.
parents 7b76ab8a 4772dcf6
No related branches found
No related tags found
No related merge requests found
......@@ -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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment