Merge branch 'feature_menu_item_badges' into 'master'

Add menu item badge feature and update group icons

See merge request allianceauth/allianceauth!1240
This commit is contained in:
Ariel Rin
2020-09-11 11:33:14 +00:00
19 changed files with 434 additions and 116 deletions

View File

@@ -1,7 +1,10 @@
from allianceauth.services.hooks import MenuItemHook, UrlHook
from django.utils.translation import ugettext_lazy as _
from allianceauth import hooks
from allianceauth.services.hooks import MenuItemHook, UrlHook
from . import urls
from .managers import SRPManager
class SrpMenu(MenuItemHook):
@@ -13,6 +16,8 @@ class SrpMenu(MenuItemHook):
def render(self, request):
if request.user.has_perm('srp.access_srp'):
app_count = SRPManager.pending_requests_count_for_user(request.user)
self.count = app_count if app_count and app_count > 0 else None
return MenuItemHook.render(self, request)
return ''

View File

@@ -1,11 +1,13 @@
import logging
import os
import requests
from django.contrib.auth.models import User
from allianceauth import NAME
from allianceauth.eveonline.providers import provider
from .models import SrpUserRequest
logger = logging.getLogger(__name__)
@@ -50,3 +52,12 @@ class SRPManager:
return ship_type, ship_value, victim_id
else:
raise ValueError("Invalid Kill ID or Hash.")
@staticmethod
def pending_requests_count_for_user(user: User):
"""returns the number of open SRP requests for given user
or None if user has no permission"""
if user.has_perm("auth.srp_management"):
return SrpUserRequest.objects.filter(srp_status="pending").count()
else:
return None

View File

@@ -1,11 +1,16 @@
import inspect
import json
import os
from unittest.mock import patch, Mock
from unittest.mock import patch
from django.contrib.auth.models import User
from django.utils.timezone import now
from django.test import TestCase
from allianceauth.tests.auth_utils import AuthUtils
from ..managers import SRPManager
from ..models import SrpUserRequest, SrpFleetMain
MODULE_PATH = 'allianceauth.srp.managers'
@@ -13,6 +18,7 @@ currentdir = os.path.dirname(os.path.abspath(inspect.getfile(
inspect.currentframe()
)))
def load_data(filename):
"""loads given JSON file from `testdata` sub folder and returns content"""
with open(
@@ -52,7 +58,7 @@ class TestSrpManager(TestCase):
mock_get.return_value.json.return_value = ['']
with self.assertRaises(ValueError):
ship_type, ship_value, victim_id = SRPManager.get_kill_data(81973979)
SRPManager.get_kill_data(81973979)
@patch(MODULE_PATH + '.provider')
@patch(MODULE_PATH + '.requests.get')
@@ -67,6 +73,34 @@ class TestSrpManager(TestCase):
result.return_value = None
with self.assertRaises(ValueError):
ship_type, ship_value, victim_id = SRPManager.get_kill_data(81973979)
SRPManager.get_kill_data(81973979)
def test_pending_requests_count_for_user(self):
user = AuthUtils.create_member("Bruce Wayne")
# when no permission to approve SRP requests
# then return None
self.assertIsNone(SRPManager.pending_requests_count_for_user(user))
# given permission to approve SRP requests
# when no open requests
# then return 0
AuthUtils.add_permission_to_user_by_name("auth.srp_management", user)
user = User.objects.get(pk=user.pk)
self.assertEqual(SRPManager.pending_requests_count_for_user(user), 0)
# given permission to approve SRP requests
# when 1 pending request
# then return 1
fleet = SrpFleetMain.objects.create(fleet_time=now())
SrpUserRequest.objects.create(
killboard_link="https://zkillboard.com/kill/79111612/",
srp_status="Pending",
srp_fleet_main=fleet,
)
SrpUserRequest.objects.create(
killboard_link="https://zkillboard.com/kill/79111612/",
srp_status="Approved",
srp_fleet_main=fleet,
)
self.assertEqual(SRPManager.pending_requests_count_for_user(user), 1)