Files
allianceauth/allianceauth/menu/tests/test_models.py
2024-02-17 07:56:38 +00:00

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()