From ef9284030b4a2ccbc69c824c62b0ac7a0210cbaf Mon Sep 17 00:00:00 2001 From: Adarnof Date: Fri, 23 Mar 2018 12:03:50 -0400 Subject: [PATCH] Remove autogroups if no config for state. --- allianceauth/eveonline/autogroups/models.py | 10 +++++++-- .../autogroups/tests/test_managers.py | 22 ++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/allianceauth/eveonline/autogroups/models.py b/allianceauth/eveonline/autogroups/models.py index 4863ded9..7e7746c6 100644 --- a/allianceauth/eveonline/autogroups/models.py +++ b/allianceauth/eveonline/autogroups/models.py @@ -38,8 +38,14 @@ class AutogroupsConfigManager(models.Manager): """ if state is None: state = user.profile.state - for config in self.filter(states=state): - config.update_group_membership_for_user(user) + configs = self.filter(states=state) + if configs: + [config.update_group_membership_for_user(user) for config in configs] + else: + # No config for this user's state. Remove all managed groups. + for config in self.all(): + config.remove_user_from_alliance_groups(user) + config.remove_user_from_corp_groups(user) class AutogroupsConfig(models.Model): diff --git a/allianceauth/eveonline/autogroups/tests/test_managers.py b/allianceauth/eveonline/autogroups/tests/test_managers.py index dbdecfb2..49084938 100644 --- a/allianceauth/eveonline/autogroups/tests/test_managers.py +++ b/allianceauth/eveonline/autogroups/tests/test_managers.py @@ -7,7 +7,7 @@ from . import patch class AutogroupsConfigManagerTestCase(TestCase): - def test_update_groups_for_state(self, ): + def test_update_groups_for_state(self): member = AuthUtils.create_member('test member') obj = AutogroupsConfig.objects.create() obj.states.add(member.profile.state) @@ -32,3 +32,23 @@ class AutogroupsConfigManagerTestCase(TestCase): self.assertEqual(update_group_membership_for_user.call_count, 1) args, kwargs = update_group_membership_for_user.call_args self.assertEqual(args[0], member) + + @patch('.models.AutogroupsConfig.update_group_membership_for_user') + @patch('.models.AutogroupsConfig.remove_user_from_alliance_groups') + @patch('.models.AutogroupsConfig.remove_user_from_corp_groups') + def test_update_groups_no_config(self, remove_corp, remove_alliance, update_groups): + member = AuthUtils.create_member('test member') + obj = AutogroupsConfig.objects.create() + + # Corp and alliance groups should be removed from users if their state has no config + AutogroupsConfig.objects.update_groups_for_user(member) + + self.assertFalse(update_groups.called) + self.assertTrue(remove_alliance.called) + self.assertTrue(remove_corp.called) + + # The normal group assignment should occur if there state has a config + obj.states.add(member.profile.state) + AutogroupsConfig.objects.update_groups_for_user(member) + + self.assertTrue(update_groups.called)