def test_subproject_cant_be_subproject(self): user = fixture.get(User) project = fixture.get(Project, users=[user]) another_project = fixture.get(Project, users=[user]) subproject = fixture.get(Project, users=[user]) relation = fixture.get( ProjectRelationship, parent=project, child=subproject, ) form = ProjectRelationshipForm( {'child': subproject.pk}, project=project, user=user, ) self.assertFalse(form.is_valid()) self.assertRegex( form.errors['child'][0], 'Select a valid choice', ) form = ProjectRelationshipForm( {'child': subproject.pk}, project=another_project, user=user, ) self.assertFalse(form.is_valid()) self.assertRegex( form.errors['child'][0], 'Select a valid choice', )
def test_change_alias(self): subproject_2 = fixture.get(Project, users=[self.user]) self.project.add_subproject(subproject_2, 'another-subproject') relation = subproject_2.superprojects.first() # Change alias to an existing alias form = ProjectRelationshipForm( { 'child': subproject_2.id, 'alias': 'subproject' }, instance=relation, project=self.project, user=self.user, ) self.assertFalse(form.is_valid()) error_msg = 'A subproject with this alias already exists' self.assertDictEqual(form.errors, {'alias': [error_msg]}) # Change alias to a new alias form = ProjectRelationshipForm( { 'child': subproject_2.id, 'alias': 'other-subproject' }, instance=relation, project=self.project, user=self.user, ) self.assertTrue(form.is_valid()) form.save() relation.refresh_from_db() self.assertEqual(relation.alias, 'other-subproject')
def test_exclude_self_project_as_subproject(self): user = fixture.get(User) project = fixture.get(Project, users=[user]) form = ProjectRelationshipForm({'child': project.pk}, project=project, user=user) self.assertFalse(form.is_valid()) self.assertNotIn( project.id, [proj_id for (proj_id, __) in form.fields['child'].choices])
def test_change_alias_to_same_alias(self): form = ProjectRelationshipForm( { 'child': self.subproject.id, 'alias': 'subproject' }, instance=self.relation, project=self.project, user=self.user, ) self.assertTrue(form.is_valid()) form.save() self.relation.refresh_from_db() self.assertEqual(self.relation.alias, 'subproject')
def test_exclude_self_project_as_subproject(self): user = fixture.get(User) project = fixture.get(Project, users=[user]) form = ProjectRelationshipForm( {'child': project.pk}, project=project, user=user ) self.assertFalse(form.is_valid()) self.assertNotIn( project.id, [proj_id for (proj_id, __) in form.fields['child'].choices] )
def test_adding_subproject_passes_when_user_is_admin(self): user = fixture.get(User) project = fixture.get(Project, slug='mainproject') project.users.add(user) subproject = fixture.get(Project, slug='subproject') subproject.users.add(user) self.assertQuerysetEqual( Project.objects.for_admin_user(user), [project, subproject], transform=lambda n: n, ) form = ProjectRelationshipForm({'child': subproject.pk}, project=project, user=user) form.full_clean() self.assertTrue(form.is_valid()) form.save() self.assertEqual([r.child for r in project.subprojects.all()], [subproject])
def test_alias_already_exists_for_a_project(self): user = fixture.get(User) project = fixture.get(Project, users=[user]) subproject = fixture.get(Project, users=[user]) subproject_2 = fixture.get(Project, users=[user]) relation = fixture.get( ProjectRelationship, parent=project, child=subproject, alias='subproject' ) form = ProjectRelationshipForm( { 'child': subproject_2.id, 'alias': 'subproject' }, project=project, user=user, ) self.assertFalse(form.is_valid()) error_msg = 'A subproject with this alias already exists' self.assertDictEqual(form.errors, {'alias': [error_msg]})
def test_adding_subproject_passes_when_user_is_admin(self): user = fixture.get(User) project = fixture.get(Project, slug='mainproject') project.users.add(user) subproject = fixture.get(Project, slug='subproject') subproject.users.add(user) self.assertQuerysetEqual( Project.objects.for_admin_user(user), [project, subproject], transform=lambda n: n, ) form = ProjectRelationshipForm( {'child': subproject.pk}, project=project, user=user ) form.full_clean() self.assertTrue(form.is_valid()) form.save() self.assertEqual( [r.child for r in project.subprojects.all()], [subproject] )