def test_empty_string_userprofile_creates_nonexistent_custom_fields(self):
        # If a user profile is submitted that contains empty string custom
        # fields that didn't exist previously, in that case those fields should
        # be created with the empty value

        user = User.objects.get(username='******')
        # remove user custom fields

        CustomField.objects.create(id='extra',
                                   type='str',
                                   required=True,
                                   label='Required')

        UserProfileCustomField.objects.filter(user=user).delete()
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'country'), None)
        self.assertEqual(UserProfileCustomField.get_user_value(user, 'extra'),
                         None)
        self.client.force_login(self.admin_user)

        with open(self.activity_with_empty_userinfo, 'rb') as alf:
            response = self.client.post(self.url, {'activity_log_file': alf})

        # should be redirected to the success page
        self.assert_redirects_success(response)
        # "extra" field is required, so the CustomField is created anyway
        self.assertEqual(UserProfileCustomField.get_user_value(user, 'extra'),
                         '')
        # Country field is not required, so is not created with an empty value
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'country'), None)
    def test_empty_userprofile_doesnt_update_fields(self):

        user = User.objects.get(username='******')
        userprofile = UserProfile.objects.get(user=user)
        userprofile.phone_number = '123456789'
        userprofile.organisation = 'home'
        userprofile.save()

        self.client.force_login(self.admin_user)

        with open(self.basic_activity_log, 'rb') as activity_log_file:
            response = self.client.post(
                self.url, {'activity_log_file': activity_log_file})

        # should be redirected to the success page
        self.assert_redirects_success(response)

        userprofile = UserProfile.objects.get(user=user)
        self.assertEqual(userprofile.phone_number, '123456789')
        self.assertEqual(userprofile.organisation, 'home')
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'country'), 'FI')
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'agree_to_terms'),
            None)
Пример #3
0
    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")
Пример #4
0
    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_existing_user_empty_fields_override(self):
        self.client.force_login(user=self.admin_user)
        with open(self.all_fields, 'rb') as upload_user_file:
            upload_file = SimpleUploadedFile(upload_user_file.name,
                                             upload_user_file.read())

        user = User.objects.get(username='******')
        # Remove any existing field
        UserProfileCustomField.objects.filter(user=user).delete()

        self.client.post(self.url, {
            'upload_file': upload_file,
            'only_update': False
        })

        user = User.objects.get(username='******')
        profile = UserProfile.objects.get(user=user)

        self.assertEqual(user.first_name, 'UpdatedName')
        self.assertEqual(user.last_name, 'UpdatedLastname')
        self.assertEqual(profile.phone_number, '555555555')
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'country'), 'Portugal')
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'agree_to_terms'),
            True)
        self.assertEqual(UserProfileCustomField.get_user_value(user, 'age'),
                         99)
Пример #7
0
 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())
Пример #8
0
 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())
Пример #9
0
    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))
Пример #10
0
    def test_existing_user_nonempty_fields_only_update(self):
        self.client.force_login(user=self.admin_user)
        with open(self.all_fields, 'rb') as upload_user_file:
            upload_file = SimpleUploadedFile(upload_user_file.name,
                                             upload_user_file.read())

        user = User.objects.get(username='******')
        user.first_name = 'firstname'
        user.last_name = 'lastname'
        user.save()

        profile = UserProfile.objects.get(user=user)
        profile.phone_number = '000000000'
        profile.save()

        # Remove any existing custom field
        UserProfileCustomField.objects.filter(user=user).delete()

        UserProfileCustomField.objects.create(
            user=user,
            key_name=CustomField.objects.get(id='country'),
            value_str='Spain')
        UserProfileCustomField.objects.create(
            user=user,
            key_name=CustomField.objects.get(id='agree_to_terms'),
            value_bool=False)
        UserProfileCustomField.objects.create(
            user=user,
            key_name=CustomField.objects.get(id='age'),
            value_int=30)

        self.client.post(self.url, {
            'upload_file': upload_file,
            'only_update': True
        })

        user = User.objects.get(username='******')
        profile = UserProfile.objects.get(user=user)

        self.assertEqual(user.first_name, 'firstname')
        self.assertEqual(user.last_name, 'lastname')
        self.assertEqual(profile.phone_number, '000000000')
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'country'), 'Spain')
        self.assertEqual(
            UserProfileCustomField.get_user_value(user, 'agree_to_terms'),
            False)
        self.assertEqual(UserProfileCustomField.get_user_value(user, 'age'),
                         30)
Пример #11
0
    def test_userprofile_updated(self):

        self.client.force_login(self.admin_user)

        with open(self.activity_with_userinfo, 'rb') as activity_log_file:
            response = self.client.post(self.url,
                                        {'activity_log_file':
                                         activity_log_file})

        # should be redirected to the success page
        self.assert_redirects_success(response)

        user = User.objects.get(username='******')
        userprofile = UserProfile.objects.get(user=user)
        self.assertEqual(userprofile.phone_number, '123456789')
        self.assertEqual(userprofile.organisation, 'home')
        self.assertEqual(UserProfileCustomField.get_user_value(user, 'country'), 'ES')
        self.assertEqual(UserProfileCustomField.get_user_value(user, 'agree_to_terms'), True)
Пример #12
0
    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())
Пример #13
0
 def test_wrong_type_str_in_int(self):
     custom_field = CustomField(id='int',
                                label='Integer',
                                required=True,
                                type='int')
     custom_field.save()
     with self.assertRaises(ValueError):
         UserProfileCustomField(key_name=custom_field,
                                user=self.normal_user,
                                value_int=self.VALUE_STR_DEFAULT).save()
Пример #14
0
 def test_wrong_type_str_in_bool(self):
     custom_field = CustomField(id='bool',
                                label='Boolean',
                                required=True,
                                type='bool')
     custom_field.save()
     with self.assertRaises(ValidationError):
         UserProfileCustomField(key_name=custom_field,
                                user=self.normal_user,
                                value_bool=self.VALUE_STR_DEFAULT).save()
Пример #15
0
    def test_custom_fields(self):
        self.client.force_login(user=self.admin_user)
        with open(self.custom_fields, 'rb') as upload_user_file:
            upload_file = SimpleUploadedFile(upload_user_file.name,
                                             upload_user_file.read())

        user_count_start = User.objects.all().count()

        self.client.post(self.url, {'upload_file': upload_file,
                                    'only_update': True})

        user_count_end = User.objects.all().count()
        self.assertEqual(user_count_start+2, user_count_end)

        # check the user data
        user100 = User.objects.get(username='******')
        self.assertEqual(user100.userprofile.phone_number, "+0123456789")
        self.assertEqual(UserProfileCustomField.get_user_value(
            user100, 'country'), "Sweden")
        self.assertEqual(UserProfileCustomField.get_user_value(
            user100, 'age'), 24)
        self.assertTrue(UserProfileCustomField.get_user_value(
            user100, 'agree_to_terms'))

        user101 = User.objects.get(username='******')
        self.assertEqual(user101.userprofile.phone_number, "+987654321")
        self.assertEqual(UserProfileCustomField.get_user_value(
            user101, 'country'), "Iceland")
        self.assertEqual(UserProfileCustomField.get_user_value(
            user101, 'age'), 30)
        self.assertFalse(UserProfileCustomField.get_user_value(
            user101, 'agree_to_terms'))
Пример #16
0
    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_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")
Пример #18
0
 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)
Пример #19
0
    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)))
Пример #20
0
    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)
Пример #21
0
    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)
Пример #22
0
    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()
Пример #23
0
    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)
Пример #24
0
    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()