mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-14 06:50:15 +02:00
Correct available states query for character models missing field data
Ensure state_changed signals are sent Speed up authentication unit tests Add authentication unit test for state public availability change
This commit is contained in:
parent
84b1ddc5d9
commit
3c90868338
@ -8,10 +8,13 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def available_states_query(character):
|
def available_states_query(character):
|
||||||
query = Q(member_characters__character_id=character.character_id)
|
query = Q(public=True)
|
||||||
query |= Q(member_corporations__corporation_id=character.corporation_id)
|
if character.character_id:
|
||||||
query |= Q(member_alliances__alliance_id=character.alliance_id)
|
query |= Q(member_characters__character_id=character.character_id)
|
||||||
query |= Q(public=True)
|
if character.corporation_id:
|
||||||
|
query |= Q(member_corporations__corporation_id=character.corporation_id)
|
||||||
|
if character.alliance_id:
|
||||||
|
query |= Q(member_alliances__alliance_id=character.alliance_id)
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ def trigger_state_check(state):
|
|||||||
if state.available_to_user(profile.user):
|
if state.available_to_user(profile.user):
|
||||||
profile.state = state
|
profile.state = state
|
||||||
profile.save(update_fields=['state'])
|
profile.save(update_fields=['state'])
|
||||||
|
state_changed.send(sender=state.__class__, user=profile.user, state=state)
|
||||||
|
|
||||||
|
|
||||||
@receiver(m2m_changed, sender=State.member_characters.through)
|
@receiver(m2m_changed, sender=State.member_characters.through)
|
||||||
@ -60,6 +61,7 @@ def state_deleted(sender, instance, *args, **kwargs):
|
|||||||
else:
|
else:
|
||||||
profile.state = get_guest_state()
|
profile.state = get_guest_state()
|
||||||
profile.save(update_fields=['state'])
|
profile.save(update_fields=['state'])
|
||||||
|
state_changed.send(sender=State, user=profile.user, state=profile.state)
|
||||||
|
|
||||||
|
|
||||||
# Is there a smarter way to intercept pre_save with a diff main_character or state?
|
# Is there a smarter way to intercept pre_save with a diff main_character or state?
|
||||||
|
@ -17,33 +17,34 @@ from esi.models import Token
|
|||||||
|
|
||||||
|
|
||||||
class BackendTestCase(TestCase):
|
class BackendTestCase(TestCase):
|
||||||
def setUp(self):
|
@classmethod
|
||||||
self.main_character = EveCharacter.objects.create(
|
def setUpTestData(cls):
|
||||||
|
cls.main_character = EveCharacter.objects.create(
|
||||||
character_id=1,
|
character_id=1,
|
||||||
character_name='Main Character',
|
character_name='Main Character',
|
||||||
corporation_id=1,
|
corporation_id=1,
|
||||||
corporation_name='Corp',
|
corporation_name='Corp',
|
||||||
corporation_ticker='CORP',
|
corporation_ticker='CORP',
|
||||||
)
|
)
|
||||||
self.alt_character = EveCharacter.objects.create(
|
cls.alt_character = EveCharacter.objects.create(
|
||||||
character_id=2,
|
character_id=2,
|
||||||
character_name='Alt Character',
|
character_name='Alt Character',
|
||||||
corporation_id=1,
|
corporation_id=1,
|
||||||
corporation_name='Corp',
|
corporation_name='Corp',
|
||||||
corporation_ticker='CORP',
|
corporation_ticker='CORP',
|
||||||
)
|
)
|
||||||
self.unclaimed_character = EveCharacter.objects.create(
|
cls.unclaimed_character = EveCharacter.objects.create(
|
||||||
character_id=3,
|
character_id=3,
|
||||||
character_name='Unclaimed Character',
|
character_name='Unclaimed Character',
|
||||||
corporation_id=1,
|
corporation_id=1,
|
||||||
corporation_name='Corp',
|
corporation_name='Corp',
|
||||||
corporation_ticker='CORP',
|
corporation_ticker='CORP',
|
||||||
)
|
)
|
||||||
self.user = AuthUtils.create_user('test_user', disconnect_signals=True)
|
cls.user = AuthUtils.create_user('test_user', disconnect_signals=True)
|
||||||
AuthUtils.disconnect_signals()
|
AuthUtils.disconnect_signals()
|
||||||
CharacterOwnership.objects.create(user=self.user, character=self.main_character, owner_hash='1')
|
CharacterOwnership.objects.create(user=cls.user, character=cls.main_character, owner_hash='1')
|
||||||
CharacterOwnership.objects.create(user=self.user, character=self.alt_character, owner_hash='2')
|
CharacterOwnership.objects.create(user=cls.user, character=cls.alt_character, owner_hash='2')
|
||||||
UserProfile.objects.update_or_create(user=self.user, defaults={'main_character': self.main_character})
|
UserProfile.objects.update_or_create(user=cls.user, defaults={'main_character': cls.main_character})
|
||||||
AuthUtils.connect_signals()
|
AuthUtils.connect_signals()
|
||||||
|
|
||||||
def test_authenticate_main_character(self):
|
def test_authenticate_main_character(self):
|
||||||
@ -77,10 +78,11 @@ class BackendTestCase(TestCase):
|
|||||||
|
|
||||||
|
|
||||||
class CharacterOwnershipTestCase(TestCase):
|
class CharacterOwnershipTestCase(TestCase):
|
||||||
def setUp(self):
|
@classmethod
|
||||||
self.user = AuthUtils.create_user('user', disconnect_signals=True)
|
def setUpTestData(cls):
|
||||||
self.alt_user = AuthUtils.create_user('alt_user', disconnect_signals=True)
|
cls.user = AuthUtils.create_user('user', disconnect_signals=True)
|
||||||
self.character = EveCharacter.objects.create(
|
cls.alt_user = AuthUtils.create_user('alt_user', disconnect_signals=True)
|
||||||
|
cls.character = EveCharacter.objects.create(
|
||||||
character_id=1,
|
character_id=1,
|
||||||
character_name='Main Character',
|
character_name='Main Character',
|
||||||
corporation_id=1,
|
corporation_id=1,
|
||||||
@ -136,17 +138,18 @@ class CharacterOwnershipTestCase(TestCase):
|
|||||||
|
|
||||||
|
|
||||||
class StateTestCase(TestCase):
|
class StateTestCase(TestCase):
|
||||||
def setUp(self):
|
@classmethod
|
||||||
self.user = AuthUtils.create_user('test_user', disconnect_signals=True)
|
def setUpTestData(cls):
|
||||||
AuthUtils.add_main_character(self.user, 'Test Character', '1', corp_id='1', alliance_id='1',
|
cls.user = AuthUtils.create_user('test_user', disconnect_signals=True)
|
||||||
|
AuthUtils.add_main_character(cls.user, 'Test Character', '1', corp_id='1', alliance_id='1',
|
||||||
corp_name='Test Corp', alliance_name='Test Alliance')
|
corp_name='Test Corp', alliance_name='Test Alliance')
|
||||||
self.guest_state = get_guest_state()
|
cls.guest_state = get_guest_state()
|
||||||
self.test_character = EveCharacter.objects.get(character_id='1')
|
cls.test_character = EveCharacter.objects.get(character_id='1')
|
||||||
self.test_corporation = EveCorporationInfo.objects.create(corporation_id='1', corporation_name='Test Corp',
|
cls.test_corporation = EveCorporationInfo.objects.create(corporation_id='1', corporation_name='Test Corp',
|
||||||
corporation_ticker='TEST', member_count=1)
|
corporation_ticker='TEST', member_count=1)
|
||||||
self.test_alliance = EveAllianceInfo.objects.create(alliance_id='1', alliance_name='Test Alliance',
|
cls.test_alliance = EveAllianceInfo.objects.create(alliance_id='1', alliance_name='Test Alliance',
|
||||||
alliance_ticker='TEST', executor_corp_id='1')
|
alliance_ticker='TEST', executor_corp_id='1')
|
||||||
self.member_state = State.objects.create(
|
cls.member_state = State.objects.create(
|
||||||
name='Test Member',
|
name='Test Member',
|
||||||
priority=150,
|
priority=150,
|
||||||
)
|
)
|
||||||
@ -183,58 +186,75 @@ class StateTestCase(TestCase):
|
|||||||
|
|
||||||
def test_state_assignment_on_higher_priority_state_creation(self):
|
def test_state_assignment_on_higher_priority_state_creation(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
self.higher_state = State.objects.create(
|
higher_state = State.objects.create(
|
||||||
name='Higher State',
|
name='Higher State',
|
||||||
priority=200,
|
priority=200,
|
||||||
)
|
)
|
||||||
self.higher_state.member_characters.add(self.test_character)
|
higher_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.higher_state, self.user.profile.state)
|
self.assertEquals(higher_state, self.user.profile.state)
|
||||||
self.higher_state.member_characters.clear()
|
higher_state.member_characters.clear()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
self.member_state.member_characters.clear()
|
self.member_state.member_characters.clear()
|
||||||
|
|
||||||
def test_state_assignment_on_lower_priority_state_creation(self):
|
def test_state_assignment_on_lower_priority_state_creation(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
self.lower_state = State.objects.create(
|
lower_state = State.objects.create(
|
||||||
name='Lower State',
|
name='Lower State',
|
||||||
priority=125,
|
priority=125,
|
||||||
)
|
)
|
||||||
self.lower_state.member_characters.add(self.test_character)
|
lower_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
self.lower_state.member_characters.clear()
|
lower_state.member_characters.clear()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
self.member_state.member_characters.clear()
|
self.member_state.member_characters.clear()
|
||||||
|
|
||||||
def test_state_assignment_on_priority_change(self):
|
def test_state_assignment_on_priority_change(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
self.lower_state = State.objects.create(
|
lower_state = State.objects.create(
|
||||||
name='Lower State',
|
name='Lower State',
|
||||||
priority=125,
|
priority=125,
|
||||||
)
|
)
|
||||||
self.lower_state.member_characters.add(self.test_character)
|
lower_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.lower_state.priority = 500
|
lower_state.priority = 500
|
||||||
self.lower_state.save()
|
lower_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.lower_state, self.user.profile.state)
|
self.assertEquals(lower_state, self.user.profile.state)
|
||||||
self.lower_state.priority = 125
|
lower_state.priority = 125
|
||||||
self.lower_state.save()
|
lower_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
|
|
||||||
def test_state_assignment_on_state_deletion(self):
|
def test_state_assignment_on_state_deletion(self):
|
||||||
self.member_state.member_characters.add(self.test_character)
|
self.member_state.member_characters.add(self.test_character)
|
||||||
self.higher_state = State.objects.create(
|
higher_state = State.objects.create(
|
||||||
name='Higher State',
|
name='Higher State',
|
||||||
priority=200,
|
priority=200,
|
||||||
)
|
)
|
||||||
self.higher_state.member_characters.add(self.test_character)
|
higher_state.member_characters.add(self.test_character)
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.higher_state, self.user.profile.state)
|
self.assertEquals(higher_state, self.user.profile.state)
|
||||||
self.higher_state.delete()
|
higher_state.delete()
|
||||||
|
self._refresh_user()
|
||||||
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
|
|
||||||
|
def test_state_assignment_on_public_toggle(self):
|
||||||
|
self.member_state.member_characters.add(self.test_character)
|
||||||
|
higher_state = State.objects.create(
|
||||||
|
name='Higher State',
|
||||||
|
priority=200,
|
||||||
|
)
|
||||||
|
self._refresh_user()
|
||||||
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
|
higher_state.public = True
|
||||||
|
higher_state.save()
|
||||||
|
self._refresh_user()
|
||||||
|
self.assertEquals(higher_state, self.user.profile.state)
|
||||||
|
higher_state.public = False
|
||||||
|
higher_state.save()
|
||||||
self._refresh_user()
|
self._refresh_user()
|
||||||
self.assertEquals(self.member_state, self.user.profile.state)
|
self.assertEquals(self.member_state, self.user.profile.state)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user