mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-10 04:50:16 +02:00
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
from unittest import mock
|
|
from urllib import parse
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import AnonymousUser
|
|
from django.http.response import HttpResponse
|
|
from django.test import TestCase
|
|
from django.test.client import RequestFactory
|
|
from django.urls import URLPattern, reverse
|
|
|
|
from allianceauth.eveonline.models import EveCharacter
|
|
from allianceauth.tests.auth_utils import AuthUtils
|
|
|
|
from ..decorators import decorate_url_patterns, main_character_required
|
|
from ..models import CharacterOwnership
|
|
|
|
MODULE_PATH = 'allianceauth.authentication'
|
|
|
|
|
|
class DecoratorTestCase(TestCase):
|
|
@staticmethod
|
|
@main_character_required
|
|
def dummy_view(*args, **kwargs):
|
|
return HttpResponse(status=200)
|
|
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.main_user = AuthUtils.create_user('main_user', disconnect_signals=True)
|
|
cls.no_main_user = AuthUtils.create_user(
|
|
'no_main_user', disconnect_signals=True
|
|
)
|
|
main_character = EveCharacter.objects.create(
|
|
character_id=1,
|
|
character_name='Main Character',
|
|
corporation_id=1,
|
|
corporation_name='Corp',
|
|
corporation_ticker='CORP',
|
|
)
|
|
CharacterOwnership.objects.create(
|
|
user=cls.main_user, character=main_character, owner_hash='1'
|
|
)
|
|
cls.main_user.profile.main_character = main_character
|
|
|
|
def setUp(self):
|
|
self.request = RequestFactory().get('/test/')
|
|
|
|
@mock.patch(MODULE_PATH + '.decorators.messages')
|
|
def test_login_redirect(self, m):
|
|
self.request.user = AnonymousUser()
|
|
response = self.dummy_view(self.request)
|
|
self.assertEqual(response.status_code, 302)
|
|
url = getattr(response, 'url', None)
|
|
self.assertEqual(parse.urlparse(url).path, reverse(settings.LOGIN_URL))
|
|
|
|
@mock.patch(MODULE_PATH + '.decorators.messages')
|
|
def test_main_character_redirect(self, m):
|
|
self.request.user = self.no_main_user
|
|
response = self.dummy_view(self.request)
|
|
self.assertEqual(response.status_code, 302)
|
|
url = getattr(response, 'url', None)
|
|
self.assertEqual(url, reverse('authentication:dashboard'))
|
|
|
|
@mock.patch(MODULE_PATH + '.decorators.messages')
|
|
def test_successful_request(self, m):
|
|
self.request.user = self.main_user
|
|
response = self.dummy_view(self.request)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
class TestDecorateUrlPatterns(TestCase):
|
|
def test_should_add_decorator_by_default(self):
|
|
# given
|
|
decorator = mock.MagicMock(name="decorator")
|
|
view = mock.MagicMock(name="view")
|
|
path = mock.MagicMock(spec=URLPattern, name="path")
|
|
path.callback = view
|
|
path.lookup_str = "my_lookup_str"
|
|
urls = [path]
|
|
urlconf_module = urls
|
|
# when
|
|
decorate_url_patterns(urlconf_module, decorator)
|
|
# then
|
|
self.assertEqual(path.callback, decorator(view))
|
|
|
|
def test_should_not_add_decorator_when_excluded(self):
|
|
# given
|
|
decorator = mock.MagicMock(name="decorator")
|
|
view = mock.MagicMock(name="view")
|
|
path = mock.MagicMock(spec=URLPattern, name="path")
|
|
path.callback = view
|
|
path.lookup_str = "my_lookup_str"
|
|
urls = [path]
|
|
urlconf_module = urls
|
|
# when
|
|
decorate_url_patterns(urlconf_module, decorator, excluded_views=["my_lookup_str"])
|
|
# then
|
|
self.assertEqual(path.callback, view)
|