Fix user account not deleted when demoted to guest

This commit is contained in:
ErikKalkoken 2020-06-27 23:32:12 +02:00
parent fdce173969
commit f9b5310fce
2 changed files with 15 additions and 6 deletions

View File

@ -11,9 +11,16 @@ logger = logging.getLogger(__name__)
class StateBackend(ModelBackend): class StateBackend(ModelBackend):
@staticmethod @staticmethod
def _get_state_permissions(user_obj): def _get_state_permissions(user_obj):
"""returns permissions for state of given user object"""
"""
profile_state_field = UserProfile._meta.get_field('state') profile_state_field = UserProfile._meta.get_field('state')
user_state_query = 'state__%s__user' % profile_state_field.related_query_name() user_state_query = 'state__%s__user' % profile_state_field.related_query_name()
return Permission.objects.filter(**{user_state_query: user_obj}) return Permission.objects.filter(**{user_state_query: user_obj})
"""
if hasattr(user_obj, "profile") and user_obj.profile:
return Permission.objects.filter(state=user_obj.profile.state)
else:
return []
def get_state_permissions(self, user_obj, obj=None): def get_state_permissions(self, user_obj, obj=None):
return self._get_permissions(user_obj, obj, 'state') return self._get_permissions(user_obj, obj, 'state')

View File

@ -45,6 +45,7 @@ from ..models import DiscordUser
logger = logging.getLogger('allianceauth') logger = logging.getLogger('allianceauth')
ROLE_MEMBER = create_role(99, 'Member') ROLE_MEMBER = create_role(99, 'Member')
ROLE_BLUE = create_role(98, 'Blue')
# Putting all requests to Discord into objects so we can compare them better # Putting all requests to Discord into objects so we can compare them better
DiscordRequest = namedtuple('DiscordRequest', ['method', 'url']) DiscordRequest = namedtuple('DiscordRequest', ['method', 'url'])
@ -119,7 +120,7 @@ class TestServiceFeatures(TransactionTestCase):
self.member_state.permissions.add(permission) self.member_state.permissions.add(permission)
# Test user # Test user
self.user = AuthUtils.create_member(TEST_USER_NAME) self.user = AuthUtils.create_user(TEST_USER_NAME)
self.main = AuthUtils.add_main_character_2( self.main = AuthUtils.add_main_character_2(
self.user, self.user,
TEST_MAIN_NAME, TEST_MAIN_NAME,
@ -130,11 +131,12 @@ class TestServiceFeatures(TransactionTestCase):
disconnect_signals=True disconnect_signals=True
) )
self.member_state.member_characters.add(self.main) self.member_state.member_characters.add(self.main)
self.discord_user = DiscordUser.objects.create(user=self.user, uid=TEST_USER_ID)
# verify user is a member and has an account # verify user is a member and has an account
self.user = User.objects.get(pk=self.user.pk) self.user = User.objects.get(pk=self.user.pk)
self.assertEqual(self.user.profile.state, self.member_state) self.assertEqual(self.user.profile.state, self.member_state)
self.discord_user = DiscordUser.objects.create(user=self.user, uid=TEST_USER_ID)
self.assertTrue(DiscordUser.objects.user_has_account(self.user)) 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):
@ -209,8 +211,7 @@ class TestServiceFeatures(TransactionTestCase):
expected = list() expected = list()
self.assertListEqual(requests_made, expected) self.assertListEqual(requests_made, expected)
"""
def test_when_member_is_demoted_to_guest_then_his_account_is_deleted( def test_when_member_is_demoted_to_guest_then_his_account_is_deleted(
self, requests_mocker self, requests_mocker
): ):
@ -236,8 +237,9 @@ class TestServiceFeatures(TransactionTestCase):
DiscordRequest(r.method, r.url) for r in requests_mocker.request_history DiscordRequest(r.method, r.url) for r in requests_mocker.request_history
] ]
self.assertIn(remove_guild_member_request, requests_made) self.assertIn(remove_guild_member_request, requests_made)
def test_when_member_is_demoted_to_blue_state_then_roles_are_updated_accordingly( """
def test_when_member_changes_to_blue_state_then_roles_are_updated_accordingly(
self, requests_mocker self, requests_mocker
): ):
# request mocks # request mocks