def _update_profile(request): """Update a user's profile information. Args: request (HttpRequest) Returns: HttpResponse """ put = QueryDict(request.body) username = request.user.username new_name = put.get('fullName') if new_name is None: return HttpResponseBadRequest("Missing param 'fullName'") try: profile_api.update_profile(username, full_name=new_name) except profile_api.ProfileInvalidField: return HttpResponseBadRequest() except profile_api.ProfileUserNotFound: return HttpResponseServerError() # A 204 is intended to allow input for actions to take place # without causing a change to the user agent's active document view. return HttpResponse(status=204)
def test_record_name_change_history(self): account_api.create_account(self.USERNAME, self.PASSWORD, self.EMAIL) # Change the name once # Since the original name was an empty string, expect that the list # of old names is empty profile_api.update_profile(self.USERNAME, full_name='new name') meta = UserProfile.objects.get(user__username=self.USERNAME).get_meta() self.assertEqual(meta, {}) # Change the name again and expect the new name is stored in the history profile_api.update_profile(self.USERNAME, full_name='another new name') meta = UserProfile.objects.get(user__username=self.USERNAME).get_meta() self.assertEqual(len(meta['old_names']), 1) name, rationale, timestamp = meta['old_names'][0] self.assertEqual(name, 'new name') self.assertEqual(rationale, u'') self._assert_is_datetime(timestamp) # Change the name a third time and expect both names are stored in the history profile_api.update_profile(self.USERNAME, full_name='yet another new name') meta = UserProfile.objects.get(user__username=self.USERNAME).get_meta() self.assertEqual(len(meta['old_names']), 2) name, rationale, timestamp = meta['old_names'][1] self.assertEqual(name, 'another new name') self.assertEqual(rationale, u'') self._assert_is_datetime(timestamp)
def name_change_handler(request): """Change the user's name. Args: request (HttpRequest) Returns: HttpResponse: 204 if successful HttpResponse: 302 if not logged in (redirect to login page) HttpResponse: 400 if the provided name is invalid HttpResponse: 405 if using an unsupported HTTP method HttpResponse: 500 if an unexpected error occurs. Example: PUT /profile/name_change """ put = QueryDict(request.body) username = request.user.username new_name = put.get('new_name') if new_name is None: return HttpResponseBadRequest("Missing param 'new_name'") try: profile_api.update_profile(username, full_name=new_name) except profile_api.ProfileInvalidField: return HttpResponseBadRequest() except profile_api.ProfileUserNotFound: return HttpResponseServerError() # A 204 is intended to allow input for actions to take place # without causing a change to the user agent's active document view. return HttpResponse(status=204)
def test_update_profile_no_user(self): profile_api.update_profile(self.USERNAME, full_name='test')
def test_update_full_name_invalid(self, invalid_name): account_api.create_account(self.USERNAME, self.PASSWORD, self.EMAIL) profile_api.update_profile(self.USERNAME, full_name=invalid_name)
def test_update_full_name(self): account_api.create_account(self.USERNAME, self.PASSWORD, self.EMAIL) profile_api.update_profile(self.USERNAME, full_name=u'ȻħȺɍłɇs') profile = profile_api.profile_info(self.USERNAME) self.assertEqual(profile['full_name'], u'ȻħȺɍłɇs')