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):
def setUp(self):
self.factory = RequestFactory()
self.modeladmin = UserAdmin(
model=User, admin_site=AdminSite()
)
@classmethod
def setUpClass(cls):
super().setUpClass()
# groups
self.group_1 = Group.objects.create(
cls.group_1 = Group.objects.create(
name='Group 1'
)
self.group_2 = Group.objects.create(
cls.group_2 = Group.objects.create(
name='Group 2'
)
# user 1 - corp and alliance, normal user
self.character_1 = EveCharacter.objects.create(
cls.character_1 = EveCharacter.objects.create(
character_id='1001',
character_name='Bruce Wayne',
corporation_id='2001',
@ -58,7 +57,7 @@ class TestUserAdmin(TestCase):
alliance_name='Wayne Enterprises',
alliance_ticker='WE',
)
self.character_1a = EveCharacter.objects.create(
cls.character_1a = EveCharacter.objects.create(
character_id='1002',
character_name='Batman',
corporation_id='2001',
@ -81,27 +80,27 @@ class TestUserAdmin(TestCase):
member_count=42,
alliance=alliance
)
self.user_1 = User.objects.create_user(
self.character_1.character_name.replace(' ', '_'),
cls.user_1 = User.objects.create_user(
cls.character_1.character_name.replace(' ', '_'),
'abc@example.com',
'password'
)
CharacterOwnership.objects.create(
character=self.character_1,
owner_hash='x1' + self.character_1.character_name,
user=self.user_1
character=cls.character_1,
owner_hash='x1' + cls.character_1.character_name,
user=cls.user_1
)
CharacterOwnership.objects.create(
character=self.character_1a,
owner_hash='x1' + self.character_1a.character_name,
user=self.user_1
character=cls.character_1a,
owner_hash='x1' + cls.character_1a.character_name,
user=cls.user_1
)
self.user_1.profile.main_character = self.character_1
self.user_1.profile.save()
self.user_1.groups.add(self.group_1)
cls.user_1.profile.main_character = cls.character_1
cls.user_1.profile.save()
cls.user_1.groups.add(cls.group_1)
# user 2 - corp only, staff
self.character_2 = EveCharacter.objects.create(
cls.character_2 = EveCharacter.objects.create(
character_id=1003,
character_name='Clark Kent',
corporation_id=2002,
@ -116,24 +115,24 @@ class TestUserAdmin(TestCase):
member_count=99,
alliance=None
)
self.user_2 = User.objects.create_user(
self.character_2.character_name.replace(' ', '_'),
cls.user_2 = User.objects.create_user(
cls.character_2.character_name.replace(' ', '_'),
'abc@example.com',
'password'
)
CharacterOwnership.objects.create(
character=self.character_2,
owner_hash='x1' + self.character_2.character_name,
user=self.user_2
character=cls.character_2,
owner_hash='x1' + cls.character_2.character_name,
user=cls.user_2
)
self.user_2.profile.main_character = self.character_2
self.user_2.profile.save()
self.user_2.groups.add(self.group_2)
self.user_2.is_staff = True
self.user_2.save()
cls.user_2.profile.main_character = cls.character_2
cls.user_2.profile.save()
cls.user_2.groups.add(cls.group_2)
cls.user_2.is_staff = True
cls.user_2.save()
# user 3 - no main, no group, superuser
self.character_3 = EveCharacter.objects.create(
cls.character_3 = EveCharacter.objects.create(
character_id=1101,
character_name='Lex Luthor',
corporation_id=2101,
@ -154,20 +153,27 @@ class TestUserAdmin(TestCase):
alliance_ticker='LWD',
executor_corp_id=''
)
self.user_3 = User.objects.create_user(
self.character_3.character_name.replace(' ', '_'),
cls.user_3 = User.objects.create_user(
cls.character_3.character_name.replace(' ', '_'),
'abc@example.com',
'password'
)
CharacterOwnership.objects.create(
character=self.character_3,
owner_hash='x1' + self.character_3.character_name,
user=self.user_3
character=cls.character_3,
owner_hash='x1' + cls.character_3.character_name,
user=cls.user_3
)
self.user_3.is_superuser = True
self.user_3.save()
# create autogroups for corps and alliances
cls.user_3.is_superuser = True
cls.user_3.save()
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(
corp_groups = True,
alliance_groups = True
@ -175,70 +181,90 @@ class TestUserAdmin(TestCase):
autogroups_config.save()
for state in State.objects.all():
autogroups_config.states.add(state)
autogroups_config.update_corp_group_membership(self.user_1)
autogroups_config.update_corp_group_membership(self.user_1)
# 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/'
'portrait?size=32" class="img-circle">')
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))
def test_user_username_1(self):
def test_user_username_u1(self):
expected = (
'<strong><a href="/admin/authentication/user/{}/change/">'
'Bruce_Wayne</a></strong><br>Bruce Wayne'.format(self.user_1.pk)
)
self.assertEqual(user_username(self.user_1), expected)
def test_user_username_3(self):
def test_user_username_u3(self):
expected = (
'<strong><a href="/admin/authentication/user/{}/change/">'
'Lex_Luthor</a></strong>'.format(self.user_3.pk)
)
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'
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'
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
self.assertEqual(user_main_organization(self.user_3), expected)
def test_characters_1(self):
def test_characters_u1(self):
expected = 'Batman, Bruce Wayne'
result = self.modeladmin._characters(self.user_1)
self.assertEqual(result, expected)
def test_characters_2(self):
def test_characters_u2(self):
expected = 'Clark Kent'
result = self.modeladmin._characters(self.user_2)
self.assertEqual(result, expected)
def test_characters_3(self):
def test_characters_u3(self):
expected = 'Lex Luthor'
result = self.modeladmin._characters(self.user_3)
self.assertEqual(result, expected)
def test_groups_1(self):
def test_groups_u1(self):
self._create_autogroups()
expected = 'Group 1'
result = self.modeladmin._groups(self.user_1)
self.assertEqual(result, expected)
def test_groups_2(self):
def test_groups_u2(self):
self._create_autogroups()
expected = 'Group 2'
result = self.modeladmin._groups(self.user_2)
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)
self.assertIsNone(result)
@ -247,17 +273,17 @@ class TestUserAdmin(TestCase):
result = self.modeladmin._state(self.user_1)
self.assertEqual(result, expected)
def test_role_1(self):
def test_role_u1(self):
expected = 'User'
result = self.modeladmin._role(self.user_1)
self.assertEqual(result, expected)
def test_role_2(self):
def test_role_u2(self):
expected = 'Staff'
result = self.modeladmin._role(self.user_2)
self.assertEqual(result, expected)
def test_role_3(self):
def test_role_u3(self):
expected = 'Superuser'
result = self.modeladmin._role(self.user_3)
self.assertEqual(result, expected)
@ -297,11 +323,40 @@ class TestUserAdmin(TestCase):
# 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):
list_filter = (UserAdmin.RealGroupsFilter,)
my_modeladmin = UserAdminTest(User, AdminSite())
# Make sure the lookups are correct