From bf43f592321304d45de3bd7dcc98250060ac44af Mon Sep 17 00:00:00 2001 From: T'rahk Rokym Date: Wed, 21 May 2025 21:29:21 +0200 Subject: [PATCH] Fix the role distribution if several configs hold the same corporation/alliance --- allianceauth/eveonline/autogroups/models.py | 6 +-- .../autogroups/tests/test_managers.py | 49 +++++++++++++++++++ allianceauth/tests/auth_utils.py | 7 +++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/allianceauth/eveonline/autogroups/models.py b/allianceauth/eveonline/autogroups/models.py index b7309354..c2410476 100644 --- a/allianceauth/eveonline/autogroups/models.py +++ b/allianceauth/eveonline/autogroups/models.py @@ -39,13 +39,13 @@ class AutogroupsConfigManager(models.Manager): """ if state is None: state = user.profile.state - for config in self.filter(states=state): - # grant user new groups for their state - config.update_group_membership_for_user(user) for config in self.exclude(states=state): # ensure user does not have groups from previous state config.remove_user_from_alliance_groups(user) config.remove_user_from_corp_groups(user) + for config in self.filter(states=state): + # grant user new groups for their state + config.update_group_membership_for_user(user) class AutogroupsConfig(models.Model): diff --git a/allianceauth/eveonline/autogroups/tests/test_managers.py b/allianceauth/eveonline/autogroups/tests/test_managers.py index e4e42ef0..63701730 100644 --- a/allianceauth/eveonline/autogroups/tests/test_managers.py +++ b/allianceauth/eveonline/autogroups/tests/test_managers.py @@ -1,3 +1,4 @@ +from allianceauth.eveonline.models import EveCorporationInfo from django.test import TestCase from allianceauth.tests.auth_utils import AuthUtils @@ -73,3 +74,51 @@ class AutogroupsConfigManagerTestCase(TestCase): AutogroupsConfig.objects.update_groups_for_user(member) self.assertTrue(update_groups.called) + + def test_update_group_membership_corp_in_two_configs(self): + # given + member = AuthUtils.create_member('test member') + AuthUtils.add_main_character_2( + member, + character_id='1234', + name='test character', + corp_id='2345', + corp_name='corp name', + corp_ticker='TIKK', + + ) + + corp = EveCorporationInfo.objects.create( + corporation_id='2345', + corporation_name='corp name', + corporation_ticker='TIKK', + member_count=10, + ) + + member_state = AuthUtils.get_member_state() + member_config = AutogroupsConfig.objects.create(corp_groups=True) + member_config.states.add(member_state) + blue_state = AuthUtils.get_blue_state() + blue_state.member_corporations.add(corp) + blue_config = AutogroupsConfig.objects.create(corp_groups=True) + blue_config.states.add(blue_state) + + member.profile.state = blue_state + member.profile.save() + + AutogroupsConfig.objects.update_groups_for_user(member) + + # Checks before test that the role is correctly applied + group = blue_config.get_corp_group(corp) + self.assertIn(group, member.groups.all()) + + # when + blue_state.member_corporations.remove(corp) + member_state.member_corporations.add(corp) + member.profile.state = member_state + member.profile.save() + + # then + AutogroupsConfig.objects.update_groups_for_user(member) + group = member_config.get_corp_group(corp) + self.assertIn(group, member.groups.all()) diff --git a/allianceauth/tests/auth_utils.py b/allianceauth/tests/auth_utils.py index 7f759b84..81c52934 100644 --- a/allianceauth/tests/auth_utils.py +++ b/allianceauth/tests/auth_utils.py @@ -78,6 +78,13 @@ class AuthUtils: except State.DoesNotExist: return cls.create_state('Member', 100, disconnect_signals=True) + @classmethod + def get_blue_state(cls): + try: + return State.objects.get(name='Blue') + except State.DoesNotExist: + return cls.create_state('Blue', 50, disconnect_signals=True) + @classmethod def get_guest_state(cls): cls.disconnect_signals()