[FIX] Hide empty folders in menu

This commit is contained in:
Aaron Kable 2024-03-16 03:59:54 +00:00 committed by Ariel Rin
parent e0945fac80
commit 01cefe1457
3 changed files with 48 additions and 1 deletions

View File

@ -98,6 +98,10 @@ def render_menu(request: HttpRequest) -> List[RenderedMenuItem]:
if item.is_app_item:
rendered_item = _render_app_item(request, hook_items, item, bs5_template)
if rendered_item.html == "":
# If there is no content dont render it.
# This item has probably been hidden by permissions
continue
elif item.is_link_item:
rendered_item = _render_link_item(request, item, bs5_template)
elif item.is_folder:

View File

@ -19,6 +19,11 @@ def create_user(permissions=None, **kwargs) -> User:
return user
def create_menu_item_hook_class(**kwargs) -> MenuItemHook:
num = next(counter_menu_item_hook)
return type(f"GeneratedMenuItem{num}", (MenuItemHook,), {})
def create_menu_item_hook(**kwargs) -> MenuItemHook:
num = next(counter_menu_item_hook)
new_class = type(f"GeneratedMenuItem{num}", (MenuItemHook,), {})

View File

@ -14,6 +14,7 @@ from allianceauth.menu.tests.factories import (
create_folder_menu_item,
create_link_menu_item,
create_menu_item_from_hook,
create_menu_item_hook_class,
create_menu_item_hook_function,
create_rendered_menu_item,
)
@ -177,6 +178,44 @@ class TestRenderDefaultMenu(TestCase):
self.assertEqual(menu[0].menu_item.text, "Alpha")
self.assertEqual(menu[1].menu_item.text, "Bravo")
def test_should_remove_empty_folders_with_items_hidden(self, mock_get_hooks):
# given
class TestHook(create_menu_item_hook_class()):
text = "Dummy App No Data"
classes = "fa-solid fa-users-gear"
url_name = "groupmanagement:management"
def render(Self, request):
# simulate no perms
return ""
params = {
"text": "Alpha",
"classes": "fa-solid fa-users-gear",
"url_name": "groupmanagement:management",
}
alpha = TestHook(**params)
hooks = [lambda: alpha]
mock_get_hooks.return_value = hooks
folder = create_folder_menu_item(text="Folder", order=2)
create_menu_item_from_hook(hooks[0], parent=folder)
create_link_menu_item(text="Bravo", order=3) # this is all that should show
request = self.factory.get("/")
# when
result = render_menu(request)
# then
menu = list(result)
self.assertEqual(len(menu), 1)
self.assertEqual(menu[0].menu_item.text, "Bravo")
def test_should_not_include_hidden_items(self, mock_get_hooks):
# given
mock_get_hooks.return_value = []
@ -196,7 +235,6 @@ class TestRenderDefaultMenu(TestCase):
self.assertEqual(menu[1].menu_item.text, "Charlie")
def test_should_not_render_hidden_folders(self, mock_get_hooks):
# given
# given
menu = [
create_menu_item_hook_function(text="Charlie", count=42),