from django.contrib.auth.models import Group from django.core.exceptions import ValidationError from django.db.utils import IntegrityError from django.test import TestCase from accounts.models import CustomGroup class CustomGroupTestCase(TestCase): def test_str(self): group = Group.objects.create(name="Test Group") custom_group = CustomGroup.objects.create(group=group) self.assertEqual(str(custom_group), "Test Group") def test_parent(self): parent_group = CustomGroup.objects.create(name="Parent Group") child_group = CustomGroup.objects.create(name="Child Group", parent=parent_group) self.assertEqual(str(child_group), "Parent Group/Child Group") def test_parent_loop_error(self): parent1_group = CustomGroup.objects.create(name="Parent1 Group") parent2_group = CustomGroup.objects.create(name="Parent2 Group", parent=parent1_group) child_group = CustomGroup.objects.create(name="Child Group", parent=parent2_group) parent1_group.parent = child_group # type: ignore with self.assertRaises(ValidationError): parent1_group.save() # self.assertEqual(str(child_group), "Parent Group/Child Group") def test_create_custom_group(self): cg = CustomGroup.objects.create(name="Test Group") self.assertIsNotNone(cg) self.assertEqual(cg.group.name, "Test Group") def test_create_custom_group_noname(self): with self.assertRaises(ValueError): CustomGroup.objects.create() def test_update_custom_group(self): cg1 = CustomGroup.objects.create(name="Test1 Group") cg2 = CustomGroup.objects.create(name="Test2 Group") cg3 = CustomGroup.objects.create(name="Test3 Group") CustomGroup.objects.filter(name="Test1 Group").update(name="Test Group") self.assertEqual(CustomGroup.objects.get(group__pk=cg1.group.pk).group.name, "Test Group") self.assertEqual(CustomGroup.objects.get(group__pk=cg2.group.pk).group.name, "Test2 Group") self.assertEqual(CustomGroup.objects.get(group__pk=cg3.group.pk).group.name, "Test3 Group") def test_update_custom_group_duplicate_names(self): CustomGroup.objects.create(name="Test1 Group") CustomGroup.objects.create(name="Test2 Group") CustomGroup.objects.create(name="Test3 Group") with self.assertRaises(IntegrityError): CustomGroup.objects.all().update(name="Test Group") def test_update_custom_group_noname(self): cg1 = CustomGroup.objects.create( name="Test1 Group", group_type=CustomGroup.GroupType.ORGANIZATION ) self.assertEqual(cg1.group_type, CustomGroup.GroupType.ORGANIZATION) cg2 = CustomGroup.objects.create( name="Test2 Group", group_type=CustomGroup.GroupType.DEPARTMENT ) self.assertEqual(cg2.group_type, CustomGroup.GroupType.DEPARTMENT) CustomGroup.objects.all().update(group_type=CustomGroup.GroupType.TEAM) groups = CustomGroup.objects.all() for group in groups: self.assertEqual(group.group_type, CustomGroup.GroupType.TEAM) def test_get(self): cg1 = CustomGroup.objects.create( name="Test1 Group", group_type=CustomGroup.GroupType.ORGANIZATION ) cg2 = CustomGroup.objects.create( name="Test2 Group", group_type=CustomGroup.GroupType.DEPARTMENT ) searched_cg1 = CustomGroup.objects.get(name="Test1 Group") self.assertEqual(searched_cg1, cg1) searched_cg2 = CustomGroup.objects.get(group__name="Test2 Group") self.assertEqual(searched_cg2, cg2) def test_get_or_create(self): cg1, created1 = CustomGroup.objects.get_or_create( name="Test1 Group", group_type=CustomGroup.GroupType.ORGANIZATION ) self.assertTrue(created1) cg2, created2 = CustomGroup.objects.get_or_create(name="Test1 Group") self.assertFalse(created2) self.assertEqual(cg2, cg1) cg3, created3 = CustomGroup.objects.get_or_create(group__name="Test1 Group") self.assertFalse(created3) self.assertEqual(cg3, cg1) cg4, created4 = CustomGroup.objects.get_or_create(group__name="Test2 Group") self.assertTrue(created4) self.assertEqual(cg4.group.name, "Test2 Group") self.assertEqual(cg4.group_type, CustomGroup.GroupType.OTHER) def test_update_or_create(self): cg1, created1 = CustomGroup.objects.update_or_create( name="Test1 Group", group_type=CustomGroup.GroupType.ORGANIZATION ) self.assertTrue(created1) cg2, created2 = CustomGroup.objects.update_or_create( name="Test1 Group", defaults={ "group_type": CustomGroup.GroupType.DEPARTMENT, }, ) self.assertFalse(created2) self.assertEqual(cg2.group_type, CustomGroup.GroupType.DEPARTMENT) self.assertEqual(cg2.pk, cg1.pk) cg3, created3 = CustomGroup.objects.update_or_create( group__name="Test1 Group", defaults={ "group_type": CustomGroup.GroupType.TEAM, }, ) self.assertFalse(created3) self.assertEqual(cg3.group_type, CustomGroup.GroupType.TEAM) self.assertEqual(cg3.pk, cg1.pk) cg4, created4 = CustomGroup.objects.update_or_create( group__name="Test2 Group", defaults={ "group_type": CustomGroup.GroupType.DEPARTMENT, }, ) self.assertTrue(created4) self.assertEqual(cg4.group.name, "Test2 Group") self.assertEqual(cg4.group_type, CustomGroup.GroupType.DEPARTMENT) self.assertNotEqual(cg4.pk, cg1.pk) cg5, created5 = CustomGroup.objects.update_or_create( group__name="Test2 Group", defaults={ "name": "Test5 Group", "group_type": CustomGroup.GroupType.DEPARTMENT, }, ) self.assertFalse(created5) self.assertEqual(cg5.group.name, "Test5 Group") self.assertEqual(cg5.group_type, CustomGroup.GroupType.DEPARTMENT) self.assertEqual(cg5.pk, cg4.pk) def test_update(self): cg1 = CustomGroup.objects.create( name="Test1 Group", group_type=CustomGroup.GroupType.ORGANIZATION ) self.assertEqual(cg1.group_type, CustomGroup.GroupType.ORGANIZATION) cg2 = CustomGroup.objects.create( name="Test2 Group", group_type=CustomGroup.GroupType.DEPARTMENT ) self.assertEqual(cg2.group_type, CustomGroup.GroupType.DEPARTMENT) CustomGroup.objects.update(group_type=CustomGroup.GroupType.TEAM) cgs = CustomGroup.objects.all() for cg in cgs: self.assertEqual(cg.group_type, CustomGroup.GroupType.TEAM) def test_delete(self): cg1 = CustomGroup.objects.create( name="Test1 Group", group_type=CustomGroup.GroupType.ORGANIZATION ) self.assertEqual(cg1.group_type, CustomGroup.GroupType.ORGANIZATION) cg2 = CustomGroup.objects.create( name="Test2 Group", group_type=CustomGroup.GroupType.DEPARTMENT ) self.assertEqual(cg2.group_type, CustomGroup.GroupType.DEPARTMENT) CustomGroup.objects.delete() self.assertEqual(CustomGroup.objects.count(), 0)