mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
167 lines
7.3 KiB
Python
167 lines
7.3 KiB
Python
from django.contrib.auth.models import User, Group
|
|
from django.test import TestCase
|
|
|
|
from allianceauth.eveonline.models import EveCharacter
|
|
from allianceauth.tests.auth_utils import AuthUtils
|
|
|
|
from esi.models import Token
|
|
|
|
from ..backends import StateBackend
|
|
from ..models import CharacterOwnership, UserProfile, OwnershipRecord
|
|
|
|
MODULE_PATH = 'allianceauth.authentication'
|
|
|
|
PERMISSION_1 = "authentication.add_user"
|
|
PERMISSION_2 = "authentication.change_user"
|
|
|
|
|
|
class TestStatePermissions(TestCase):
|
|
|
|
def setUp(self):
|
|
# permissions
|
|
self.permission_1 = AuthUtils.get_permission_by_name(PERMISSION_1)
|
|
self.permission_2 = AuthUtils.get_permission_by_name(PERMISSION_2)
|
|
|
|
# group
|
|
self.group_1 = Group.objects.create(name="Group 1")
|
|
self.group_2 = Group.objects.create(name="Group 2")
|
|
|
|
# state
|
|
self.state_1 = AuthUtils.get_member_state()
|
|
self.state_2 = AuthUtils.create_state("Other State", 75)
|
|
|
|
# user
|
|
self.user = AuthUtils.create_user("Bruce Wayne")
|
|
self.main = AuthUtils.add_main_character_2(self.user, self.user.username, 123)
|
|
|
|
def test_user_has_user_permissions(self):
|
|
self.user.user_permissions.add(self.permission_1)
|
|
|
|
user = User.objects.get(pk=self.user.pk)
|
|
self.assertTrue(user.has_perm(PERMISSION_1))
|
|
|
|
def test_user_has_group_permissions(self):
|
|
self.group_1.permissions.add(self.permission_1)
|
|
self.user.groups.add(self.group_1)
|
|
|
|
user = User.objects.get(pk=self.user.pk)
|
|
self.assertTrue(user.has_perm(PERMISSION_1))
|
|
|
|
def test_user_has_state_permissions(self):
|
|
self.state_1.permissions.add(self.permission_1)
|
|
self.state_1.member_characters.add(self.main)
|
|
user = User.objects.get(pk=self.user.pk)
|
|
|
|
self.assertTrue(user.has_perm(PERMISSION_1))
|
|
|
|
def test_when_user_changes_state_perms_change_accordingly(self):
|
|
self.state_1.permissions.add(self.permission_1)
|
|
self.state_1.member_characters.add(self.main)
|
|
user = User.objects.get(pk=self.user.pk)
|
|
self.assertTrue(user.has_perm(PERMISSION_1))
|
|
|
|
self.state_2.permissions.add(self.permission_2)
|
|
self.state_2.member_characters.add(self.main)
|
|
self.state_1.member_characters.remove(self.main)
|
|
user = User.objects.get(pk=self.user.pk)
|
|
self.assertFalse(user.has_perm(PERMISSION_1))
|
|
self.assertTrue(user.has_perm(PERMISSION_2))
|
|
|
|
def test_state_permissions_are_returned_for_current_user_object(self):
|
|
# verify state permissions are returns for the current user object
|
|
# and not for it's instance in the database, which might be outdated
|
|
self.state_1.permissions.add(self.permission_1)
|
|
self.state_2.permissions.add(self.permission_2)
|
|
self.state_1.member_characters.add(self.main)
|
|
user = User.objects.get(pk=self.user.pk)
|
|
user.profile.state = self.state_2
|
|
self.assertFalse(user.has_perm(PERMISSION_1))
|
|
self.assertTrue(user.has_perm(PERMISSION_2))
|
|
|
|
|
|
class TestAuthenticate(TestCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.main_character = EveCharacter.objects.create(
|
|
character_id=1,
|
|
character_name='Main Character',
|
|
corporation_id=1,
|
|
corporation_name='Corp',
|
|
corporation_ticker='CORP',
|
|
)
|
|
cls.alt_character = EveCharacter.objects.create(
|
|
character_id=2,
|
|
character_name='Alt Character',
|
|
corporation_id=1,
|
|
corporation_name='Corp',
|
|
corporation_ticker='CORP',
|
|
)
|
|
cls.unclaimed_character = EveCharacter.objects.create(
|
|
character_id=3,
|
|
character_name='Unclaimed Character',
|
|
corporation_id=1,
|
|
corporation_name='Corp',
|
|
corporation_ticker='CORP',
|
|
)
|
|
cls.user = AuthUtils.create_user('test_user', disconnect_signals=True)
|
|
cls.old_user = AuthUtils.create_user('old_user', disconnect_signals=True)
|
|
AuthUtils.disconnect_signals()
|
|
CharacterOwnership.objects.create(user=cls.user, character=cls.main_character, owner_hash='1')
|
|
CharacterOwnership.objects.create(user=cls.user, character=cls.alt_character, owner_hash='2')
|
|
UserProfile.objects.update_or_create(user=cls.user, defaults={'main_character': cls.main_character})
|
|
AuthUtils.connect_signals()
|
|
|
|
def test_authenticate_main_character(self):
|
|
t = Token(character_id=self.main_character.character_id, character_owner_hash='1')
|
|
user = StateBackend().authenticate(token=t)
|
|
self.assertEqual(user, self.user)
|
|
|
|
""" Alt Login disabled
|
|
def test_authenticate_alt_character(self):
|
|
t = Token(character_id=self.alt_character.character_id, character_owner_hash='2')
|
|
user = StateBackend().authenticate(token=t)
|
|
self.assertEqual(user, self.user)
|
|
"""
|
|
|
|
def test_authenticate_alt_character_fail(self):
|
|
t = Token(character_id=self.alt_character.character_id, character_owner_hash='2')
|
|
user = StateBackend().authenticate(token=t)
|
|
self.assertEqual(user, None)
|
|
|
|
def test_authenticate_unclaimed_character(self):
|
|
t = Token(character_id=self.unclaimed_character.character_id, character_name=self.unclaimed_character.character_name, character_owner_hash='3')
|
|
user = StateBackend().authenticate(token=t)
|
|
self.assertNotEqual(user, self.user)
|
|
self.assertEqual(user.username, 'Unclaimed_Character')
|
|
self.assertEqual(user.profile.main_character, self.unclaimed_character)
|
|
|
|
""" Alt Login disabled
|
|
def test_authenticate_character_record(self):
|
|
t = Token(character_id=self.unclaimed_character.character_id, character_name=self.unclaimed_character.character_name, character_owner_hash='4')
|
|
OwnershipRecord.objects.create(user=self.old_user, character=self.unclaimed_character, owner_hash='4')
|
|
user = StateBackend().authenticate(token=t)
|
|
self.assertEqual(user, self.old_user)
|
|
self.assertTrue(CharacterOwnership.objects.filter(owner_hash='4', user=self.old_user).exists())
|
|
self.assertTrue(user.profile.main_character)
|
|
"""
|
|
|
|
def test_authenticate_character_record_fails(self):
|
|
t = Token(character_id=self.unclaimed_character.character_id, character_name=self.unclaimed_character.character_name, character_owner_hash='4')
|
|
OwnershipRecord.objects.create(user=self.old_user, character=self.unclaimed_character, owner_hash='4')
|
|
user = StateBackend().authenticate(token=t)
|
|
self.assertEqual(user, self.old_user)
|
|
self.assertTrue(CharacterOwnership.objects.filter(owner_hash='4', user=self.old_user).exists())
|
|
self.assertTrue(user.profile.main_character)
|
|
|
|
def test_iterate_username(self):
|
|
t = Token(character_id=self.unclaimed_character.character_id,
|
|
character_name=self.unclaimed_character.character_name, character_owner_hash='3')
|
|
username = StateBackend().authenticate(token=t).username
|
|
t.character_owner_hash = '4'
|
|
username_1 = StateBackend().authenticate(token=t).username
|
|
t.character_owner_hash = '5'
|
|
username_2 = StateBackend().authenticate(token=t).username
|
|
self.assertNotEqual(username, username_1, username_2)
|
|
self.assertTrue(username_1.endswith('_1'))
|
|
self.assertTrue(username_2.endswith('_2'))
|