Implement retire users function in the SurveyAnswer model for GDPR

This commit is contained in:
Simon Chen
2018-04-30 11:54:10 -04:00
parent 2be587d32d
commit 174c01759f
2 changed files with 41 additions and 2 deletions

View File

@@ -239,8 +239,6 @@ class SurveyAnswer(TimeStampedModel):
supplied to this method is presumed to be previously validated
"""
for name in answers.keys():
value = answers[name]
# See if there is an answer stored for this user, form, field_name pair or not
# this will allow for update cases. This does include an additional lookup,
# but write operations will be relatively infrequent
@@ -261,3 +259,19 @@ class SurveyAnswer(TimeStampedModel):
answer.field_value = value
answer.course_key = course_key
answer.save()
@classmethod
def retire_user(cls, user_id):
"""
With the parameter user_id, blank out the survey answer values for all survey questions
This is to fulfill our GDPR obligations
Return True if there are data to be blanked
Return False if there are no matching data
"""
answers = cls.objects.filter(user=user_id)
if not answers:
return False
answers.update(field_value='')
return True

View File

@@ -280,3 +280,28 @@ class SurveyModelsTests(TestCase):
names = survey.get_field_names()
self.assertEqual(sorted(names), ['ddl', 'field1', 'field2'])
def test_retire_user_successful(self):
survey = self._create_test_survey()
self.assertIsNotNone(survey)
survey.save_user_answers(self.student, self.student_answers, self.course_id)
survey.save_user_answers(self.student2, self.student2_answers, self.course_id)
retire_result = SurveyAnswer.retire_user(self.student.id)
self.assertTrue(retire_result)
answers = survey.get_answers(self.student)
blanked_out_student_answser = {key: '' for key in self.student_answers}
self.assertEquals(answers[self.student.id], blanked_out_student_answser)
self.assertEquals(survey.get_answers(self.student2)[self.student2.id], self.student2_answers)
def test_retire_user_not_exist(self):
survey = self._create_test_survey()
self.assertIsNotNone(survey)
survey.save_user_answers(self.student, self.student_answers, self.course_id)
retire_result = SurveyAnswer.retire_user(self.student2.id)
self.assertFalse(retire_result)
answers = survey.get_answers(self.student)
self.assertEquals(answers[self.student.id], self.student_answers)