def test_form_with_localsite(self): """Testing DefaultReviewerForm with a LocalSite""" test_site = LocalSite.objects.create(name="test") tool = Tool.objects.get(name="CVS") repo = Repository.objects.create(name="Test", path="path", tool=tool, local_site=test_site) user = User.objects.create(username="******", password="") test_site.users.add(user) group = Group.objects.create(name="test", display_name="Test", local_site=test_site) form = DefaultReviewerForm( data={ "name": "Test", "file_regex": ".*", "local_site": test_site.pk, "repository": [repo.pk], "people": [user.pk], "groups": [group.pk], }, local_site=test_site, ) self.assertTrue(form.is_valid()) default_reviewer = form.save() self.assertEqual(default_reviewer.local_site, test_site) self.assertEqual(default_reviewer.repository.get(), repo) self.assertEqual(default_reviewer.people.get(), user) self.assertEqual(default_reviewer.groups.get(), group)
def test_form_with_localsite_and_bad_group(self): """Testing DefaultReviewerForm with a Group not on the same LocalSite """ test_site = LocalSite.objects.create(name="test") group = Group.objects.create(name="test", display_name="Test") form = DefaultReviewerForm( data={"name": "Test", "file_regex": ".*", "local_site": test_site.pk, "groups": [group.pk]} ) self.assertFalse(form.is_valid()) group.local_site = test_site group.save() form = DefaultReviewerForm(data={"name": "Test", "file_regex": ".*", "groups": [group.pk]}) self.assertFalse(form.is_valid())
def test_form_with_localsite_and_bad_repository(self): """Testing DefaultReviewerForm with a Repository not on the same LocalSite """ test_site = LocalSite.objects.create(name="test") tool = Tool.objects.get(name="CVS") repo = Repository.objects.create(name="Test", path="path", tool=tool) form = DefaultReviewerForm( data={"name": "Test", "file_regex": ".*", "local_site": test_site.pk, "repository": [repo.pk]} ) self.assertFalse(form.is_valid()) repo.local_site = test_site repo.save() form = DefaultReviewerForm(data={"name": "Test", "file_regex": ".*", "repository": [repo.pk]}) self.assertFalse(form.is_valid())
def test_form_with_positional_argument(self): """Testing DefaultReviewerForm when passing data as a positional argument """ # This was a regression caused by the change to add the new related # user selector. form = DefaultReviewerForm({"name": "test", "file_regex": ".*"}) self.assertTrue(form.is_valid())
def test_with_localsite_in_data(self): """Testing DefaultReviewerForm with a LocalSite in form data""" # Make sure the initial state and querysets are what we expect on init. form = DefaultReviewerForm() self.assertIsNone(form.limited_to_local_site) self.assertIn('local_site', form.fields) self.assertEqual(list(form.fields['repository'].queryset), [self.local_site_repo, self.global_site_repo]) self.assertEqual(list(form.fields['people'].queryset), [self.local_site_user, self.global_site_user]) self.assertEqual(list(form.fields['groups'].queryset), [self.local_site_group, self.global_site_group]) self.assertIsNone(form.fields['people'].widget.local_site_name) # Now test what happens when it's been fed data and validated. form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'local_site': self.local_site.pk, 'repository': [self.local_site_repo.pk], 'people': [self.local_site_user.pk], 'groups': [self.local_site_group.pk], }) self.assertIsNone(form.limited_to_local_site) self.assertIn('local_site', form.fields) self.assertEqual(list(form.fields['repository'].queryset), [self.local_site_repo, self.global_site_repo]) self.assertEqual(list(form.fields['people'].queryset), [self.local_site_user, self.global_site_user]) self.assertEqual(list(form.fields['groups'].queryset), [self.local_site_group, self.global_site_group]) self.assertIsNone(form.fields['people'].widget.local_site_name) self.assertTrue(form.is_valid()) # Make sure any overridden querysets have been restored, so users can # still change entries. self.assertEqual(list(form.fields['repository'].queryset), [self.local_site_repo, self.global_site_repo]) self.assertEqual(list(form.fields['people'].queryset), [self.local_site_user, self.global_site_user]) self.assertEqual(list(form.fields['groups'].queryset), [self.local_site_group, self.global_site_group]) self.assertIsNone(form.fields['people'].widget.local_site_name) default_reviewer = form.save() self.assertEqual(default_reviewer.local_site, self.local_site) self.assertEqual(list(default_reviewer.repository.all()), [self.local_site_repo]) self.assertEqual(list(default_reviewer.people.all()), [self.local_site_user]) self.assertEqual(list(default_reviewer.groups.all()), [self.local_site_group])
def test_form_with_localsite_and_bad_user(self): """Testing DefaultReviewerForm with a User not on the same LocalSite """ test_site = LocalSite.objects.create(name="test") user = User.objects.create(username="******", password="") form = DefaultReviewerForm( data={"name": "Test", "file_regex": ".*", "local_site": test_site.pk, "people": [user.pk]} ) self.assertFalse(form.is_valid())
def test_without_localsite_and_with_local_site_user(self): """Testing DefaultReviewerForm without a LocalSite and User on a LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'people': [self.local_site_user.pk], }) # Note that unlike others, this scenario is allowed. self.assertTrue(form.is_valid())
def test_with_limited_localsite_and_invalid_user(self): """Testing DefaultReviewerForm limited to a LocalSite with a User not on the LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'people': [self.global_site_user.pk], }, limit_to_local_site=self.local_site) self.assertFalse(form.is_valid()) self.assertEqual(form.errors, { 'people': ['A user with ID 2 was not found.'], })
def test_with_localsite_in_data_and_invalid_user(self): """Testing DefaultReviewerForm with a LocalSite in form data and User not on the LocalSite """ form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'local_site': self.local_site.pk, 'people': [self.global_site_user.pk], }) self.assertFalse(form.is_valid()) self.assertEqual(form.errors, { 'people': ['A user with ID 2 was not found.'], })
def test_without_localsite_and_with_local_site_repo(self): """Testing DefaultReviewerForm without a LocalSite and Repository on a LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'repository': [self.local_site_repo.pk], }) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'repository': ['A repository with ID 1 was not found.'], })
def test_form_with_localsite_and_bad_group(self): """Testing DefaultReviewerForm with a Group not on the same LocalSite """ test_site = LocalSite.objects.create(name='test') group = Group.objects.create(name='test', display_name='Test') form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'local_site': test_site.pk, 'groups': [group.pk], }) self.assertFalse(form.is_valid()) group.local_site = test_site group.save() form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'groups': [group.pk], }) self.assertFalse(form.is_valid())
def test_with_localsite_in_data_and_invalid_user(self): """Testing DefaultReviewerForm with a LocalSite in form data and User not on the LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'local_site': self.local_site.pk, 'people': [self.global_site_user.pk], }) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'people': ['A user with ID 2 was not found.'], })
def test_without_localsite_and_with_local_site_group(self): """Testing DefaultReviewerForm without a LocalSite and Group on a LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'groups': [self.local_site_group.pk], }) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'groups': ['Select a valid choice. 1 is not one of the ' 'available choices.'], })
def test_form_with_localsite_and_bad_user(self): """Testing DefaultReviewerForm with a User not on the same LocalSite """ test_site = LocalSite.objects.create(name='test') user = User.objects.create_user(username='******', password='', email='*****@*****.**') form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'local_site': test_site.pk, 'people': [user.pk], }) self.assertFalse(form.is_valid())
def test_without_localsite_and_instance(self): """Testing DefaultReviewerForm without a LocalSite and editing instance """ default_reviewer = DefaultReviewer.objects.create( name='Test', file_regex='.*', local_site=self.local_site) form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', }, instance=default_reviewer) self.assertTrue(form.is_valid()) new_default_reviewer = form.save() self.assertEqual(default_reviewer.pk, new_default_reviewer.pk) self.assertIsNone(new_default_reviewer.local_site)
def test_with_limited_localsite_and_invalid_repo(self): """Testing DefaultReviewerForm limited to a LocalSite with a Repository not on the LocalSite """ form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'repository': [self.global_site_repo.pk], }, limit_to_local_site=self.local_site) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'repository': ['A repository with ID 2 was not found.'], })
def test_with_localsite_in_data_and_invalid_group(self): """Testing DefaultReviewerForm with a LocalSite in form data and Group not on the LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'local_site': self.local_site.pk, 'groups': [self.global_site_group.pk], }) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'groups': ['Select a valid choice. 2 is not one of the ' 'available choices.'], })
def test_with_localsite_in_data_and_instance(self): """Testing DefaultReviewerform with a LocalSite in form data and editing instance """ default_reviewer = DefaultReviewer.objects.create(name='Test', file_regex='.*') form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'local_site': self.local_site.pk, }, instance=default_reviewer) self.assertTrue(form.is_valid()) new_default_reviewer = form.save() self.assertEqual(default_reviewer.pk, new_default_reviewer.pk) self.assertEqual(new_default_reviewer.local_site, self.local_site)
def test_with_limited_localsite_and_invalid_group(self): """Testing DefaultReviewerForm limited to a LocalSite with a Group not on the LocalSite """ form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'groups': [self.global_site_group.pk], }, limit_to_local_site=self.local_site) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'groups': [ 'Select a valid choice. 2 is not one of the ' 'available choices.' ], })
def test_without_localsite_and_with_local_site_group(self): """Testing DefaultReviewerForm without a LocalSite and Group on a LocalSite """ form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'groups': [self.local_site_group.pk], }) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'groups': [ 'Select a valid choice. 1 is not one of the ' 'available choices.' ], })
def test_with_limited_localsite_and_changing_site(self): """Testing DefaultReviewerForm limited to a LocalSite and changing LocalSite """ site2 = LocalSite.objects.create(name='test-site-2') form = DefaultReviewerForm(data={ 'name': 'Test', 'file_regex': '.*', 'local_site': site2, }, limit_to_local_site=self.local_site) self.assertEqual(form.limited_to_local_site, self.local_site) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data['local_site'], self.local_site) default_reviewer = form.save() self.assertEqual(default_reviewer.local_site, self.local_site)
def test_without_localsite_and_instance(self): """Testing DefaultReviewerForm without a LocalSite and editing instance """ default_reviewer = DefaultReviewer.objects.create( name='Test', file_regex='.*', local_site=self.local_site) form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', }, instance=default_reviewer) self.assertTrue(form.is_valid()) new_default_reviewer = form.save() self.assertEqual(default_reviewer.pk, new_default_reviewer.pk) self.assertIsNone(new_default_reviewer.local_site)
def test_with_limited_localsite_and_changing_site(self): """Testing DefaultReviewerForm limited to a LocalSite and changing LocalSite """ site2 = LocalSite.objects.create(name='test-site-2') form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'local_site': site2, }, limit_to_local_site=self.local_site) self.assertEqual(form.limited_to_local_site, self.local_site) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data['local_site'], self.local_site) default_reviewer = form.save() self.assertEqual(default_reviewer.local_site, self.local_site)
def test_with_localsite_in_data_and_instance(self): """Testing DefaultReviewerform with a LocalSite in form data and editing instance """ default_reviewer = DefaultReviewer.objects.create( name='Test', file_regex='.*') form = DefaultReviewerForm( data={ 'name': 'Test', 'file_regex': '.*', 'local_site': self.local_site.pk, }, instance=default_reviewer) self.assertTrue(form.is_valid()) new_default_reviewer = form.save() self.assertEqual(default_reviewer.pk, new_default_reviewer.pk) self.assertEqual(new_default_reviewer.local_site, self.local_site)
def _create_or_update(self, local_site, default_reviewer=None, **kwargs): invalid_fields = {} form_data = {} if 'groups' in kwargs: group_names = kwargs['groups'].split(',') group_ids = [ group['pk'] for group in Group.objects.filter( name__in=group_names, local_site=local_site).values('pk') ] if len(group_ids) != len(group_names): invalid_fields['groups'] = [ 'One or more groups were not found' ] form_data['groups'] = group_ids if 'repositories' in kwargs: repo_ids = [] try: repo_ids = [ int(repo_id) for repo_id in kwargs['repositories'].split(',') ] except ValueError: invalid_fields['repositories'] = [ 'One or more repository IDs were not in a valid format.' ] if repo_ids: found_count = Repository.objects.filter( pk__in=repo_ids, local_site=local_site).count() if len(repo_ids) != found_count: invalid_fields['repositories'] = [ 'One or more repositories were not found' ] form_data['repository'] = repo_ids if 'users' in kwargs: usernames = kwargs['users'].split(',') user_ids = [ user['pk'] for user in User.objects.filter( username__in=usernames).values('pk') ] if len(user_ids) != len(usernames): invalid_fields['users'] = [ 'One or more users were not found' ] form_data['people'] = user_ids if invalid_fields: return INVALID_FORM_DATA, { 'fields': invalid_fields } for field in ('name', 'file_regex'): if field in kwargs: form_data[field] = kwargs[field] if local_site: form_data['local_site'] = local_site.pk form = DefaultReviewerForm(form_data, instance=default_reviewer) if not form.is_valid(): # The form uses "people" and "repository", but we expose these # as "users" and "repositories", so transmogrify the errors a bit. field_errors = self._get_form_errors(form) if 'people' in field_errors: field_errors['users'] = field_errors.pop('people') if 'repository' in field_errors: field_errors['repositories'] = field_errors.pop('repository') return INVALID_FORM_DATA, { 'fields': field_errors, } default_reviewer = form.save() return 200, { self.item_result_key: default_reviewer, }
def _create_or_update(self, local_site, default_reviewer=None, **kwargs): invalid_fields = {} form_data = {} if 'groups' in kwargs: group_names = kwargs['groups'].split(',') group_ids = [ group['pk'] for group in Group.objects.filter( name__in=group_names, local_site=local_site).values('pk') ] if len(group_ids) != len(group_names): invalid_fields['groups'] = [ 'One or more groups were not found' ] form_data['groups'] = group_ids if 'repositories' in kwargs: repo_ids = [] try: repo_ids = [ int(repo_id) for repo_id in kwargs['repositories'].split(',') ] except ValueError: invalid_fields['repositories'] = [ 'One or more repository IDs were not in a valid format.' ] if repo_ids: found_count = Repository.objects.filter( pk__in=repo_ids, local_site=local_site).count() if len(repo_ids) != found_count: invalid_fields['repositories'] = [ 'One or more repositories were not found' ] form_data['repository'] = repo_ids if 'users' in kwargs: usernames = kwargs['users'].split(',') user_ids = [ user['pk'] for user in User.objects.filter( username__in=usernames).values('pk') ] if len(user_ids) != len(usernames): invalid_fields['users'] = ['One or more users were not found'] form_data['people'] = user_ids if invalid_fields: return INVALID_FORM_DATA, {'fields': invalid_fields} for field in ('name', 'file_regex'): if field in kwargs: form_data[field] = kwargs[field] if local_site: form_data['local_site'] = local_site.pk form = DefaultReviewerForm(data=form_data, instance=default_reviewer, local_site=local_site) if not form.is_valid(): # The form uses "people" and "repository", but we expose these # as "users" and "repositories", so transmogrify the errors a bit. field_errors = self._get_form_errors(form) if 'people' in field_errors: field_errors['users'] = field_errors.pop('people') if 'repository' in field_errors: field_errors['repositories'] = field_errors.pop('repository') return INVALID_FORM_DATA, { 'fields': field_errors, } default_reviewer = form.save() return 200, { self.item_result_key: default_reviewer, }
def _create_or_update(self, local_site, default_reviewer=None, **kwargs): invalid_fields = {} form_data = {} if "groups" in kwargs: group_names = kwargs["groups"].split(",") group_ids = [ group["pk"] for group in Group.objects.filter(name__in=group_names, local_site=local_site).values("pk") ] if len(group_ids) != len(group_names): invalid_fields["groups"] = ["One or more groups were not found"] form_data["groups"] = group_ids if "repositories" in kwargs: repo_ids = [] try: repo_ids = [int(repo_id) for repo_id in kwargs["repositories"].split(",")] except ValueError: invalid_fields["repositories"] = ["One or more repository IDs were not in a valid format."] if repo_ids: found_count = Repository.objects.filter(pk__in=repo_ids, local_site=local_site).count() if len(repo_ids) != found_count: invalid_fields["repositories"] = ["One or more repositories were not found"] form_data["repository"] = repo_ids if "users" in kwargs: usernames = kwargs["users"].split(",") user_ids = [user["pk"] for user in User.objects.filter(username__in=usernames).values("pk")] if len(user_ids) != len(usernames): invalid_fields["users"] = ["One or more users were not found"] form_data["people"] = user_ids if invalid_fields: return INVALID_FORM_DATA, {"fields": invalid_fields} for field in ("name", "file_regex"): if field in kwargs: form_data[field] = kwargs[field] if local_site: form_data["local_site"] = local_site.pk form = DefaultReviewerForm(form_data, instance=default_reviewer) if not form.is_valid(): # The form uses "people" and "repository", but we expose these # as "users" and "repositories", so transmogrify the errors a bit. field_errors = self._get_form_errors(form) if "people" in field_errors: field_errors["users"] = field_errors.pop("people") if "repository" in field_errors: field_errors["repositories"] = field_errors.pop("repository") return INVALID_FORM_DATA, {"fields": field_errors} default_reviewer = form.save() return 200, {self.item_result_key: default_reviewer}