mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-12 22:10:16 +02:00
Merge branch 'issue_1219' into 'master'
HOTFIX: Fix startup error when autogroups is not installed Closes #1219 See merge request allianceauth/allianceauth!1169
This commit is contained in:
commit
40e9dbfda2
@ -6,25 +6,45 @@ before_script:
|
|||||||
- python -V
|
- python -V
|
||||||
- pip install wheel tox
|
- pip install wheel tox
|
||||||
|
|
||||||
test-3.5:
|
test-3.5-core:
|
||||||
image: python:3.5-buster
|
image: python:3.5-buster
|
||||||
script:
|
script:
|
||||||
- tox -e py35
|
- tox -e py35-core
|
||||||
|
|
||||||
test-3.6:
|
test-3.6-core:
|
||||||
image: python:3.6-buster
|
image: python:3.6-buster
|
||||||
script:
|
script:
|
||||||
- tox -e py36
|
- tox -e py36-core
|
||||||
|
|
||||||
test-3.7:
|
test-3.7-core:
|
||||||
image: python:3.7-buster
|
image: python:3.7-buster
|
||||||
script:
|
script:
|
||||||
- tox -e py37
|
- tox -e py37-core
|
||||||
|
|
||||||
test-3.8:
|
test-3.8-core:
|
||||||
image: python:3.8-buster
|
image: python:3.8-buster
|
||||||
script:
|
script:
|
||||||
- tox -e py38
|
- tox -e py38-core
|
||||||
|
|
||||||
|
test-3.5-all:
|
||||||
|
image: python:3.5-buster
|
||||||
|
script:
|
||||||
|
- tox -e py35-all
|
||||||
|
|
||||||
|
test-3.6-all:
|
||||||
|
image: python:3.6-buster
|
||||||
|
script:
|
||||||
|
- tox -e py36-all
|
||||||
|
|
||||||
|
test-3.7-all:
|
||||||
|
image: python:3.7-buster
|
||||||
|
script:
|
||||||
|
- tox -e py37-all
|
||||||
|
|
||||||
|
test-3.8-all:
|
||||||
|
image: python:3.8-buster
|
||||||
|
script:
|
||||||
|
- tox -e py38-all
|
||||||
|
|
||||||
deploy_production:
|
deploy_production:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
|
@ -18,14 +18,14 @@ from django.utils.text import slugify
|
|||||||
from allianceauth.authentication.models import State, get_guest_state,\
|
from allianceauth.authentication.models import State, get_guest_state,\
|
||||||
CharacterOwnership, UserProfile, OwnershipRecord
|
CharacterOwnership, UserProfile, OwnershipRecord
|
||||||
from allianceauth.hooks import get_hooks
|
from allianceauth.hooks import get_hooks
|
||||||
from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo
|
from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo,\
|
||||||
|
EveAllianceInfo
|
||||||
from allianceauth.eveonline.tasks import update_character
|
from allianceauth.eveonline.tasks import update_character
|
||||||
from .app_settings import AUTHENTICATION_ADMIN_USERS_MAX_GROUPS, \
|
from .app_settings import AUTHENTICATION_ADMIN_USERS_MAX_GROUPS, \
|
||||||
AUTHENTICATION_ADMIN_USERS_MAX_CHARS
|
AUTHENTICATION_ADMIN_USERS_MAX_CHARS
|
||||||
|
|
||||||
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
||||||
_has_auto_groups = True
|
_has_auto_groups = True
|
||||||
from allianceauth.eveonline.autogroups.models import *
|
|
||||||
else:
|
else:
|
||||||
_has_auto_groups = False
|
_has_auto_groups = False
|
||||||
|
|
||||||
@ -241,6 +241,22 @@ class MainAllianceFilter(admin.SimpleListFilter):
|
|||||||
self.value())
|
self.value())
|
||||||
|
|
||||||
|
|
||||||
|
def update_main_character_model(modeladmin, request, queryset):
|
||||||
|
tasks_count = 0
|
||||||
|
for obj in queryset:
|
||||||
|
if obj.profile.main_character:
|
||||||
|
update_character.delay(obj.profile.main_character.character_id)
|
||||||
|
tasks_count += 1
|
||||||
|
|
||||||
|
modeladmin.message_user(
|
||||||
|
request,
|
||||||
|
'Update from ESI started for {} characters'.format(tasks_count)
|
||||||
|
)
|
||||||
|
|
||||||
|
update_main_character_model.short_description = \
|
||||||
|
'Update main character model from ESI'
|
||||||
|
|
||||||
|
|
||||||
class UserAdmin(BaseUserAdmin):
|
class UserAdmin(BaseUserAdmin):
|
||||||
"""Extending Django's UserAdmin model
|
"""Extending Django's UserAdmin model
|
||||||
|
|
||||||
@ -272,28 +288,13 @@ class UserAdmin(BaseUserAdmin):
|
|||||||
else:
|
else:
|
||||||
return queryset.filter(groups__pk=self.value())
|
return queryset.filter(groups__pk=self.value())
|
||||||
|
|
||||||
def update_main_character_model(self, request, queryset):
|
|
||||||
tasks_count = 0
|
|
||||||
for obj in queryset:
|
|
||||||
if obj.profile.main_character:
|
|
||||||
update_character.delay(obj.profile.main_character.character_id)
|
|
||||||
tasks_count += 1
|
|
||||||
|
|
||||||
self.message_user(
|
|
||||||
request,
|
|
||||||
'Update from ESI started for {} characters'.format(tasks_count)
|
|
||||||
)
|
|
||||||
|
|
||||||
update_main_character_model.short_description = \
|
|
||||||
'Update main character model from ESI'
|
|
||||||
|
|
||||||
def get_actions(self, request):
|
def get_actions(self, request):
|
||||||
actions = super(BaseUserAdmin, self).get_actions(request)
|
actions = super(BaseUserAdmin, self).get_actions(request)
|
||||||
|
|
||||||
actions[self.update_main_character_model.__name__] = (
|
actions[update_main_character_model.__name__] = (
|
||||||
self.update_main_character_model,
|
update_main_character_model,
|
||||||
self.update_main_character_model.__name__,
|
update_main_character_model.__name__,
|
||||||
self.update_main_character_model.short_description
|
update_main_character_model.short_description
|
||||||
)
|
)
|
||||||
|
|
||||||
for hook in get_hooks('services_hook'):
|
for hook in get_hooks('services_hook'):
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
def get_admin_change_view_url(obj: object) -> str:
|
||||||
|
return reverse(
|
||||||
|
'admin:{}_{}_change'.format(
|
||||||
|
obj._meta.app_label,
|
||||||
|
type(obj).__name__.lower()
|
||||||
|
),
|
||||||
|
args=(obj.pk,)
|
||||||
|
)
|
@ -1,187 +1,282 @@
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.test import TestCase, RequestFactory
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin.sites import AdminSite
|
from django.contrib.admin.sites import AdminSite
|
||||||
from django.contrib.auth.models import User as BaseUser, Group
|
from django.contrib.auth.models import User as BaseUser, Group
|
||||||
|
from django.test import TestCase, RequestFactory, Client
|
||||||
|
|
||||||
from allianceauth.authentication.models import CharacterOwnership, State
|
from allianceauth.authentication.models import CharacterOwnership, State, \
|
||||||
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
|
OwnershipRecord
|
||||||
from allianceauth.eveonline.models import (
|
from allianceauth.eveonline.models import (
|
||||||
EveCharacter, EveCorporationInfo, EveAllianceInfo
|
EveCharacter, EveCorporationInfo, EveAllianceInfo
|
||||||
)
|
)
|
||||||
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
|
|
||||||
from ..admin import (
|
from ..admin import (
|
||||||
BaseUserAdmin,
|
BaseUserAdmin,
|
||||||
|
CharacterOwnershipAdmin,
|
||||||
|
PermissionAdmin,
|
||||||
|
StateAdmin,
|
||||||
MainCorporationsFilter,
|
MainCorporationsFilter,
|
||||||
MainAllianceFilter,
|
MainAllianceFilter,
|
||||||
|
OwnershipRecordAdmin,
|
||||||
User,
|
User,
|
||||||
UserAdmin,
|
UserAdmin,
|
||||||
user_main_organization,
|
user_main_organization,
|
||||||
user_profile_pic,
|
user_profile_pic,
|
||||||
user_username,
|
user_username,
|
||||||
|
update_main_character_model
|
||||||
)
|
)
|
||||||
|
from . import get_admin_change_view_url
|
||||||
|
|
||||||
|
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
||||||
|
_has_auto_groups = True
|
||||||
|
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
|
||||||
|
else:
|
||||||
|
_has_auto_groups = False
|
||||||
|
|
||||||
MODULE_PATH = 'allianceauth.authentication.admin'
|
MODULE_PATH = 'allianceauth.authentication.admin'
|
||||||
|
|
||||||
|
|
||||||
class MockRequest(object):
|
class MockRequest(object):
|
||||||
|
|
||||||
def __init__(self, user=None):
|
def __init__(self, user=None):
|
||||||
self.user = user
|
self.user = user
|
||||||
|
|
||||||
|
|
||||||
|
def create_test_data():
|
||||||
|
# groups
|
||||||
|
group_1 = Group.objects.create(
|
||||||
|
name='Group 1'
|
||||||
|
)
|
||||||
|
group_2 = Group.objects.create(
|
||||||
|
name='Group 2'
|
||||||
|
)
|
||||||
|
|
||||||
|
# user 1 - corp and alliance, normal user
|
||||||
|
character_1 = EveCharacter.objects.create(
|
||||||
|
character_id='1001',
|
||||||
|
character_name='Bruce Wayne',
|
||||||
|
corporation_id='2001',
|
||||||
|
corporation_name='Wayne Technologies',
|
||||||
|
corporation_ticker='WT',
|
||||||
|
alliance_id='3001',
|
||||||
|
alliance_name='Wayne Enterprises',
|
||||||
|
alliance_ticker='WE',
|
||||||
|
)
|
||||||
|
character_1a = EveCharacter.objects.create(
|
||||||
|
character_id='1002',
|
||||||
|
character_name='Batman',
|
||||||
|
corporation_id='2001',
|
||||||
|
corporation_name='Wayne Technologies',
|
||||||
|
corporation_ticker='WT',
|
||||||
|
alliance_id='3001',
|
||||||
|
alliance_name='Wayne Enterprises',
|
||||||
|
alliance_ticker='WE',
|
||||||
|
)
|
||||||
|
alliance = EveAllianceInfo.objects.create(
|
||||||
|
alliance_id='3001',
|
||||||
|
alliance_name='Wayne Enterprises',
|
||||||
|
alliance_ticker='WE',
|
||||||
|
executor_corp_id='2001'
|
||||||
|
)
|
||||||
|
EveCorporationInfo.objects.create(
|
||||||
|
corporation_id='2001',
|
||||||
|
corporation_name='Wayne Technologies',
|
||||||
|
corporation_ticker='WT',
|
||||||
|
member_count=42,
|
||||||
|
alliance=alliance
|
||||||
|
)
|
||||||
|
user_1 = User.objects.create_user(
|
||||||
|
character_1.character_name.replace(' ', '_'),
|
||||||
|
'abc@example.com',
|
||||||
|
'password'
|
||||||
|
)
|
||||||
|
CharacterOwnership.objects.create(
|
||||||
|
character=character_1,
|
||||||
|
owner_hash='x1' + character_1.character_name,
|
||||||
|
user=user_1
|
||||||
|
)
|
||||||
|
CharacterOwnership.objects.create(
|
||||||
|
character=character_1a,
|
||||||
|
owner_hash='x1' + character_1a.character_name,
|
||||||
|
user=user_1
|
||||||
|
)
|
||||||
|
user_1.profile.main_character = character_1
|
||||||
|
user_1.profile.save()
|
||||||
|
user_1.groups.add(group_1)
|
||||||
|
|
||||||
|
# user 2 - corp only, staff
|
||||||
|
character_2 = EveCharacter.objects.create(
|
||||||
|
character_id=1003,
|
||||||
|
character_name='Clark Kent',
|
||||||
|
corporation_id=2002,
|
||||||
|
corporation_name='Daily Planet',
|
||||||
|
corporation_ticker='DP',
|
||||||
|
alliance_id=None
|
||||||
|
)
|
||||||
|
EveCorporationInfo.objects.create(
|
||||||
|
corporation_id=2002,
|
||||||
|
corporation_name='Daily Plane',
|
||||||
|
corporation_ticker='DP',
|
||||||
|
member_count=99,
|
||||||
|
alliance=None
|
||||||
|
)
|
||||||
|
user_2 = User.objects.create_user(
|
||||||
|
character_2.character_name.replace(' ', '_'),
|
||||||
|
'abc@example.com',
|
||||||
|
'password'
|
||||||
|
)
|
||||||
|
CharacterOwnership.objects.create(
|
||||||
|
character=character_2,
|
||||||
|
owner_hash='x1' + character_2.character_name,
|
||||||
|
user=user_2
|
||||||
|
)
|
||||||
|
user_2.profile.main_character = character_2
|
||||||
|
user_2.profile.save()
|
||||||
|
user_2.groups.add(group_2)
|
||||||
|
user_2.is_staff = True
|
||||||
|
user_2.save()
|
||||||
|
|
||||||
|
# user 3 - no main, no group, superuser
|
||||||
|
character_3 = EveCharacter.objects.create(
|
||||||
|
character_id=1101,
|
||||||
|
character_name='Lex Luthor',
|
||||||
|
corporation_id=2101,
|
||||||
|
corporation_name='Lex Corp',
|
||||||
|
corporation_ticker='LC',
|
||||||
|
alliance_id=None
|
||||||
|
)
|
||||||
|
EveCorporationInfo.objects.create(
|
||||||
|
corporation_id=2101,
|
||||||
|
corporation_name='Lex Corp',
|
||||||
|
corporation_ticker='LC',
|
||||||
|
member_count=666,
|
||||||
|
alliance=None
|
||||||
|
)
|
||||||
|
EveAllianceInfo.objects.create(
|
||||||
|
alliance_id='3101',
|
||||||
|
alliance_name='Lex World Domination',
|
||||||
|
alliance_ticker='LWD',
|
||||||
|
executor_corp_id=''
|
||||||
|
)
|
||||||
|
user_3 = User.objects.create_user(
|
||||||
|
character_3.character_name.replace(' ', '_'),
|
||||||
|
'abc@example.com',
|
||||||
|
'password'
|
||||||
|
)
|
||||||
|
CharacterOwnership.objects.create(
|
||||||
|
character=character_3,
|
||||||
|
owner_hash='x1' + character_3.character_name,
|
||||||
|
user=user_3
|
||||||
|
)
|
||||||
|
user_3.is_superuser = True
|
||||||
|
user_3.save()
|
||||||
|
return user_1, user_2, user_3, group_1, group_2
|
||||||
|
|
||||||
|
|
||||||
|
class TestCharacterOwnershipAdmin(TestCase):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super().setUpClass()
|
||||||
|
cls.user_1, _, _, _, _ = create_test_data()
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.modeladmin = CharacterOwnershipAdmin(
|
||||||
|
model=User, admin_site=AdminSite()
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_change_view_loads_normally(self):
|
||||||
|
User.objects.create_superuser(
|
||||||
|
username='superuser', password='secret', email='admin@example.com'
|
||||||
|
)
|
||||||
|
c = Client()
|
||||||
|
c.login(username='superuser', password='secret')
|
||||||
|
ownership = self.user_1.character_ownerships.first()
|
||||||
|
response = c.get(get_admin_change_view_url(ownership))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
|
class TestOwnershipRecordAdmin(TestCase):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super().setUpClass()
|
||||||
|
cls.user_1, _, _, _, _ = create_test_data()
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.modeladmin = OwnershipRecordAdmin(
|
||||||
|
model=User, admin_site=AdminSite()
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_change_view_loads_normally(self):
|
||||||
|
User.objects.create_superuser(
|
||||||
|
username='superuser', password='secret', email='admin@example.com'
|
||||||
|
)
|
||||||
|
c = Client()
|
||||||
|
c.login(username='superuser', password='secret')
|
||||||
|
ownership_record = OwnershipRecord.objects\
|
||||||
|
.filter(user=self.user_1)\
|
||||||
|
.first()
|
||||||
|
response = c.get(get_admin_change_view_url(ownership_record))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
|
class TestStateAdmin(TestCase):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super().setUpClass()
|
||||||
|
create_test_data()
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.modeladmin = StateAdmin(
|
||||||
|
model=User, admin_site=AdminSite()
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_change_view_loads_normally(self):
|
||||||
|
User.objects.create_superuser(
|
||||||
|
username='superuser', password='secret', email='admin@example.com'
|
||||||
|
)
|
||||||
|
c = Client()
|
||||||
|
c.login(username='superuser', password='secret')
|
||||||
|
|
||||||
|
guest_state = AuthUtils.get_guest_state()
|
||||||
|
response = c.get(get_admin_change_view_url(guest_state))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
member_state = AuthUtils.get_member_state()
|
||||||
|
response = c.get(get_admin_change_view_url(member_state))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
class TestUserAdmin(TestCase):
|
class TestUserAdmin(TestCase):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super().setUpClass()
|
super().setUpClass()
|
||||||
|
cls.user_1, cls.user_2, cls.user_3, cls.group_1, cls.group_2 = \
|
||||||
# groups
|
create_test_data()
|
||||||
cls.group_1 = Group.objects.create(
|
|
||||||
name='Group 1'
|
|
||||||
)
|
|
||||||
cls.group_2 = Group.objects.create(
|
|
||||||
name='Group 2'
|
|
||||||
)
|
|
||||||
|
|
||||||
# user 1 - corp and alliance, normal user
|
|
||||||
cls.character_1 = EveCharacter.objects.create(
|
|
||||||
character_id='1001',
|
|
||||||
character_name='Bruce Wayne',
|
|
||||||
corporation_id='2001',
|
|
||||||
corporation_name='Wayne Technologies',
|
|
||||||
corporation_ticker='WT',
|
|
||||||
alliance_id='3001',
|
|
||||||
alliance_name='Wayne Enterprises',
|
|
||||||
alliance_ticker='WE',
|
|
||||||
)
|
|
||||||
cls.character_1a = EveCharacter.objects.create(
|
|
||||||
character_id='1002',
|
|
||||||
character_name='Batman',
|
|
||||||
corporation_id='2001',
|
|
||||||
corporation_name='Wayne Technologies',
|
|
||||||
corporation_ticker='WT',
|
|
||||||
alliance_id='3001',
|
|
||||||
alliance_name='Wayne Enterprises',
|
|
||||||
alliance_ticker='WE',
|
|
||||||
)
|
|
||||||
alliance = EveAllianceInfo.objects.create(
|
|
||||||
alliance_id='3001',
|
|
||||||
alliance_name='Wayne Enterprises',
|
|
||||||
alliance_ticker='WE',
|
|
||||||
executor_corp_id='2001'
|
|
||||||
)
|
|
||||||
EveCorporationInfo.objects.create(
|
|
||||||
corporation_id='2001',
|
|
||||||
corporation_name='Wayne Technologies',
|
|
||||||
corporation_ticker='WT',
|
|
||||||
member_count=42,
|
|
||||||
alliance=alliance
|
|
||||||
)
|
|
||||||
cls.user_1 = User.objects.create_user(
|
|
||||||
cls.character_1.character_name.replace(' ', '_'),
|
|
||||||
'abc@example.com',
|
|
||||||
'password'
|
|
||||||
)
|
|
||||||
CharacterOwnership.objects.create(
|
|
||||||
character=cls.character_1,
|
|
||||||
owner_hash='x1' + cls.character_1.character_name,
|
|
||||||
user=cls.user_1
|
|
||||||
)
|
|
||||||
CharacterOwnership.objects.create(
|
|
||||||
character=cls.character_1a,
|
|
||||||
owner_hash='x1' + cls.character_1a.character_name,
|
|
||||||
user=cls.user_1
|
|
||||||
)
|
|
||||||
cls.user_1.profile.main_character = cls.character_1
|
|
||||||
cls.user_1.profile.save()
|
|
||||||
cls.user_1.groups.add(cls.group_1)
|
|
||||||
|
|
||||||
# user 2 - corp only, staff
|
|
||||||
cls.character_2 = EveCharacter.objects.create(
|
|
||||||
character_id=1003,
|
|
||||||
character_name='Clark Kent',
|
|
||||||
corporation_id=2002,
|
|
||||||
corporation_name='Daily Planet',
|
|
||||||
corporation_ticker='DP',
|
|
||||||
alliance_id=None
|
|
||||||
)
|
|
||||||
EveCorporationInfo.objects.create(
|
|
||||||
corporation_id=2002,
|
|
||||||
corporation_name='Daily Plane',
|
|
||||||
corporation_ticker='DP',
|
|
||||||
member_count=99,
|
|
||||||
alliance=None
|
|
||||||
)
|
|
||||||
cls.user_2 = User.objects.create_user(
|
|
||||||
cls.character_2.character_name.replace(' ', '_'),
|
|
||||||
'abc@example.com',
|
|
||||||
'password'
|
|
||||||
)
|
|
||||||
CharacterOwnership.objects.create(
|
|
||||||
character=cls.character_2,
|
|
||||||
owner_hash='x1' + cls.character_2.character_name,
|
|
||||||
user=cls.user_2
|
|
||||||
)
|
|
||||||
cls.user_2.profile.main_character = cls.character_2
|
|
||||||
cls.user_2.profile.save()
|
|
||||||
cls.user_2.groups.add(cls.group_2)
|
|
||||||
cls.user_2.is_staff = True
|
|
||||||
cls.user_2.save()
|
|
||||||
|
|
||||||
# user 3 - no main, no group, superuser
|
|
||||||
cls.character_3 = EveCharacter.objects.create(
|
|
||||||
character_id=1101,
|
|
||||||
character_name='Lex Luthor',
|
|
||||||
corporation_id=2101,
|
|
||||||
corporation_name='Lex Corp',
|
|
||||||
corporation_ticker='LC',
|
|
||||||
alliance_id=None
|
|
||||||
)
|
|
||||||
EveCorporationInfo.objects.create(
|
|
||||||
corporation_id=2101,
|
|
||||||
corporation_name='Lex Corp',
|
|
||||||
corporation_ticker='LC',
|
|
||||||
member_count=666,
|
|
||||||
alliance=None
|
|
||||||
)
|
|
||||||
EveAllianceInfo.objects.create(
|
|
||||||
alliance_id='3101',
|
|
||||||
alliance_name='Lex World Domination',
|
|
||||||
alliance_ticker='LWD',
|
|
||||||
executor_corp_id=''
|
|
||||||
)
|
|
||||||
cls.user_3 = User.objects.create_user(
|
|
||||||
cls.character_3.character_name.replace(' ', '_'),
|
|
||||||
'abc@example.com',
|
|
||||||
'password'
|
|
||||||
)
|
|
||||||
CharacterOwnership.objects.create(
|
|
||||||
character=cls.character_3,
|
|
||||||
owner_hash='x1' + cls.character_3.character_name,
|
|
||||||
user=cls.user_3
|
|
||||||
)
|
|
||||||
cls.user_3.is_superuser = True
|
|
||||||
cls.user_3.save()
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.factory = RequestFactory()
|
self.factory = RequestFactory()
|
||||||
self.modeladmin = UserAdmin(
|
self.modeladmin = UserAdmin(
|
||||||
model=User, admin_site=AdminSite()
|
model=User, admin_site=AdminSite()
|
||||||
)
|
)
|
||||||
|
self.character_1 = self.user_1.character_ownerships.first().character
|
||||||
|
|
||||||
def _create_autogroups(self):
|
def _create_autogroups(self):
|
||||||
"""create autogroups for corps and alliances"""
|
"""create autogroups for corps and alliances"""
|
||||||
autogroups_config = AutogroupsConfig(
|
if _has_auto_groups:
|
||||||
corp_groups = True,
|
autogroups_config = AutogroupsConfig(
|
||||||
alliance_groups = True
|
corp_groups = True,
|
||||||
)
|
alliance_groups = True
|
||||||
autogroups_config.save()
|
)
|
||||||
for state in State.objects.all():
|
autogroups_config.save()
|
||||||
autogroups_config.states.add(state)
|
for state in State.objects.all():
|
||||||
autogroups_config.update_corp_group_membership(self.user_1)
|
autogroups_config.states.add(state)
|
||||||
|
autogroups_config.update_corp_group_membership(self.user_1)
|
||||||
|
|
||||||
# column rendering
|
# column rendering
|
||||||
|
|
||||||
@ -315,8 +410,8 @@ class TestUserAdmin(TestCase):
|
|||||||
self, mock_task, mock_message_user
|
self, mock_task, mock_message_user
|
||||||
):
|
):
|
||||||
users_qs = User.objects.filter(pk__in=[self.user_1.pk, self.user_2.pk])
|
users_qs = User.objects.filter(pk__in=[self.user_1.pk, self.user_2.pk])
|
||||||
self.modeladmin.update_main_character_model(
|
update_main_character_model(
|
||||||
MockRequest(self.user_1), users_qs
|
self.modeladmin, MockRequest(self.user_1), users_qs
|
||||||
)
|
)
|
||||||
self.assertEqual(mock_task.delay.call_count, 2)
|
self.assertEqual(mock_task.delay.call_count, 2)
|
||||||
self.assertTrue(mock_message_user.called)
|
self.assertTrue(mock_message_user.called)
|
||||||
@ -437,3 +532,12 @@ class TestUserAdmin(TestCase):
|
|||||||
queryset = changelist.get_queryset(request)
|
queryset = changelist.get_queryset(request)
|
||||||
expected = [self.user_1]
|
expected = [self.user_1]
|
||||||
self.assertSetEqual(set(queryset), set(expected))
|
self.assertSetEqual(set(queryset), set(expected))
|
||||||
|
|
||||||
|
def test_change_view_loads_normally(self):
|
||||||
|
User.objects.create_superuser(
|
||||||
|
username='superuser', password='secret', email='admin@example.com'
|
||||||
|
)
|
||||||
|
c = Client()
|
||||||
|
c.login(username='superuser', password='secret')
|
||||||
|
response = c.get(get_admin_change_view_url(self.user_1))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from .. import app_settings
|
from .. import app_settings
|
||||||
|
|
||||||
MODULE_PATH = 'allianceauth.authentication'
|
MODULE_PATH = 'allianceauth.authentication'
|
||||||
|
|
||||||
|
|
||||||
class TestSetAppSetting(TestCase):
|
class TestSetAppSetting(TestCase):
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.app_settings.settings')
|
@patch(MODULE_PATH + '.app_settings.settings')
|
||||||
@ -17,7 +17,6 @@ class TestSetAppSetting(TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(result, False)
|
self.assertEqual(result, False)
|
||||||
|
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.app_settings.settings')
|
@patch(MODULE_PATH + '.app_settings.settings')
|
||||||
def test_default_if_not_set_for_none(self, mock_settings):
|
def test_default_if_not_set_for_none(self, mock_settings):
|
||||||
mock_settings.TEST_SETTING_DUMMY = Mock(spec=None)
|
mock_settings.TEST_SETTING_DUMMY = Mock(spec=None)
|
||||||
@ -28,7 +27,6 @@ class TestSetAppSetting(TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(result, None)
|
self.assertEqual(result, None)
|
||||||
|
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.app_settings.settings')
|
@patch(MODULE_PATH + '.app_settings.settings')
|
||||||
def test_true_stays_true(self, mock_settings):
|
def test_true_stays_true(self, mock_settings):
|
||||||
mock_settings.TEST_SETTING_DUMMY = True
|
mock_settings.TEST_SETTING_DUMMY = True
|
||||||
@ -56,7 +54,6 @@ class TestSetAppSetting(TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(result, False)
|
self.assertEqual(result, False)
|
||||||
|
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.app_settings.settings')
|
@patch(MODULE_PATH + '.app_settings.settings')
|
||||||
def test_default_for_invalid_type_int(self, mock_settings):
|
def test_default_for_invalid_type_int(self, mock_settings):
|
||||||
mock_settings.TEST_SETTING_DUMMY = 'invalid type'
|
mock_settings.TEST_SETTING_DUMMY = 'invalid type'
|
||||||
@ -95,7 +92,6 @@ class TestSetAppSetting(TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(result, 50)
|
self.assertEqual(result, 50)
|
||||||
|
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.app_settings.settings')
|
@patch(MODULE_PATH + '.app_settings.settings')
|
||||||
def test_default_is_none_needs_required_type(self, mock_settings):
|
def test_default_is_none_needs_required_type(self, mock_settings):
|
||||||
mock_settings.TEST_SETTING_DUMMY = 'invalid type'
|
mock_settings.TEST_SETTING_DUMMY = 'invalid type'
|
||||||
@ -104,5 +100,3 @@ class TestSetAppSetting(TestCase):
|
|||||||
'TEST_SETTING_DUMMY',
|
'TEST_SETTING_DUMMY',
|
||||||
default_value=None
|
default_value=None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth.models import Group as BaseGroup
|
from django.contrib.auth.models import Group as BaseGroup, User
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from django.db.models.functions import Lower
|
from django.db.models.functions import Lower
|
||||||
from django.db.models.signals import pre_save, post_save, pre_delete, \
|
from django.db.models.signals import pre_save, post_save, pre_delete, \
|
||||||
@ -14,7 +14,6 @@ from . import signals
|
|||||||
|
|
||||||
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
||||||
_has_auto_groups = True
|
_has_auto_groups = True
|
||||||
from allianceauth.eveonline.autogroups.models import *
|
|
||||||
else:
|
else:
|
||||||
_has_auto_groups = False
|
_has_auto_groups = False
|
||||||
|
|
||||||
@ -22,19 +21,24 @@ else:
|
|||||||
class AuthGroupInlineAdmin(admin.StackedInline):
|
class AuthGroupInlineAdmin(admin.StackedInline):
|
||||||
model = AuthGroup
|
model = AuthGroup
|
||||||
filter_horizontal = ('group_leaders', 'group_leader_groups', 'states',)
|
filter_horizontal = ('group_leaders', 'group_leader_groups', 'states',)
|
||||||
fields = ('description', 'group_leaders', 'group_leader_groups', 'states', 'internal', 'hidden', 'open', 'public')
|
fields = (
|
||||||
|
'description',
|
||||||
|
'group_leaders',
|
||||||
|
'group_leader_groups',
|
||||||
|
'states', 'internal',
|
||||||
|
'hidden',
|
||||||
|
'open',
|
||||||
|
'public'
|
||||||
|
)
|
||||||
verbose_name_plural = 'Auth Settings'
|
verbose_name_plural = 'Auth Settings'
|
||||||
verbose_name = ''
|
verbose_name = ''
|
||||||
|
|
||||||
def formfield_for_manytomany(self, db_field, request, **kwargs):
|
def formfield_for_manytomany(self, db_field, request, **kwargs):
|
||||||
"""overriding this formfield to have sorted lists in the form"""
|
"""overriding this formfield to have sorted lists in the form"""
|
||||||
if db_field.name == "group_leaders":
|
if db_field.name == "group_leaders":
|
||||||
kwargs["queryset"] = User.objects\
|
kwargs["queryset"] = User.objects.order_by(Lower('username'))
|
||||||
.filter(profile__state__name='Member')\
|
|
||||||
.order_by(Lower('username'))
|
|
||||||
elif db_field.name == "group_leader_groups":
|
elif db_field.name == "group_leader_groups":
|
||||||
kwargs["queryset"] = Group.objects\
|
kwargs["queryset"] = Group.objects.order_by(Lower('name'))
|
||||||
.order_by(Lower('name'))
|
|
||||||
return super().formfield_for_manytomany(db_field, request, **kwargs)
|
return super().formfield_for_manytomany(db_field, request, **kwargs)
|
||||||
|
|
||||||
def has_add_permission(self, request):
|
def has_add_permission(self, request):
|
||||||
@ -103,14 +107,16 @@ class GroupAdmin(admin.ModelAdmin):
|
|||||||
'_member_count',
|
'_member_count',
|
||||||
'has_leader'
|
'has_leader'
|
||||||
)
|
)
|
||||||
list_filter = (
|
list_filter = [
|
||||||
'authgroup__internal',
|
'authgroup__internal',
|
||||||
'authgroup__hidden',
|
'authgroup__hidden',
|
||||||
'authgroup__open',
|
'authgroup__open',
|
||||||
'authgroup__public',
|
'authgroup__public',
|
||||||
IsAutoGroupFilter,
|
]
|
||||||
HasLeaderFilter
|
if _has_auto_groups:
|
||||||
)
|
list_filter.append(IsAutoGroupFilter)
|
||||||
|
list_filter.append(HasLeaderFilter)
|
||||||
|
|
||||||
search_fields = ('name', 'authgroup__description')
|
search_fields = ('name', 'authgroup__description')
|
||||||
|
|
||||||
def get_queryset(self, request):
|
def get_queryset(self, request):
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
def get_admin_change_view_url(obj: object) -> str:
|
||||||
|
return reverse(
|
||||||
|
'admin:{}_{}_change'.format(
|
||||||
|
obj._meta.app_label,
|
||||||
|
type(obj).__name__.lower()
|
||||||
|
),
|
||||||
|
args=(obj.pk,)
|
||||||
|
)
|
@ -1,22 +1,29 @@
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.test import TestCase, RequestFactory
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin.sites import AdminSite
|
from django.contrib.admin.sites import AdminSite
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.test import TestCase, RequestFactory, Client
|
||||||
|
|
||||||
from allianceauth.authentication.models import CharacterOwnership, State
|
from allianceauth.authentication.models import CharacterOwnership, State
|
||||||
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
|
|
||||||
from allianceauth.eveonline.models import (
|
from allianceauth.eveonline.models import (
|
||||||
EveCharacter, EveCorporationInfo, EveAllianceInfo
|
EveCharacter, EveCorporationInfo, EveAllianceInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
from ..admin import (
|
from ..admin import (
|
||||||
IsAutoGroupFilter,
|
|
||||||
HasLeaderFilter,
|
HasLeaderFilter,
|
||||||
GroupAdmin,
|
GroupAdmin,
|
||||||
Group
|
Group
|
||||||
)
|
)
|
||||||
|
from . import get_admin_change_view_url
|
||||||
|
|
||||||
|
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
||||||
|
_has_auto_groups = True
|
||||||
|
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
|
||||||
|
from ..admin import IsAutoGroupFilter
|
||||||
|
else:
|
||||||
|
_has_auto_groups = False
|
||||||
|
|
||||||
|
|
||||||
MODULE_PATH = 'allianceauth.groupmanagement.admin'
|
MODULE_PATH = 'allianceauth.groupmanagement.admin'
|
||||||
@ -210,14 +217,15 @@ class TestGroupAdmin(TestCase):
|
|||||||
|
|
||||||
def _create_autogroups(self):
|
def _create_autogroups(self):
|
||||||
"""create autogroups for corps and alliances"""
|
"""create autogroups for corps and alliances"""
|
||||||
autogroups_config = AutogroupsConfig(
|
if _has_auto_groups:
|
||||||
corp_groups = True,
|
autogroups_config = AutogroupsConfig(
|
||||||
alliance_groups = True
|
corp_groups = True,
|
||||||
)
|
alliance_groups = True
|
||||||
autogroups_config.save()
|
)
|
||||||
for state in State.objects.all():
|
autogroups_config.save()
|
||||||
autogroups_config.states.add(state)
|
for state in State.objects.all():
|
||||||
autogroups_config.update_corp_group_membership(self.user_1)
|
autogroups_config.states.add(state)
|
||||||
|
autogroups_config.update_corp_group_membership(self.user_1)
|
||||||
|
|
||||||
# column rendering
|
# column rendering
|
||||||
|
|
||||||
@ -267,70 +275,72 @@ class TestGroupAdmin(TestCase):
|
|||||||
result = self.modeladmin._properties(self.group_6)
|
result = self.modeladmin._properties(self.group_6)
|
||||||
self.assertListEqual(result, expected)
|
self.assertListEqual(result, expected)
|
||||||
|
|
||||||
@patch(MODULE_PATH + '._has_auto_groups', True)
|
if _has_auto_groups:
|
||||||
def test_properties_6(self):
|
@patch(MODULE_PATH + '._has_auto_groups', True)
|
||||||
self._create_autogroups()
|
def test_properties_6(self):
|
||||||
expected = ['Auto Group']
|
self._create_autogroups()
|
||||||
my_group = Group.objects\
|
expected = ['Auto Group']
|
||||||
.filter(managedcorpgroup__isnull=False)\
|
my_group = Group.objects\
|
||||||
.first()
|
.filter(managedcorpgroup__isnull=False)\
|
||||||
result = self.modeladmin._properties(my_group)
|
.first()
|
||||||
self.assertListEqual(result, expected)
|
result = self.modeladmin._properties(my_group)
|
||||||
|
self.assertListEqual(result, expected)
|
||||||
|
|
||||||
# actions
|
# actions
|
||||||
|
|
||||||
# filters
|
# filters
|
||||||
|
|
||||||
@patch(MODULE_PATH + '._has_auto_groups', True)
|
if _has_auto_groups:
|
||||||
def test_filter_is_auto_group(self):
|
@patch(MODULE_PATH + '._has_auto_groups', True)
|
||||||
|
def test_filter_is_auto_group(self):
|
||||||
|
|
||||||
class GroupAdminTest(admin.ModelAdmin):
|
class GroupAdminTest(admin.ModelAdmin):
|
||||||
list_filter = (IsAutoGroupFilter,)
|
list_filter = (IsAutoGroupFilter,)
|
||||||
|
|
||||||
self._create_autogroups()
|
self._create_autogroups()
|
||||||
my_modeladmin = GroupAdminTest(Group, AdminSite())
|
my_modeladmin = GroupAdminTest(Group, AdminSite())
|
||||||
|
|
||||||
# Make sure the lookups are correct
|
# Make sure the lookups are correct
|
||||||
request = self.factory.get('/')
|
request = self.factory.get('/')
|
||||||
request.user = self.user_1
|
request.user = self.user_1
|
||||||
changelist = my_modeladmin.get_changelist_instance(request)
|
changelist = my_modeladmin.get_changelist_instance(request)
|
||||||
filters = changelist.get_filters(request)
|
filters = changelist.get_filters(request)
|
||||||
filterspec = filters[0][0]
|
filterspec = filters[0][0]
|
||||||
expected = [
|
expected = [
|
||||||
('yes', 'Yes'),
|
('yes', 'Yes'),
|
||||||
('no', 'No'),
|
('no', 'No'),
|
||||||
]
|
]
|
||||||
self.assertEqual(filterspec.lookup_choices, expected)
|
self.assertEqual(filterspec.lookup_choices, expected)
|
||||||
|
|
||||||
# Make sure the correct queryset is returned - no
|
# Make sure the correct queryset is returned - no
|
||||||
request = self.factory.get(
|
request = self.factory.get(
|
||||||
'/', {'is_auto_group__exact': 'no'}
|
'/', {'is_auto_group__exact': 'no'}
|
||||||
)
|
)
|
||||||
request.user = self.user_1
|
request.user = self.user_1
|
||||||
changelist = my_modeladmin.get_changelist_instance(request)
|
changelist = my_modeladmin.get_changelist_instance(request)
|
||||||
queryset = changelist.get_queryset(request)
|
queryset = changelist.get_queryset(request)
|
||||||
expected = [
|
expected = [
|
||||||
self.group_1,
|
self.group_1,
|
||||||
self.group_2,
|
self.group_2,
|
||||||
self.group_3,
|
self.group_3,
|
||||||
self.group_4,
|
self.group_4,
|
||||||
self.group_5,
|
self.group_5,
|
||||||
self.group_6
|
self.group_6
|
||||||
]
|
]
|
||||||
self.assertSetEqual(set(queryset), set(expected))
|
self.assertSetEqual(set(queryset), set(expected))
|
||||||
|
|
||||||
# Make sure the correct queryset is returned - yes
|
# Make sure the correct queryset is returned - yes
|
||||||
request = self.factory.get(
|
request = self.factory.get(
|
||||||
'/', {'is_auto_group__exact': 'yes'}
|
'/', {'is_auto_group__exact': 'yes'}
|
||||||
)
|
)
|
||||||
request.user = self.user_1
|
request.user = self.user_1
|
||||||
changelist = my_modeladmin.get_changelist_instance(request)
|
changelist = my_modeladmin.get_changelist_instance(request)
|
||||||
queryset = changelist.get_queryset(request)
|
queryset = changelist.get_queryset(request)
|
||||||
expected = Group.objects.exclude(
|
expected = Group.objects.exclude(
|
||||||
managedalliancegroup__isnull=True,
|
managedalliancegroup__isnull=True,
|
||||||
managedcorpgroup__isnull=True
|
managedcorpgroup__isnull=True
|
||||||
)
|
)
|
||||||
self.assertSetEqual(set(queryset), set(expected))
|
self.assertSetEqual(set(queryset), set(expected))
|
||||||
|
|
||||||
def test_filter_has_leader(self):
|
def test_filter_has_leader(self):
|
||||||
|
|
||||||
@ -377,3 +387,11 @@ class TestGroupAdmin(TestCase):
|
|||||||
]
|
]
|
||||||
self.assertSetEqual(set(queryset), set(expected))
|
self.assertSetEqual(set(queryset), set(expected))
|
||||||
|
|
||||||
|
def test_change_view_loads_normally(self):
|
||||||
|
User.objects.create_superuser(
|
||||||
|
username='superuser', password='secret', email='admin@example.com'
|
||||||
|
)
|
||||||
|
c = Client()
|
||||||
|
c.login(username='superuser', password='secret')
|
||||||
|
response = c.get(get_admin_change_view_url(self.group_1))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
@ -20,11 +20,8 @@ class ServicesUserAdmin(admin.ModelAdmin):
|
|||||||
"all": ("services/admin.css",)
|
"all": ("services/admin.css",)
|
||||||
}
|
}
|
||||||
|
|
||||||
search_fields = (
|
search_fields = ('user__username',)
|
||||||
'user__username',
|
ordering = ('user__username',)
|
||||||
'uid'
|
|
||||||
)
|
|
||||||
ordering = ('user__username', )
|
|
||||||
list_select_related = True
|
list_select_related = True
|
||||||
list_display = (
|
list_display = (
|
||||||
user_profile_pic,
|
user_profile_pic,
|
||||||
|
@ -6,9 +6,8 @@ from ...admin import ServicesUserAdmin
|
|||||||
|
|
||||||
@admin.register(DiscordUser)
|
@admin.register(DiscordUser)
|
||||||
class DiscordUserAdmin(ServicesUserAdmin):
|
class DiscordUserAdmin(ServicesUserAdmin):
|
||||||
list_display = ServicesUserAdmin.list_display + (
|
list_display = ServicesUserAdmin.list_display + ('_uid',)
|
||||||
'_uid',
|
search_fields = ServicesUserAdmin.search_fields + ('uid', )
|
||||||
)
|
|
||||||
|
|
||||||
def _uid(self, obj):
|
def _uid(self, obj):
|
||||||
return obj.uid
|
return obj.uid
|
||||||
|
@ -10,6 +10,7 @@ class Teamspeak3UserAdmin(ServicesUserAdmin):
|
|||||||
'uid',
|
'uid',
|
||||||
'perm_key'
|
'perm_key'
|
||||||
)
|
)
|
||||||
|
search_fields = ServicesUserAdmin.search_fields + ('uid', )
|
||||||
|
|
||||||
|
|
||||||
@admin.register(AuthTS)
|
@admin.register(AuthTS)
|
||||||
|
@ -3,8 +3,6 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings'
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from django.core.management import execute_from_command_line
|
from django.core.management import execute_from_command_line
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
Alliance Auth Test Suite Django settings.
|
Alliance Auth Test Suite Django settings
|
||||||
|
|
||||||
|
Testing all services and plug-in apps
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from allianceauth.project_template.project_name.settings.base import *
|
from allianceauth.project_template.project_name.settings.base import *
|
||||||
@ -41,14 +43,6 @@ ROOT_URLCONF = 'tests.urls'
|
|||||||
|
|
||||||
CACHES['default'] = {'BACKEND': 'django.core.cache.backends.db.DatabaseCache'}
|
CACHES['default'] = {'BACKEND': 'django.core.cache.backends.db.DatabaseCache'}
|
||||||
|
|
||||||
#####################
|
|
||||||
# HR Configuration
|
|
||||||
#####################
|
|
||||||
# JACK_KNIFE_URL - Url for the audit page of API Jack knife
|
|
||||||
# Should seriously replace with your own.
|
|
||||||
#####################
|
|
||||||
JACK_KNIFE_URL = 'http://example.com/eveapi/audit.php'
|
|
||||||
|
|
||||||
########################
|
########################
|
||||||
# XenForo Configuration
|
# XenForo Configuration
|
||||||
########################
|
########################
|
33
tests/settings_core.py
Normal file
33
tests/settings_core.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
"""
|
||||||
|
Alliance Auth Test Suite Django settings
|
||||||
|
|
||||||
|
Testing core packages only
|
||||||
|
"""
|
||||||
|
|
||||||
|
from allianceauth.project_template.project_name.settings.base import *
|
||||||
|
|
||||||
|
# Use nose to run all tests
|
||||||
|
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||||
|
|
||||||
|
NOSE_ARGS = [
|
||||||
|
#'--with-coverage',
|
||||||
|
#'--cover-package=',
|
||||||
|
#'--exe', # If your tests need this to be found/run, check they py files are not chmodded +x
|
||||||
|
]
|
||||||
|
|
||||||
|
# Celery configuration
|
||||||
|
CELERY_ALWAYS_EAGER = True # Forces celery to run locally for testing
|
||||||
|
|
||||||
|
INSTALLED_APPS += [
|
||||||
|
'django_nose',
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'tests.urls'
|
||||||
|
|
||||||
|
CACHES['default'] = {'BACKEND': 'django.core.cache.backends.db.DatabaseCache'}
|
||||||
|
|
||||||
|
PASSWORD_HASHERS = [
|
||||||
|
'django.contrib.auth.hashers.MD5PasswordHasher',
|
||||||
|
]
|
||||||
|
|
||||||
|
LOGGING = None # Comment out to enable logging for debugging
|
10
tox.ini
10
tox.ini
@ -1,11 +1,12 @@
|
|||||||
[tox]
|
[tox]
|
||||||
skipsdist = true
|
skipsdist = true
|
||||||
usedevelop = true
|
usedevelop = true
|
||||||
envlist = py{35,36,37,38}-dj{2X}
|
envlist = py{35,36,37,38}-{all}
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
setenv =
|
setenv =
|
||||||
DJANGO_SETTINGS_MODULE = settings
|
all: DJANGO_SETTINGS_MODULE = tests.settings_all
|
||||||
|
core: DJANGO_SETTINGS_MODULE = tests.settings_core
|
||||||
basepython =
|
basepython =
|
||||||
py35: python3.5
|
py35: python3.5
|
||||||
py36: python3.6
|
py36: python3.6
|
||||||
@ -13,8 +14,9 @@ basepython =
|
|||||||
py38: python3.8
|
py38: python3.8
|
||||||
deps=
|
deps=
|
||||||
coverage
|
coverage
|
||||||
dj2X: Django>=2.0,<3.0
|
Django>=2.0,<3.0
|
||||||
install_command = pip install -e ".[testing]" -U {opts} {packages}
|
install_command = pip install -e ".[testing]" -U {opts} {packages}
|
||||||
commands =
|
commands =
|
||||||
coverage run runtests.py -v 2
|
all: coverage run runtests.py -v 2
|
||||||
|
core: coverage run runtests.py allianceauth.authentication.tests.test_app_settings -v 2
|
||||||
coverage report -m
|
coverage report -m
|
||||||
|
Loading…
x
Reference in New Issue
Block a user