def post(self, request): """ POST /api/user/v1/accounts/retire_misc/ { 'username': '******' } Retires the user with the given username in the LMS. """ username = request.data['username'] try: retirement = UserRetirementStatus.get_retirement_for_retirement_action( username) RevisionPluginRevision.retire_user(retirement.user) ArticleRevision.retire_user(retirement.user) PendingNameChange.delete_by_user_value(retirement.user, field='user') PasswordHistory.retire_user(retirement.user.id) course_enrollments = CourseEnrollment.objects.filter( user=retirement.user) ManualEnrollmentAudit.retire_manual_enrollments( course_enrollments, retirement.retired_email) CreditRequest.retire_user(retirement) ApiAccessRequest.retire_user(retirement.user) CreditRequirementStatus.retire_user(retirement) # This signal allows code in higher points of LMS to retire the user as necessary USER_RETIRE_LMS_MISC.send(sender=self.__class__, user=retirement.user) # This signal allows code in higher points of LMS to unsubscribe the user # from various types of mailings. USER_RETIRE_MAILINGS.send(sender=self.__class__, email=retirement.original_email, new_email=retirement.retired_email, user=retirement.user) except UserRetirementStatus.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) except RetirementStateError as exc: return Response(text_type(exc), status=status.HTTP_400_BAD_REQUEST) except Exception as exc: # pylint: disable=broad-except return Response(text_type(exc), status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_204_NO_CONTENT)
def post(self, request): """ POST /api/user/v1/accounts/retire_misc/ { 'username': '******' } Retires the user with the given username in the LMS. """ username = request.data['username'] try: retirement = UserRetirementStatus.get_retirement_for_retirement_action(username) RevisionPluginRevision.retire_user(retirement.user) ArticleRevision.retire_user(retirement.user) PendingNameChange.delete_by_user_value(retirement.user, field='user') PasswordHistory.retire_user(retirement.user.id) course_enrollments = CourseEnrollment.objects.filter(user=retirement.user) ManualEnrollmentAudit.retire_manual_enrollments(course_enrollments, retirement.retired_email) CreditRequest.retire_user(retirement.original_username, retirement.retired_username) ApiAccessRequest.retire_user(retirement.user) CreditRequirementStatus.retire_user(retirement.user.username) # This signal allows code in higher points of LMS to retire the user as necessary USER_RETIRE_LMS_MISC.send(sender=self.__class__, user=retirement.user) # This signal allows code in higher points of LMS to unsubscribe the user # from various types of mailings. USER_RETIRE_MAILINGS.send( sender=self.__class__, email=retirement.original_email, new_email=retirement.retired_email, user=retirement.user ) except UserRetirementStatus.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) except RetirementStateError as exc: return Response(text_type(exc), status=status.HTTP_400_BAD_REQUEST) except Exception as exc: # pylint: disable=broad-except return Response(text_type(exc), status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_204_NO_CONTENT)
def post(self, request): """ POST /api/user/v1/accounts/retire_misc/ { 'username': '******' } Retires the user with the given username in the LMS. """ username = request.data['username'] if is_username_retired(username): return Response(status=status.HTTP_404_NOT_FOUND) try: retirement = UserRetirementStatus.get_retirement_for_retirement_action( username) RevisionPluginRevision.retire_user(retirement.user) ArticleRevision.retire_user(retirement.user) PendingNameChange.delete_by_user_value(retirement.user, field='user') PasswordHistory.retire_user(retirement.user.id) course_enrollments = CourseEnrollment.objects.filter( user=retirement.user) ManualEnrollmentAudit.retire_manual_enrollments( course_enrollments, retirement.retired_email) CreditRequest.retire_user(retirement.original_username, retirement.retired_username) ApiAccessRequest.retire_user(retirement.user) CreditRequirementStatus.retire_user(retirement.user.username) SurveyAnswer.retire_user(retirement.user.id) except UserRetirementStatus.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) except RetirementStateError as exc: return Response(text_type(exc), status=status.HTTP_400_BAD_REQUEST) except Exception as exc: # pylint: disable=broad-except return Response(text_type(exc), status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_204_NO_CONTENT)
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() another_retirement = UserRetirementStatus.create_retirement( another_user) credit_request_before_retire = CreditRequest.objects.filter( username=self.retirement.original_username)[0] was_retired = CreditRequest.retire_user(another_retirement) credit_request_before_retire.refresh_from_db() assert not was_retired assert credit_request_before_retire.parameters == test_parameters
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() another_retirement = UserRetirementStatus.create_retirement(another_user) credit_request_before_retire = CreditRequest.objects.filter( username=self.retirement.original_username )[0] was_retired = CreditRequest.retire_user(another_retirement) credit_request_before_retire.refresh_from_db() self.assertFalse(was_retired) self.assertEqual(credit_request_before_retire.parameters, test_parameters)
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] assert credit_request_before_retire.parameters == test_parameters user_was_retired = CreditRequest.retire_user(self.retirement) credit_request_before_retire.refresh_from_db() credit_requests_after_retire = CreditRequest.objects.filter( username=self.retirement.original_username) assert user_was_retired assert credit_request_before_retire.parameters == {} assert not credit_requests_after_retire.exists()
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(self.retirement) credit_request_before_retire.refresh_from_db() credit_requests_after_retire = CreditRequest.objects.filter( username=self.retirement.original_username) self.assertTrue(user_was_retired) self.assertEqual(credit_request_before_retire.parameters, {}) self.assertFalse(credit_requests_after_retire.exists())
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(self.retirement) credit_request_before_retire.refresh_from_db() credit_requests_after_retire = CreditRequest.objects.filter( username=self.retirement.original_username ) self.assertTrue(user_was_retired) self.assertEqual(credit_request_before_retire.parameters, {}) self.assertFalse(credit_requests_after_retire.exists())