def test_edit_profile_not_req_str_change(self): custom_field = CustomField(id='str_not_req', label='String not required', required=False, type='str') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_str="my string") upcf.save() self.client.force_login(self.normal_user) post_data = { 'organisation': self.normal_user.userprofile.organisation, 'email': self.normal_user.email, 'username': self.normal_user.username, 'first_name': self.normal_user.first_name, 'last_name': self.normal_user.last_name, 'str_not_req': "my new string" } count_start = UserProfileCustomField.objects.all().count() response = self.client.post(self.url, data=post_data) self.assertEqual(response.status_code, 200) count_end = UserProfileCustomField.objects.all().count() self.assertEqual(count_start, count_end) updated_row = UserProfileCustomField.objects.get(key_name=custom_field, user=self.normal_user) self.assertEqual(updated_row.value_str, "my new string")
def test_edit_profile_req_bool_no_change(self): custom_field = CustomField(id='bool_req', label='Boolean required', required=True, type='bool') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_bool=True) upcf.save() self.client.force_login(self.normal_user) post_data = { 'organisation': self.normal_user.userprofile.organisation, 'email': self.normal_user.email, 'username': self.normal_user.username, 'first_name': self.normal_user.first_name, 'last_name': self.normal_user.last_name, 'bool_req': True } count_start = UserProfileCustomField.objects.all().count() response = self.client.post(self.url, data=post_data) self.assertEqual(response.status_code, 200) count_end = UserProfileCustomField.objects.all().count() self.assertEqual(count_start, count_end) updated_row = UserProfileCustomField.objects.get(key_name=custom_field, user=self.normal_user) self.assertEqual(updated_row.value_bool, True)
def test_edit_profile_req_bool_no_change(self): custom_field = CustomField(id='bool_req', label='Boolean required', required=True, type='bool') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.user, value_bool=True) upcf.save() post_data = self.base_data.copy() post_data['bool_req'] = True count_start = UserProfileCustomField.objects.all().count() response = self.api_client.post(self.url, format='json', data=post_data, authentication=self.get_credentials()) self.assertHttpCreated(response) count_end = UserProfileCustomField.objects.all().count() self.assertEqual(count_start, count_end) updated_row = UserProfileCustomField.objects.get(key_name=custom_field, user=self.user) self.assertEqual(updated_row.value_bool, True)
def test_wrong_type_int_in_str(self): custom_field = CustomField(id='str', label='String', required=True, type='str') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_str=123) upcf.save() self.assertEqual(123, upcf.get_value())
def test_wrong_type_int_in_bool_1(self): custom_field = CustomField(id='bool', label='Boolean', required=True, type='bool') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_bool=1) upcf.save() self.assertEqual(1, upcf.get_value())
def test_user_custom_field_model_name(self): custom_field = CustomField(id='str', label='String', required=True, type='str') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_str=self.VALUE_STR_DEFAULT) upcf.save() self.assertEqual('str: demo', str(upcf))
def test_wrong_type_bool_in_int(self): custom_field = CustomField(id='int', label='Integer', required=True, type='int') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_int=True) upcf.save() self.assertEqual(True, upcf.get_value()) upcf.value_int = False upcf.save() self.assertEqual(False, upcf.get_value())
def test_custom_field_get_value_int(self): custom_field = CustomField(id='int', label='Integer', required=True, type='int') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_int=123) upcf.save() self.assertEqual(upcf.get_value(), 123) self.assertNotEqual(upcf.get_value(), "123") self.assertNotEqual(upcf.get_value(), True) self.assertNotEqual(upcf.get_value(), False) self.assertNotEqual(upcf.get_value(), None)
def test_custom_field_multiple_rows(self): custom_field = CustomField(id='str', label='String', required=True, type='str') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_str=self.VALUE_STR_DEFAULT) upcf.save() with self.assertRaises(IntegrityError): upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_str="my other string") upcf.save()
def test_custom_field_get_value_bool(self): custom_field = CustomField(id='bool', label='Boolean', required=True, type='bool') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_bool=True) upcf.save() self.assertEqual(upcf.get_value(), True) self.assertNotEqual(upcf.get_value(), "True") self.assertNotEqual(upcf.get_value(), 123) self.assertNotEqual(upcf.get_value(), False) self.assertNotEqual(upcf.get_value(), None)
def test_custom_field_get_value_str(self): custom_field = CustomField(id='str', label='String', required=True, type='str') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_str=self.VALUE_STR_DEFAULT) upcf.save() self.assertEqual(upcf.get_value(), self.VALUE_STR_DEFAULT) self.assertNotEqual(upcf.get_value(), True) self.assertNotEqual(upcf.get_value(), False) self.assertNotEqual(upcf.get_value(), None) self.assertNotEqual(upcf.get_value(), 123)
def handle(self, *args, **options): custom_fields = CustomField.objects.all() with open(options['filepath'], newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: # check the user exists in db try: user = User.objects.get(username=row.get('username')) except User.DoesNotExist: print("user not found: ", row.get('username')) continue # update phone no user_profile = UserProfile.objects.get(user=user) if user_profile.phone_number == "" or user_profile.phone_number is None: user_profile.phone_number = row.get('phone_number') user_profile.save() print("%s: phone_number updated to %s" % (row.get("username"), row.get('phone_number'))) for cf in custom_fields: try: upcf = UserProfileCustomField.objects.get( user=user, key_name=cf.id) except UserProfileCustomField.DoesNotExist: upcf = UserProfileCustomField(user=user, key_name=cf) print("%s: adding customfield record for %s" % (row.get("username"), cf.id)) if cf.type == 'str' and (upcf.value_str is None or upcf.value_str == ""): upcf.value_str = row.get(cf.id) upcf.save() print("%s: %s updated to %s" % (row.get("username"), cf.id, row.get(cf.id))) if cf.type == 'int' and (upcf.value_int is None or upcf.value_int == ""): upcf.value_int = row.get(cf.id) upcf.save() print("%s: %s updated to %s" % (row.get("username"), cf.id, row.get(cf.id)))
def register_form_process(self, form): # Create new user username = form.cleaned_data.get("username") email = form.cleaned_data.get("email") password = form.cleaned_data.get("password") first_name = form.cleaned_data.get("first_name") last_name = form.cleaned_data.get("last_name") user = User.objects.create_user(username, email, password) user.first_name = first_name user.last_name = last_name user.save() # create UserProfile record UserProfile.objects.create( user = user, job_title =form.cleaned_data.get("job_title"), organisation =form.cleaned_data.get("organisation") ) # save any custom fields custom_fields = CustomField.objects.all() for custom_field in custom_fields: if custom_field.type == 'int': profile_field = UserProfileCustomField( key_name=custom_field, user=user, value_int=form.cleaned_data.get(custom_field.id)) elif custom_field.type == 'bool': profile_field = UserProfileCustomField( key_name=custom_field, user=user, value_bool=form.cleaned_data.get(custom_field.id)) else: profile_field = UserProfileCustomField( key_name=custom_field, user=user, value_str=form.cleaned_data.get(custom_field.id)) if (form.cleaned_data.get(custom_field.id) is not None and form.cleaned_data.get(custom_field.id) != '') \ or custom_field.required is True: profile_field.save()
def test_edit_profile_req_bool_change(self): custom_field = CustomField(id='bool_req', label='Boolean required', required=True, type='bool') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.normal_user, value_bool=True) upcf.save() self.client.force_login(self.normal_user) post_data = { 'organisation': self.normal_user.userprofile.organisation, 'email': self.normal_user.email, 'username': self.normal_user.username, 'first_name': self.normal_user.first_name, 'last_name': self.normal_user.last_name, 'bool_req': False } count_start = UserProfileCustomField.objects.all().count() self.client.post(self.url, data=post_data) self.assertRaises(ValidationError) count_end = UserProfileCustomField.objects.all().count() self.assertEqual(count_start, count_end)
def process_register_custom_fields(self, bundle): custom_fields = CustomField.objects.all() for custom_field in custom_fields: try: value = bundle.data[custom_field.id] except KeyError: continue if custom_field.type == 'int': profile_field = UserProfileCustomField(key_name=custom_field, user=bundle.obj, value_int=value) elif custom_field.type == 'bool': profile_field = UserProfileCustomField(key_name=custom_field, user=bundle.obj, value_bool=value) else: profile_field = UserProfileCustomField(key_name=custom_field, user=bundle.obj, value_str=value) if (value is not None and value != '') \ or custom_field.required is True: profile_field.save()
def test_edit_profile_not_req_str_change(self): custom_field = CustomField(id='str_not_req', label='String not required', required=False, type='str') custom_field.save() upcf = UserProfileCustomField(key_name=custom_field, user=self.user, value_str="my string") upcf.save() post_data = self.base_data.copy() post_data['str_not_req'] = "my new string" count_start = UserProfileCustomField.objects.all().count() response = self.api_client.post(self.url, format='json', data=post_data, authentication=self.get_credentials()) self.assertHttpCreated(response) count_end = UserProfileCustomField.objects.all().count() self.assertEqual(count_start, count_end) updated_row = UserProfileCustomField.objects.get(key_name=custom_field, user=self.user) self.assertEqual(updated_row.value_str, "my new string")