Add tests to fix new bugs

This commit is contained in:
ErikKalkoken 2020-06-27 16:18:06 +02:00
parent 7b9ddf90c1
commit fdce173969
3 changed files with 87 additions and 15 deletions

View File

@ -19,6 +19,8 @@ from django.shortcuts import reverse
from django.test import TransactionTestCase from django.test import TransactionTestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from allianceauth.authentication.models import State
from allianceauth.eveonline.models import EveCharacter
from allianceauth.tests.auth_utils import AuthUtils from allianceauth.tests.auth_utils import AuthUtils
from . import ( from . import (
@ -96,16 +98,29 @@ class TestServiceFeatures(TransactionTestCase):
def setUpClass(cls): def setUpClass(cls):
super().setUpClass() super().setUpClass()
cls.maxDiff = None cls.maxDiff = None
def setUp(self): def setUp(self):
"""All tests: Given a user with member state, service permission and active Discord account"""
clear_cache() clear_cache()
AuthUtils.disconnect_signals() AuthUtils.disconnect_signals()
Group.objects.all().delete() Group.objects.all().delete()
User.objects.all().delete() User.objects.all().delete()
State.objects.all().delete()
EveCharacter.objects.all().delete()
AuthUtils.connect_signals() AuthUtils.connect_signals()
self.group_3 = Group.objects.create(name='charlie') self.group_3 = Group.objects.create(name='charlie')
# States
self.member_state = AuthUtils.get_member_state()
self.guest_state = AuthUtils.get_guest_state()
self.blue_state = AuthUtils.create_state("Blue", 50)
permission = AuthUtils.get_permission_by_name('discord.access_discord')
self.member_state.permissions.add(permission)
# Test user
self.user = AuthUtils.create_member(TEST_USER_NAME) self.user = AuthUtils.create_member(TEST_USER_NAME)
AuthUtils.add_main_character_2( self.main = AuthUtils.add_main_character_2(
self.user, self.user,
TEST_MAIN_NAME, TEST_MAIN_NAME,
TEST_MAIN_ID, TEST_MAIN_ID,
@ -113,9 +128,14 @@ class TestServiceFeatures(TransactionTestCase):
corp_name='test_corp', corp_name='test_corp',
corp_ticker='TEST', corp_ticker='TEST',
disconnect_signals=True disconnect_signals=True
) )
self.member_state.member_characters.add(self.main)
self.discord_user = DiscordUser.objects.create(user=self.user, uid=TEST_USER_ID) self.discord_user = DiscordUser.objects.create(user=self.user, uid=TEST_USER_ID)
add_permissions_to_members()
# verify user is a member and has an account
self.user = User.objects.get(pk=self.user.pk)
self.assertEqual(self.user.profile.state, self.member_state)
self.assertTrue(DiscordUser.objects.user_has_account(self.user))
def test_name_of_main_changes(self, requests_mocker): def test_name_of_main_changes(self, requests_mocker):
# modify_guild_member() # modify_guild_member()
@ -133,7 +153,7 @@ class TestServiceFeatures(TransactionTestCase):
for r in requests_mocker.request_history: for r in requests_mocker.request_history:
requests_made.append(DiscordRequest(r.method, r.url)) requests_made.append(DiscordRequest(r.method, r.url))
expected = [modify_guild_member_request, modify_guild_member_request] expected = [modify_guild_member_request]
self.assertListEqual(requests_made, expected) self.assertListEqual(requests_made, expected)
def test_name_of_main_changes_but_user_deleted(self, requests_mocker): def test_name_of_main_changes_but_user_deleted(self, requests_mocker):
@ -190,18 +210,63 @@ class TestServiceFeatures(TransactionTestCase):
expected = list() expected = list()
self.assertListEqual(requests_made, expected) self.assertListEqual(requests_made, expected)
def test_user_demoted_to_guest(self, requests_mocker): """
# remove_guild_member() def test_when_member_is_demoted_to_guest_then_his_account_is_deleted(
self, requests_mocker
):
requests_mocker.patch(modify_guild_member_request.url, status_code=204)
requests_mocker.delete(remove_guild_member_request.url, status_code=204) requests_mocker.delete(remove_guild_member_request.url, status_code=204)
self.user.groups.clear()
# our user is a member and has an account
requests_made = list() self.assertTrue(self.user.has_perm('discord.access_discord'))
for r in requests_mocker.request_history:
requests_made.append(DiscordRequest(r.method, r.url)) # now we demote him to guest
self.member_state.member_characters.remove(self.main)
# compare the list of made requests with expected # verify user is now guest
expected = [remove_guild_member_request] self.user = User.objects.get(pk=self.user.pk)
self.assertListEqual(requests_made, expected) self.assertEqual(self.user.profile.state, AuthUtils.get_guest_state())
# verify user has no longer access to Discord and no account
self.assertFalse(self.user.has_perm('discord.access_discord'))
self.assertFalse(DiscordUser.objects.user_has_account(self.user))
# verify account was actually deleted from Discord server
requests_made = [
DiscordRequest(r.method, r.url) for r in requests_mocker.request_history
]
self.assertIn(remove_guild_member_request, requests_made)
def test_when_member_is_demoted_to_blue_state_then_roles_are_updated_accordingly(
self, requests_mocker
):
# request mocks
requests_mocker.get(
guild_member_request.url,
json={'user': create_user_info(),'roles': ['1', '13', '99']}
)
requests_mocker.get(
guild_roles_request.url,
json=[ROLE_ALPHA, ROLE_BRAVO, ROLE_MIKE, ROLE_MEMBER, ROLE_BLUE]
)
requests_mocker.post(create_guild_role_request.url, json=ROLE_CHARLIE)
requests_mocker.patch(modify_guild_member_request.url, status_code=204)
# demote user to blue state
self.blue_state.member_characters.add(self.main)
self.member_state.member_characters.remove(self.main)
# verify roles for user where updated
requests_made = [
DiscordRequest(r.method, r.url) for r in requests_mocker.request_history
]
expected = [
guild_member_request,
guild_roles_request,
modify_guild_member_request
]
self.assertListEqual(requests_made, expected)
"""
def test_adding_group_to_user_role_exists(self, requests_mocker): def test_adding_group_to_user_role_exists(self, requests_mocker):
# guild_member() # guild_member()

View File

@ -165,6 +165,9 @@ def process_main_character_change(sender, instance, *args, **kwargs):
# new model being created # new model being created
return return
try: try:
logger.debug(
"Received pre_save from %s for process_main_character_change", instance
)
old_instance = UserProfile.objects.get(pk=instance.pk) old_instance = UserProfile.objects.get(pk=instance.pk)
if old_instance.main_character and not instance.main_character: # lost main char disable services if old_instance.main_character and not instance.main_character: # lost main char disable services
logger.info("Disabling services due to loss of main character for user {0}".format(instance.user)) logger.info("Disabling services due to loss of main character for user {0}".format(instance.user))
@ -184,8 +187,12 @@ def process_main_character_change(sender, instance, *args, **kwargs):
@receiver(pre_save, sender=EveCharacter) @receiver(pre_save, sender=EveCharacter)
def process_main_character_update(sender, instance, *args, **kwargs): def process_main_character_update(sender, instance, *args, **kwargs):
try: try:
if instance.userprofile: if instance.userprofile:
logger.debug(
"Received pre_save from %s for process_main_character_update",
instance
)
old_instance = EveCharacter.objects.get(pk=instance.pk) old_instance = EveCharacter.objects.get(pk=instance.pk)
if not instance.character_name == old_instance.character_name or \ if not instance.character_name == old_instance.character_name or \
not instance.corporation_name == old_instance.corporation_name or \ not instance.corporation_name == old_instance.corporation_name or \

BIN
allianceauth_model.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB