Performance improve admin tests, test w/o auto groups

This commit is contained in:
ErikKalkoken 2020-02-13 01:14:46 +01:00
parent ff168d1c9e
commit 80729b6b06

View File

@ -34,21 +34,20 @@ class MockRequest(object):
class TestUserAdmin(TestCase): class TestUserAdmin(TestCase):
def setUp(self): @classmethod
self.factory = RequestFactory() def setUpClass(cls):
self.modeladmin = UserAdmin( super().setUpClass()
model=User, admin_site=AdminSite()
)
# groups # groups
self.group_1 = Group.objects.create( cls.group_1 = Group.objects.create(
name='Group 1' name='Group 1'
) )
self.group_2 = Group.objects.create( cls.group_2 = Group.objects.create(
name='Group 2' name='Group 2'
) )
# user 1 - corp and alliance, normal user # user 1 - corp and alliance, normal user
self.character_1 = EveCharacter.objects.create( cls.character_1 = EveCharacter.objects.create(
character_id='1001', character_id='1001',
character_name='Bruce Wayne', character_name='Bruce Wayne',
corporation_id='2001', corporation_id='2001',
@ -58,7 +57,7 @@ class TestUserAdmin(TestCase):
alliance_name='Wayne Enterprises', alliance_name='Wayne Enterprises',
alliance_ticker='WE', alliance_ticker='WE',
) )
self.character_1a = EveCharacter.objects.create( cls.character_1a = EveCharacter.objects.create(
character_id='1002', character_id='1002',
character_name='Batman', character_name='Batman',
corporation_id='2001', corporation_id='2001',
@ -81,27 +80,27 @@ class TestUserAdmin(TestCase):
member_count=42, member_count=42,
alliance=alliance alliance=alliance
) )
self.user_1 = User.objects.create_user( cls.user_1 = User.objects.create_user(
self.character_1.character_name.replace(' ', '_'), cls.character_1.character_name.replace(' ', '_'),
'abc@example.com', 'abc@example.com',
'password' 'password'
) )
CharacterOwnership.objects.create( CharacterOwnership.objects.create(
character=self.character_1, character=cls.character_1,
owner_hash='x1' + self.character_1.character_name, owner_hash='x1' + cls.character_1.character_name,
user=self.user_1 user=cls.user_1
) )
CharacterOwnership.objects.create( CharacterOwnership.objects.create(
character=self.character_1a, character=cls.character_1a,
owner_hash='x1' + self.character_1a.character_name, owner_hash='x1' + cls.character_1a.character_name,
user=self.user_1 user=cls.user_1
) )
self.user_1.profile.main_character = self.character_1 cls.user_1.profile.main_character = cls.character_1
self.user_1.profile.save() cls.user_1.profile.save()
self.user_1.groups.add(self.group_1) cls.user_1.groups.add(cls.group_1)
# user 2 - corp only, staff # user 2 - corp only, staff
self.character_2 = EveCharacter.objects.create( cls.character_2 = EveCharacter.objects.create(
character_id=1003, character_id=1003,
character_name='Clark Kent', character_name='Clark Kent',
corporation_id=2002, corporation_id=2002,
@ -116,24 +115,24 @@ class TestUserAdmin(TestCase):
member_count=99, member_count=99,
alliance=None alliance=None
) )
self.user_2 = User.objects.create_user( cls.user_2 = User.objects.create_user(
self.character_2.character_name.replace(' ', '_'), cls.character_2.character_name.replace(' ', '_'),
'abc@example.com', 'abc@example.com',
'password' 'password'
) )
CharacterOwnership.objects.create( CharacterOwnership.objects.create(
character=self.character_2, character=cls.character_2,
owner_hash='x1' + self.character_2.character_name, owner_hash='x1' + cls.character_2.character_name,
user=self.user_2 user=cls.user_2
) )
self.user_2.profile.main_character = self.character_2 cls.user_2.profile.main_character = cls.character_2
self.user_2.profile.save() cls.user_2.profile.save()
self.user_2.groups.add(self.group_2) cls.user_2.groups.add(cls.group_2)
self.user_2.is_staff = True cls.user_2.is_staff = True
self.user_2.save() cls.user_2.save()
# user 3 - no main, no group, superuser # user 3 - no main, no group, superuser
self.character_3 = EveCharacter.objects.create( cls.character_3 = EveCharacter.objects.create(
character_id=1101, character_id=1101,
character_name='Lex Luthor', character_name='Lex Luthor',
corporation_id=2101, corporation_id=2101,
@ -154,20 +153,27 @@ class TestUserAdmin(TestCase):
alliance_ticker='LWD', alliance_ticker='LWD',
executor_corp_id='' executor_corp_id=''
) )
self.user_3 = User.objects.create_user( cls.user_3 = User.objects.create_user(
self.character_3.character_name.replace(' ', '_'), cls.character_3.character_name.replace(' ', '_'),
'abc@example.com', 'abc@example.com',
'password' 'password'
) )
CharacterOwnership.objects.create( CharacterOwnership.objects.create(
character=self.character_3, character=cls.character_3,
owner_hash='x1' + self.character_3.character_name, owner_hash='x1' + cls.character_3.character_name,
user=self.user_3 user=cls.user_3
) )
self.user_3.is_superuser = True cls.user_3.is_superuser = True
self.user_3.save() cls.user_3.save()
# create autogroups for corps and alliances def setUp(self):
self.factory = RequestFactory()
self.modeladmin = UserAdmin(
model=User, admin_site=AdminSite()
)
def _create_autogroups(self):
"""create autogroups for corps and alliances"""
autogroups_config = AutogroupsConfig( autogroups_config = AutogroupsConfig(
corp_groups = True, corp_groups = True,
alliance_groups = True alliance_groups = True
@ -179,66 +185,86 @@ class TestUserAdmin(TestCase):
# column rendering # column rendering
def test_user_profile_pic_1(self): def test_user_profile_pic_u1(self):
expected = ('<img src="https://images.evetech.net/characters/1001/' expected = ('<img src="https://images.evetech.net/characters/1001/'
'portrait?size=32" class="img-circle">') 'portrait?size=32" class="img-circle">')
self.assertEqual(user_profile_pic(self.user_1), expected) self.assertEqual(user_profile_pic(self.user_1), expected)
def test_user_profile_pic_3(self): def test_user_profile_pic_u3(self):
self.assertIsNone(user_profile_pic(self.user_3)) self.assertIsNone(user_profile_pic(self.user_3))
def test_user_username_1(self): def test_user_username_u1(self):
expected = ( expected = (
'<strong><a href="/admin/authentication/user/{}/change/">' '<strong><a href="/admin/authentication/user/{}/change/">'
'Bruce_Wayne</a></strong><br>Bruce Wayne'.format(self.user_1.pk) 'Bruce_Wayne</a></strong><br>Bruce Wayne'.format(self.user_1.pk)
) )
self.assertEqual(user_username(self.user_1), expected) self.assertEqual(user_username(self.user_1), expected)
def test_user_username_3(self): def test_user_username_u3(self):
expected = ( expected = (
'<strong><a href="/admin/authentication/user/{}/change/">' '<strong><a href="/admin/authentication/user/{}/change/">'
'Lex_Luthor</a></strong>'.format(self.user_3.pk) 'Lex_Luthor</a></strong>'.format(self.user_3.pk)
) )
self.assertEqual(user_username(self.user_3), expected) self.assertEqual(user_username(self.user_3), expected)
def test_user_main_organization_1(self): def test_user_main_organization_u1(self):
expected = 'Wayne Technologies<br>Wayne Enterprises' expected = 'Wayne Technologies<br>Wayne Enterprises'
self.assertEqual(user_main_organization(self.user_1), expected) self.assertEqual(user_main_organization(self.user_1), expected)
def test_user_main_organization_2(self): def test_user_main_organization_u2(self):
expected = 'Daily Planet' expected = 'Daily Planet'
self.assertEqual(user_main_organization(self.user_2), expected) self.assertEqual(user_main_organization(self.user_2), expected)
def test_user_main_organization_3(self): def test_user_main_organization_u3(self):
expected = None expected = None
self.assertEqual(user_main_organization(self.user_3), expected) self.assertEqual(user_main_organization(self.user_3), expected)
def test_characters_1(self): def test_characters_u1(self):
expected = 'Batman, Bruce Wayne' expected = 'Batman, Bruce Wayne'
result = self.modeladmin._characters(self.user_1) result = self.modeladmin._characters(self.user_1)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_characters_2(self): def test_characters_u2(self):
expected = 'Clark Kent' expected = 'Clark Kent'
result = self.modeladmin._characters(self.user_2) result = self.modeladmin._characters(self.user_2)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_characters_3(self): def test_characters_u3(self):
expected = 'Lex Luthor' expected = 'Lex Luthor'
result = self.modeladmin._characters(self.user_3) result = self.modeladmin._characters(self.user_3)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_groups_1(self): def test_groups_u1(self):
self._create_autogroups()
expected = 'Group 1' expected = 'Group 1'
result = self.modeladmin._groups(self.user_1) result = self.modeladmin._groups(self.user_1)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_groups_2(self): def test_groups_u2(self):
self._create_autogroups()
expected = 'Group 2' expected = 'Group 2'
result = self.modeladmin._groups(self.user_2) result = self.modeladmin._groups(self.user_2)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_groups_3(self): def test_groups_u3(self):
self._create_autogroups()
result = self.modeladmin._groups(self.user_3)
self.assertIsNone(result)
@patch(MODULE_PATH + '._has_auto_groups', False)
def test_groups_u1_no_autogroups(self):
expected = 'Group 1'
result = self.modeladmin._groups(self.user_1)
self.assertEqual(result, expected)
@patch(MODULE_PATH + '._has_auto_groups', False)
def test_groups_u2_no_autogroups(self):
expected = 'Group 2'
result = self.modeladmin._groups(self.user_2)
self.assertEqual(result, expected)
@patch(MODULE_PATH + '._has_auto_groups', False)
def test_groups_u3_no_autogroups(self):
result = self.modeladmin._groups(self.user_3) result = self.modeladmin._groups(self.user_3)
self.assertIsNone(result) self.assertIsNone(result)
@ -247,17 +273,17 @@ class TestUserAdmin(TestCase):
result = self.modeladmin._state(self.user_1) result = self.modeladmin._state(self.user_1)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_role_1(self): def test_role_u1(self):
expected = 'User' expected = 'User'
result = self.modeladmin._role(self.user_1) result = self.modeladmin._role(self.user_1)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_role_2(self): def test_role_u2(self):
expected = 'Staff' expected = 'Staff'
result = self.modeladmin._role(self.user_2) result = self.modeladmin._role(self.user_2)
self.assertEqual(result, expected) self.assertEqual(result, expected)
def test_role_3(self): def test_role_u3(self):
expected = 'Superuser' expected = 'Superuser'
result = self.modeladmin._role(self.user_3) result = self.modeladmin._role(self.user_3)
self.assertEqual(result, expected) self.assertEqual(result, expected)
@ -297,7 +323,36 @@ class TestUserAdmin(TestCase):
# filters # filters
def test_filter_real_groups(self): def test_filter_real_groups_with_autogroups(self):
class UserAdminTest(BaseUserAdmin):
list_filter = (UserAdmin.RealGroupsFilter,)
self._create_autogroups()
my_modeladmin = UserAdminTest(User, AdminSite())
# Make sure the lookups are correct
request = self.factory.get('/')
request.user = self.user_1
changelist = my_modeladmin.get_changelist_instance(request)
filters = changelist.get_filters(request)
filterspec = filters[0][0]
expected = [
(self.group_1.pk, self.group_1.name),
(self.group_2.pk, self.group_2.name),
]
self.assertEqual(filterspec.lookup_choices, expected)
# Make sure the correct queryset is returned
request = self.factory.get('/', {'group_id__exact': self.group_1.pk})
request.user = self.user_1
changelist = my_modeladmin.get_changelist_instance(request)
queryset = changelist.get_queryset(request)
expected = User.objects.filter(groups__in=[self.group_1])
self.assertSetEqual(set(queryset), set(expected))
@patch(MODULE_PATH + '._has_auto_groups', False)
def test_filter_real_groups_no_autogroups(self):
class UserAdminTest(BaseUserAdmin): class UserAdminTest(BaseUserAdmin):
list_filter = (UserAdmin.RealGroupsFilter,) list_filter = (UserAdmin.RealGroupsFilter,)