Files
allianceauth/allianceauth/groupmanagement/tests/test_signals.py

100 lines
4.3 KiB
Python

from django.test import TestCase
from django.contrib.auth.models import User, Group
from allianceauth.eveonline.models import EveCorporationInfo
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
from allianceauth.tests.auth_utils import AuthUtils
class TestCheckGroupsOnStateChange(TestCase):
@classmethod
def setUpTestData(cls):
cls.user = AuthUtils.create_user('test')
cls.character = AuthUtils.add_main_character_2(
cls.user, 'test character', 1001, corp_id=2001, corp_name='test corp 1', corp_ticker='TEST'
)
cls.user.profile.refresh_from_db()
cls.corp_1 = EveCorporationInfo.objects.create(
corporation_id=2001, corporation_name='test corp 1', corporation_ticker='C1', member_count=1
)
cls.corp_2 = EveCorporationInfo.objects.create(
corporation_id=2002, corporation_name='test corp 2', corporation_ticker='C2', member_count=1
)
cls.guest_state = AuthUtils.get_guest_state()
cls.test_state_1 = AuthUtils.create_state('test_state_1', 500)
cls.test_state_2 = AuthUtils.create_state('test_state_2', 600)
def setUp(self):
self.user.refresh_from_db()
def _refresh_user(self):
self.user = User.objects.get(pk=self.user.pk)
def test_drop_state_group(self):
"""
given user is member of: state group, normal group and auto group
when user looses state
then user is automatically kicked from state group
and remains member of normal group and auto group
"""
# setup
state_group = Group.objects.create(name='state_group')
state_group.authgroup.states.add(self.test_state_1)
state_group.authgroup.internal = False
state_group.save()
normal_group = Group.objects.create(name='normal_group')
normal_group.authgroup.internal = False
normal_group.save()
internal_group = Group.objects.create(name='internal_group')
autogroup_config = AutogroupsConfig.objects.create(corp_groups=True)
autogroup_config.states.add(self.test_state_1)
autogroup_config.states.add(self.guest_state)
auto_group = autogroup_config.corp_managed_groups.first()
internal_state_group = Group.objects.create(name='internal_state_group')
internal_state_group.authgroup.states.add(self.test_state_1)
self.test_state_1.member_corporations.add(self.corp_1)
self.user.groups.add(normal_group)
self.user.groups.add(internal_group)
self.user.groups.add(state_group)
self.user.groups.add(internal_state_group)
# user changes state back to guest
self.test_state_1.member_corporations.clear()
# assert
self._refresh_user()
self.assertEqual(self.user.profile.state, self.guest_state)
groups = self.user.groups.all()
self.assertNotIn(state_group, groups) # looses state group
self.assertNotIn(internal_state_group, groups) # looses state group
self.assertIn(normal_group, groups) # normal group unafected
self.assertIn(internal_group, groups) # internal group unafected
self.assertIn(auto_group, groups) # auto group unafected
def test_change_to_other_state(self):
"""
given a state group with 2 allowed states
when user changes from one state to the other
then user remains member of that group
"""
# setup
state_group = Group.objects.create(name='state_group')
state_group.authgroup.states.add(self.test_state_1)
state_group.authgroup.states.add(self.test_state_2)
self.test_state_1.member_corporations.add(self.corp_1)
self.test_state_2.member_corporations.add(self.corp_2)
self.user.groups.add(state_group)
# user changes state back to guest
self.character.corporation_id = 2002
self.character.corporation_name = "test corp 2"
self.character.save()
# assert
self._refresh_user()
self.assertEqual(self.user.profile.state, self.test_state_2)
groups = self.user.groups.all()
self.assertIn(state_group, groups)