mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-08 08:06:20 +01:00
167 lines
4.7 KiB
Python
167 lines
4.7 KiB
Python
from django.test import TestCase
|
|
|
|
from allianceauth.menu.constants import MenuItemType
|
|
|
|
from .factories import (
|
|
create_app_menu_item,
|
|
create_folder_menu_item,
|
|
create_link_menu_item,
|
|
)
|
|
|
|
|
|
class TestMenuItem(TestCase):
|
|
def test_str(self):
|
|
# given
|
|
obj = create_link_menu_item()
|
|
# when
|
|
result = str(obj)
|
|
# then
|
|
self.assertIsInstance(result, str)
|
|
|
|
def test_should_return_item_type(self):
|
|
# given
|
|
app_item = create_app_menu_item()
|
|
link_item = create_link_menu_item()
|
|
folder_item = create_folder_menu_item()
|
|
|
|
cases = [
|
|
(app_item, MenuItemType.APP),
|
|
(link_item, MenuItemType.LINK),
|
|
(folder_item, MenuItemType.FOLDER),
|
|
]
|
|
# when
|
|
for obj, expected in cases:
|
|
with self.subTest(type=expected):
|
|
self.assertEqual(obj.item_type, expected)
|
|
|
|
def test_should_identify_if_item_is_a_child(self):
|
|
# given
|
|
folder = create_folder_menu_item()
|
|
child = create_link_menu_item(parent=folder)
|
|
not_child = create_link_menu_item()
|
|
|
|
cases = [(child, True), (not_child, False)]
|
|
# when
|
|
for obj, expected in cases:
|
|
with self.subTest(type=expected):
|
|
self.assertIs(obj.is_child, expected)
|
|
|
|
def test_should_identify_if_item_is_a_folder(self):
|
|
# given
|
|
app_item = create_app_menu_item()
|
|
link_item = create_link_menu_item()
|
|
folder_item = create_folder_menu_item()
|
|
|
|
cases = [
|
|
(app_item, False),
|
|
(link_item, False),
|
|
(folder_item, True),
|
|
]
|
|
# when
|
|
for obj, expected in cases:
|
|
with self.subTest(type=expected):
|
|
self.assertIs(obj.is_folder, expected)
|
|
|
|
def test_should_identify_if_item_is_user_defined(self):
|
|
# given
|
|
app_item = create_app_menu_item()
|
|
link_item = create_link_menu_item()
|
|
folder_item = create_folder_menu_item()
|
|
|
|
cases = [
|
|
(app_item, False),
|
|
(link_item, True),
|
|
(folder_item, True),
|
|
]
|
|
# when
|
|
for obj, expected in cases:
|
|
with self.subTest(type=expected):
|
|
self.assertIs(obj.is_user_defined, expected)
|
|
|
|
def test_should_identify_if_item_is_an_app_item(self):
|
|
# given
|
|
app_item = create_app_menu_item()
|
|
link_item = create_link_menu_item()
|
|
folder_item = create_folder_menu_item()
|
|
|
|
cases = [
|
|
(app_item, True),
|
|
(link_item, False),
|
|
(folder_item, False),
|
|
]
|
|
# when
|
|
for obj, expected in cases:
|
|
with self.subTest(type=expected):
|
|
self.assertIs(obj.is_app_item, expected)
|
|
|
|
def test_should_identify_if_item_is_a_link_item(self):
|
|
# given
|
|
app_item = create_app_menu_item()
|
|
link_item = create_link_menu_item()
|
|
folder_item = create_folder_menu_item()
|
|
|
|
cases = [
|
|
(app_item, False),
|
|
(link_item, True),
|
|
(folder_item, False),
|
|
]
|
|
# when
|
|
for obj, expected in cases:
|
|
with self.subTest(type=expected):
|
|
self.assertIs(obj.is_link_item, expected)
|
|
|
|
def test_should_not_allow_creating_invalid_app_item(self):
|
|
# when
|
|
obj = create_app_menu_item(hook_hash="")
|
|
|
|
# then
|
|
obj.refresh_from_db()
|
|
self.assertIsNone(obj.hook_hash)
|
|
|
|
|
|
class TestMenuItemToHookObj(TestCase):
|
|
def test_should_create_from_link_item(self):
|
|
# given
|
|
obj = create_link_menu_item(text="Alpha")
|
|
|
|
# when
|
|
hook_obj = obj.to_hook_obj()
|
|
|
|
# then
|
|
self.assertEqual(hook_obj.text, "Alpha")
|
|
self.assertEqual(hook_obj.url, obj.url)
|
|
self.assertEqual(hook_obj.html_id, "")
|
|
self.assertFalse(hook_obj.is_folder)
|
|
|
|
def test_should_create_from_folder(self):
|
|
# given
|
|
obj = create_folder_menu_item(text="Alpha", classes="dummy")
|
|
|
|
# when
|
|
hook_obj = obj.to_hook_obj()
|
|
|
|
# then
|
|
self.assertEqual(hook_obj.text, "Alpha")
|
|
self.assertEqual(hook_obj.classes, "dummy")
|
|
self.assertEqual(hook_obj.url, "")
|
|
self.assertTrue(hook_obj.html_id)
|
|
self.assertTrue(hook_obj.is_folder)
|
|
|
|
def test_should_create_from_folder_and_use_default_icon_classes(self):
|
|
# given
|
|
obj = create_folder_menu_item(classes="")
|
|
|
|
# when
|
|
hook_obj = obj.to_hook_obj()
|
|
|
|
# then
|
|
self.assertEqual(hook_obj.classes, "fa-solid fa-folder")
|
|
|
|
def test_should_create_from_app_item(self):
|
|
# given
|
|
obj = create_app_menu_item(text="Alpha")
|
|
|
|
# when
|
|
with self.assertRaises(ValueError):
|
|
obj.to_hook_obj()
|