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):
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):
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)
permission = AuthUtils.get_permission_by_name('discord.access_discord')
self.member_state.permissions.add(permission)
self.blue_state.permissions.add(permission)
# Test user
self.user = AuthUtils.create_user(TEST_USER_NAME)
@ -237,38 +238,35 @@ class TestServiceFeatures(TransactionTestCase):
DiscordRequest(r.method, r.url) for r in requests_mocker.request_history
]
self.assertIn(remove_guild_member_request, requests_made)
"""
def test_when_member_changes_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']}
json={'user': create_user_info(),'roles': ['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.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)
"""
# verify roles for user where updated
roles_updated = False
for r in requests_mocker.request_history:
my_request = DiscordRequest(r.method, r.url)
if my_request == modify_guild_member_request and "roles" in r.json():
roles_updated = True
self.assertSetEqual(set(r.json()["roles"]), {13, 98})
self.assertTrue(roles_updated)
def test_adding_group_to_user_role_exists(self, requests_mocker):
# guild_member()

View File

@ -125,15 +125,10 @@ def m2m_changed_state_permissions(sender, instance, action, pk_set, *args, **kwa
@receiver(state_changed, sender=UserProfile)
def check_service_accounts_state_changed(sender, user, state, **kwargs):
logger.debug("Received state_changed from %s to state %s" % (user, state))
service_perms = [svc.access_perm for svc in ServicesHook.get_services()]
state_perms = ["{}.{}".format(perm.natural_key()[1], perm.natural_key()[0]) for perm in state.permissions.all()]
for perm in service_perms:
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)
logger.debug("Received state_changed from %s to state %s" % (user, state))
for svc in ServicesHook.get_services():
svc.validate_user(user)
svc.update_groups(user)
@receiver(pre_delete, sender=User)

View File

@ -173,7 +173,7 @@ class ServicesSignalsTestCase(TestCase):
self.assertEqual(self.member, args[0])
@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
"""
@ -192,4 +192,5 @@ class ServicesSignalsTestCase(TestCase):
self.assertTrue(svc.validate_user.called)
args, kwargs = svc.validate_user.call_args
self.assertEqual(self.member, args[0])
self.assertEqual(self.member, args[0])