From 803a396e11f94b9c9b01c32472d8a58b94410b68 Mon Sep 17 00:00:00 2001 From: Simon chen Date: Tue, 1 May 2018 13:13:48 -0400 Subject: [PATCH] Create deletion method for the PendingNameChange model to comply with GDPR --- common/djangoapps/student/models.py | 2 +- .../djangoapps/student/tests/test_models.py | 37 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/common/djangoapps/student/models.py b/common/djangoapps/student/models.py index 58279203ce..76cdbbba52 100644 --- a/common/djangoapps/student/models.py +++ b/common/djangoapps/student/models.py @@ -671,7 +671,7 @@ class Registration(models.Model): analytics.identify(*identity_args) -class PendingNameChange(models.Model): +class PendingNameChange(DeletableByUserValue, models.Model): user = models.OneToOneField(User, unique=True, db_index=True) new_name = models.CharField(blank=True, max_length=255) rationale = models.CharField(blank=True, max_length=1024) diff --git a/common/djangoapps/student/tests/test_models.py b/common/djangoapps/student/tests/test_models.py index 93f1d4bb3e..4dd0804a7f 100644 --- a/common/djangoapps/student/tests/test_models.py +++ b/common/djangoapps/student/tests/test_models.py @@ -20,7 +20,12 @@ from openedx.core.djangoapps.content.course_overviews.models import CourseOvervi from openedx.core.djangoapps.schedules.models import Schedule from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory from openedx.core.djangolib.testing.utils import skip_unless_lms -from student.models import CourseEnrollment, CourseEnrollmentAllowed, PendingEmailChange +from student.models import ( + CourseEnrollment, + CourseEnrollmentAllowed, + PendingEmailChange, + PendingNameChange +) from student.tests.factories import CourseEnrollmentFactory, UserFactory from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory @@ -201,6 +206,35 @@ class CourseEnrollmentTests(SharedModuleStoreTestCase): self.assertIsNone(enrollment.upgrade_deadline) +class PendingNameChangeTests(SharedModuleStoreTestCase): + """ + Tests the deletion of PendingNameChange records + """ + @classmethod + def setUpClass(cls): + super(PendingNameChangeTests, cls).setUpClass() + cls.user = UserFactory() + cls.user2 = UserFactory() + + def setUp(self): + self.name_change, _ = PendingNameChange.objects.get_or_create( + user=self.user, + new_name='New Name PII', + rationale='for testing!' + ) + self.assertEqual(1, len(PendingNameChange.objects.all())) + + def test_delete_by_user_removes_pending_name_change(self): + record_was_deleted = PendingNameChange.delete_by_user_value(self.user, field='user') + self.assertTrue(record_was_deleted) + self.assertEqual(0, len(PendingNameChange.objects.all())) + + def test_delete_by_user_no_effect_for_user_with_no_name_change(self): + record_was_deleted = PendingNameChange.delete_by_user_value(self.user2, field='user') + self.assertFalse(record_was_deleted) + self.assertEqual(1, len(PendingNameChange.objects.all())) + + class PendingEmailChangeTests(SharedModuleStoreTestCase): """ Tests the deletion of PendingEmailChange records. @@ -208,7 +242,6 @@ class PendingEmailChangeTests(SharedModuleStoreTestCase): @classmethod def setUpClass(cls): super(PendingEmailChangeTests, cls).setUpClass() - cls.course = CourseFactory() cls.user = UserFactory() cls.user2 = UserFactory()