Fix state change does not update groups

This commit is contained in:
ErikKalkoken 2020-06-28 01:45:51 +02:00
parent f9b5310fce
commit 8a27de5df8
4 changed files with 24 additions and 28 deletions

View File

@ -60,7 +60,9 @@ class DiscordService(ServicesHook):
) )
def service_active_for_user(self, user): def service_active_for_user(self, user):
return user.has_perm(self.access_perm) has_perms = user.has_perm(self.access_perm)
logger.debug("User %s has service permission: %s", user, has_perms)
return has_perms
def sync_nickname(self, user): def sync_nickname(self, user):
logger.debug('Syncing %s nickname for user %s', self.name, user) logger.debug('Syncing %s nickname for user %s', self.name, user)

View File

@ -118,6 +118,7 @@ class TestServiceFeatures(TransactionTestCase):
self.blue_state = AuthUtils.create_state("Blue", 50) self.blue_state = AuthUtils.create_state("Blue", 50)
permission = AuthUtils.get_permission_by_name('discord.access_discord') permission = AuthUtils.get_permission_by_name('discord.access_discord')
self.member_state.permissions.add(permission) self.member_state.permissions.add(permission)
self.blue_state.permissions.add(permission)
# Test user # Test user
self.user = AuthUtils.create_user(TEST_USER_NAME) self.user = AuthUtils.create_user(TEST_USER_NAME)
@ -238,14 +239,13 @@ class TestServiceFeatures(TransactionTestCase):
] ]
self.assertIn(remove_guild_member_request, requests_made) self.assertIn(remove_guild_member_request, requests_made)
"""
def test_when_member_changes_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
requests_mocker.get( requests_mocker.get(
guild_member_request.url, guild_member_request.url,
json={'user': create_user_info(),'roles': ['1', '13', '99']} json={'user': create_user_info(),'roles': ['13', '99']}
) )
requests_mocker.get( requests_mocker.get(
guild_roles_request.url, guild_roles_request.url,
@ -259,16 +259,14 @@ class TestServiceFeatures(TransactionTestCase):
self.member_state.member_characters.remove(self.main) self.member_state.member_characters.remove(self.main)
# verify roles for user where updated # verify roles for user where updated
requests_made = [ roles_updated = False
DiscordRequest(r.method, r.url) for r in requests_mocker.request_history for r in requests_mocker.request_history:
] my_request = DiscordRequest(r.method, r.url)
expected = [ if my_request == modify_guild_member_request and "roles" in r.json():
guild_member_request, roles_updated = True
guild_roles_request, self.assertSetEqual(set(r.json()["roles"]), {13, 98})
modify_guild_member_request
] self.assertTrue(roles_updated)
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

@ -126,14 +126,9 @@ def m2m_changed_state_permissions(sender, instance, action, pk_set, *args, **kwa
@receiver(state_changed, sender=UserProfile) @receiver(state_changed, sender=UserProfile)
def check_service_accounts_state_changed(sender, user, state, **kwargs): def check_service_accounts_state_changed(sender, user, state, **kwargs):
logger.debug("Received state_changed from %s to state %s" % (user, state)) logger.debug("Received state_changed from %s to state %s" % (user, state))
service_perms = [svc.access_perm for svc in ServicesHook.get_services()] for svc in ServicesHook.get_services():
state_perms = ["{}.{}".format(perm.natural_key()[1], perm.natural_key()[0]) for perm in state.permissions.all()] svc.validate_user(user)
for perm in service_perms: svc.update_groups(user)
if perm not in state_perms:
for svc in ServicesHook.get_services():
if svc.access_perm == perm:
logger.debug("User %s new state %s does not have service %s permission. Checking account." % (user, state, svc))
svc.validate_user(user)
@receiver(pre_delete, sender=User) @receiver(pre_delete, sender=User)

View File

@ -173,7 +173,7 @@ class ServicesSignalsTestCase(TestCase):
self.assertEqual(self.member, args[0]) self.assertEqual(self.member, args[0])
@mock.patch('allianceauth.services.signals.ServicesHook') @mock.patch('allianceauth.services.signals.ServicesHook')
def test_state_changed_services_valudation(self, services_hook): def test_state_changed_services_validation(self, services_hook):
""" """
Test a user changing state has service accounts validated Test a user changing state has service accounts validated
""" """
@ -193,3 +193,4 @@ class ServicesSignalsTestCase(TestCase):
self.assertTrue(svc.validate_user.called) self.assertTrue(svc.validate_user.called)
args, kwargs = svc.validate_user.call_args args, kwargs = svc.validate_user.call_args
self.assertEqual(self.member, args[0]) self.assertEqual(self.member, args[0])