mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +00:00
menu: Removed unused templates, methods and properties
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
parent
27980238cd
commit
0eee8ddf65
@ -23,11 +23,11 @@ from plinth.utils import format_lazy
|
|||||||
class Menu(object):
|
class Menu(object):
|
||||||
"""One menu item."""
|
"""One menu item."""
|
||||||
|
|
||||||
def __init__(self, name="", short_description="", label="", icon="",
|
def __init__(self, name="", short_description="", icon="", url="#",
|
||||||
url="#", order=50):
|
order=50):
|
||||||
"""label is the text that is displayed on the menu.
|
"""Initialize a new menu item with basic properties.
|
||||||
|
|
||||||
icon is the icon to be displayed next to the label.
|
icon is the icon to be displayed for the menu item.
|
||||||
Choose from the Fork Awesome set:
|
Choose from the Fork Awesome set:
|
||||||
https://forkawesome.github.io/Fork-Awesome/icons/
|
https://forkawesome.github.io/Fork-Awesome/icons/
|
||||||
|
|
||||||
@ -44,7 +44,6 @@ class Menu(object):
|
|||||||
"""
|
"""
|
||||||
self.name = name
|
self.name = name
|
||||||
self.short_description = short_description
|
self.short_description = short_description
|
||||||
self.label = label
|
|
||||||
self.icon = icon
|
self.icon = icon
|
||||||
self.url = url
|
self.url = url
|
||||||
self.order = order
|
self.order = order
|
||||||
@ -74,20 +73,9 @@ class Menu(object):
|
|||||||
url_args and url_kwargs will be passed on to Django reverse().
|
url_args and url_kwargs will be passed on to Django reverse().
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if short_description:
|
|
||||||
label = format_lazy('{0} ({1})', short_description, name)
|
|
||||||
else:
|
|
||||||
label = name
|
|
||||||
url = reverse_lazy(urlname, args=url_args, kwargs=url_kwargs)
|
url = reverse_lazy(urlname, args=url_args, kwargs=url_kwargs)
|
||||||
return self.add_item(name, short_description, label, icon, url, order)
|
item = Menu(name=name, short_description=short_description, icon=icon,
|
||||||
|
url=url, order=order)
|
||||||
def add_item(self, name, short_description, label, icon, url, order=50):
|
|
||||||
"""Create a new menu item with given parameters, add it to this menu and
|
|
||||||
return it.
|
|
||||||
|
|
||||||
"""
|
|
||||||
item = Menu(name=name, short_description=short_description,
|
|
||||||
label=label, icon=icon, url=url, order=order)
|
|
||||||
self.items.append(item)
|
self.items.append(item)
|
||||||
|
|
||||||
return item
|
return item
|
||||||
|
|||||||
@ -48,6 +48,6 @@ MIDDLEWARE_CLASSES = (
|
|||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
)
|
)
|
||||||
|
|
||||||
ROOT_URLCONF = 'plinth.urls'
|
ROOT_URLCONF = 'plinth.tests.data.urls'
|
||||||
|
|
||||||
SECRET_KEY = 'django_tests_secret_key'
|
SECRET_KEY = 'django_tests_secret_key'
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
{% comment %}
|
|
||||||
#
|
#
|
||||||
# This file is part of FreedomBox.
|
# This file is part of FreedomBox.
|
||||||
#
|
#
|
||||||
@ -15,27 +14,17 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
{% endcomment %}
|
"""
|
||||||
|
Django URL patterns for running tests.
|
||||||
|
"""
|
||||||
|
|
||||||
{% load i18n %}
|
from django.conf.urls import url
|
||||||
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-stacked">
|
_test_view = TemplateView.as_view(template_name='index.html')
|
||||||
{% for item in menu.items %}
|
urlpatterns = [
|
||||||
|
url(r'^$', _test_view, name='index'),
|
||||||
{% if item.url in active_menu_urls %}
|
url(r'^apps/$', _test_view, name='apps'),
|
||||||
<li class="active">
|
url(r'^sys/$', _test_view, name='system'),
|
||||||
<a href="{{ item.url }}" class="active">
|
url(r'^test/(?P<a>\d+)/(?P<b>\d+)/(?P<c>\d+)/$', _test_view, name='test'),
|
||||||
{% else %}
|
]
|
||||||
<li>
|
|
||||||
<a href="{{ item.url }}">
|
|
||||||
{% endif %}
|
|
||||||
<span class="fa {{ item.icon }}"></span>
|
|
||||||
{{ item.label }}
|
|
||||||
</a>
|
|
||||||
{% if item.items %}
|
|
||||||
{% include "menu.html" with menu=item %}
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
@ -27,7 +27,7 @@ from django.urls import reverse
|
|||||||
from plinth import menu as menu_module
|
from plinth import menu as menu_module
|
||||||
from plinth.menu import Menu
|
from plinth.menu import Menu
|
||||||
|
|
||||||
URL_TEMPLATE = '/a{}/b{}/c{}/'
|
URL_TEMPLATE = '/test/{}/{}/{}/'
|
||||||
|
|
||||||
# Test helper methods
|
# Test helper methods
|
||||||
|
|
||||||
@ -35,30 +35,26 @@ URL_TEMPLATE = '/a{}/b{}/c{}/'
|
|||||||
def build_menu(size=5):
|
def build_menu(size=5):
|
||||||
"""Build a menu with the specified number of items."""
|
"""Build a menu with the specified number of items."""
|
||||||
random.seed()
|
random.seed()
|
||||||
item_data = []
|
|
||||||
for index in range(1, size + 1):
|
|
||||||
item_data.append([
|
|
||||||
'Name' + str(index), 'ShortDescription' + str(index),
|
|
||||||
'Item' + str(index), 'Icon' + str(index),
|
|
||||||
URL_TEMPLATE.format(index, index, index),
|
|
||||||
random.randint(0, 1000)
|
|
||||||
])
|
|
||||||
|
|
||||||
menu = Menu()
|
menu = Menu()
|
||||||
for data in item_data:
|
|
||||||
menu.add_item(data[0], data[1], data[2], data[3], data[4], data[5])
|
for index in range(1, size + 1):
|
||||||
|
args = [
|
||||||
|
'Name' + str(index), 'Icon' + str(index), 'test',
|
||||||
|
'ShortDescription' + str(index),
|
||||||
|
random.randint(0, 1000)
|
||||||
|
]
|
||||||
|
kwargs = {'url_kwargs': {'a': index, 'b': index, 'c': index}}
|
||||||
|
|
||||||
|
menu.add_urlname(*args, **kwargs)
|
||||||
|
|
||||||
return menu
|
return menu
|
||||||
|
|
||||||
|
|
||||||
def dump_menu(menu):
|
@pytest.fixture(name='empty_menus', autouse=True)
|
||||||
"""Dump the specified menu URL hierarchy to the console."""
|
def fixture_empty_menus():
|
||||||
print()
|
"""Remove all menu entries before starting a test."""
|
||||||
print('# # # # # # # # # #')
|
Menu._all_menus = {}
|
||||||
print('Top level URL: %s' % menu.url)
|
|
||||||
for item in menu.items:
|
|
||||||
print(' Item URL: %s' % item.url)
|
|
||||||
print('# # # # # # # # # #')
|
|
||||||
|
|
||||||
|
|
||||||
def test_init():
|
def test_init():
|
||||||
@ -68,12 +64,10 @@ def test_init():
|
|||||||
assert isinstance(main_menu, Menu)
|
assert isinstance(main_menu, Menu)
|
||||||
|
|
||||||
apps_menu = main_menu.get('apps')
|
apps_menu = main_menu.get('apps')
|
||||||
assert apps_menu.label == ''
|
|
||||||
assert apps_menu.icon == 'fa-download'
|
assert apps_menu.icon == 'fa-download'
|
||||||
assert str(apps_menu.url) == '/apps/'
|
assert str(apps_menu.url) == '/apps/'
|
||||||
|
|
||||||
system_menu = main_menu.get('system')
|
system_menu = main_menu.get('system')
|
||||||
assert system_menu.label == ''
|
|
||||||
assert system_menu.icon == 'fa-cog'
|
assert system_menu.icon == 'fa-cog'
|
||||||
assert str(system_menu.url) == '/sys/'
|
assert str(system_menu.url) == '/sys/'
|
||||||
|
|
||||||
@ -81,7 +75,6 @@ def test_init():
|
|||||||
def test_menu_creation_without_arguments():
|
def test_menu_creation_without_arguments():
|
||||||
"""Verify the Menu state without initialization parameters."""
|
"""Verify the Menu state without initialization parameters."""
|
||||||
menu = Menu()
|
menu = Menu()
|
||||||
assert menu.label == ''
|
|
||||||
assert menu.icon == ''
|
assert menu.icon == ''
|
||||||
assert menu.url == '#'
|
assert menu.url == '#'
|
||||||
assert menu.order == 50
|
assert menu.order == 50
|
||||||
@ -92,16 +85,14 @@ def test_menu_creation_with_arguments():
|
|||||||
"""Verify the Menu state with initialization parameters."""
|
"""Verify the Menu state with initialization parameters."""
|
||||||
expected_name = 'Name'
|
expected_name = 'Name'
|
||||||
expected_short_description = 'ShortDescription'
|
expected_short_description = 'ShortDescription'
|
||||||
expected_label = 'Label'
|
|
||||||
expected_icon = 'Icon'
|
expected_icon = 'Icon'
|
||||||
expected_url = '/aaa/bbb/ccc/'
|
expected_url = '/aaa/bbb/ccc/'
|
||||||
expected_order = 42
|
expected_order = 42
|
||||||
menu = Menu(expected_name, expected_short_description, expected_label,
|
menu = Menu(expected_name, expected_short_description, expected_icon,
|
||||||
expected_icon, expected_url, expected_order)
|
expected_url, expected_order)
|
||||||
|
|
||||||
assert expected_name == menu.name
|
assert expected_name == menu.name
|
||||||
assert expected_short_description == menu.short_description
|
assert expected_short_description == menu.short_description
|
||||||
assert expected_label == menu.label
|
|
||||||
assert expected_icon == menu.icon
|
assert expected_icon == menu.icon
|
||||||
assert expected_url == menu.url
|
assert expected_url == menu.url
|
||||||
assert expected_order == menu.order
|
assert expected_order == menu.order
|
||||||
@ -112,20 +103,18 @@ def test_get():
|
|||||||
"""Verify that a menu item can be correctly retrieved."""
|
"""Verify that a menu item can be correctly retrieved."""
|
||||||
expected_name = 'Name2'
|
expected_name = 'Name2'
|
||||||
expected_short_description = 'ShortDescription2'
|
expected_short_description = 'ShortDescription2'
|
||||||
expected_label = 'Label2'
|
|
||||||
expected_icon = 'Icon2'
|
expected_icon = 'Icon2'
|
||||||
expected_url = 'index'
|
expected_url = 'index'
|
||||||
reversed_url = reverse(expected_url)
|
reversed_url = reverse(expected_url)
|
||||||
expected_order = 2
|
expected_order = 2
|
||||||
menu = Menu()
|
menu = Menu()
|
||||||
menu.add_item(expected_name, expected_short_description, expected_label,
|
menu.add_urlname(expected_name, expected_icon, expected_url,
|
||||||
expected_icon, reversed_url, expected_order)
|
expected_short_description, expected_order)
|
||||||
actual_item = menu.get(expected_url)
|
actual_item = menu.get(expected_url)
|
||||||
|
|
||||||
assert actual_item is not None
|
assert actual_item is not None
|
||||||
assert expected_name == actual_item.name
|
assert expected_name == actual_item.name
|
||||||
assert expected_short_description == actual_item.short_description
|
assert expected_short_description == actual_item.short_description
|
||||||
assert expected_label == actual_item.label
|
|
||||||
assert expected_icon == actual_item.icon
|
assert expected_icon == actual_item.icon
|
||||||
assert reversed_url == actual_item.url
|
assert reversed_url == actual_item.url
|
||||||
assert expected_order == actual_item.order
|
assert expected_order == actual_item.order
|
||||||
@ -136,16 +125,15 @@ def test_get_with_item_not_found():
|
|||||||
"""Verify that a KeyError is raised if a menu item is not found."""
|
"""Verify that a KeyError is raised if a menu item is not found."""
|
||||||
expected_name = 'Name3'
|
expected_name = 'Name3'
|
||||||
expected_short_description = 'ShortDescription3'
|
expected_short_description = 'ShortDescription3'
|
||||||
expected_label = 'Label3'
|
|
||||||
expected_icon = 'Icon3'
|
expected_icon = 'Icon3'
|
||||||
expected_url = 'index'
|
expected_url = 'index'
|
||||||
expected_order = 3
|
expected_order = 3
|
||||||
menu = Menu()
|
menu = Menu()
|
||||||
menu.add_item(expected_name, expected_short_description, expected_label,
|
menu.add_urlname(expected_name, expected_icon, expected_url,
|
||||||
expected_icon, expected_url, expected_order)
|
expected_short_description, expected_order)
|
||||||
|
|
||||||
with pytest.raises(KeyError):
|
with pytest.raises(KeyError):
|
||||||
menu.get(expected_url)
|
menu.get('apps')
|
||||||
|
|
||||||
|
|
||||||
def test_sort_items():
|
def test_sort_items():
|
||||||
@ -163,56 +151,31 @@ def test_sort_items():
|
|||||||
for index in range(1, size):
|
for index in range(1, size):
|
||||||
assert items[index].order >= items[index - 1].order
|
assert items[index].order >= items[index - 1].order
|
||||||
if items[index].order == items[index - 1].order:
|
if items[index].order == items[index - 1].order:
|
||||||
assert items[index].label >= items[index - 1].label
|
assert items[index].name >= items[index - 1].name
|
||||||
|
|
||||||
|
|
||||||
def test_add_urlname():
|
def test_add_urlname():
|
||||||
"""Verify that a named URL can be added to a menu correctly."""
|
"""Verify that a named URL can be added to a menu correctly."""
|
||||||
expected_title = 'Label4'
|
expected_name = 'Name4'
|
||||||
expected_short_description = 'Description4'
|
expected_short_description = 'Description4'
|
||||||
expected_icon = 'Icon4'
|
expected_icon = 'Icon4'
|
||||||
expected_url = 'index'
|
expected_url = 'index'
|
||||||
reversed_url = reverse(expected_url)
|
reversed_url = reverse(expected_url)
|
||||||
expected_order = 4
|
expected_order = 4
|
||||||
menu = Menu()
|
menu = Menu()
|
||||||
actual_item = menu.add_urlname(expected_title, expected_icon, expected_url,
|
actual_item = menu.add_urlname(expected_name, expected_icon, expected_url,
|
||||||
expected_short_description, expected_order)
|
expected_short_description, expected_order)
|
||||||
|
|
||||||
assert len(menu.items) == 1
|
assert len(menu.items) == 1
|
||||||
assert actual_item is not None
|
assert actual_item is not None
|
||||||
assert actual_item == menu.items[0]
|
assert actual_item == menu.items[0]
|
||||||
assert actual_item.label == 'Description4 (Label4)'
|
assert expected_name == actual_item.name
|
||||||
assert expected_icon == actual_item.icon
|
assert expected_icon == actual_item.icon
|
||||||
assert reversed_url == actual_item.url
|
assert reversed_url == actual_item.url
|
||||||
assert expected_order == actual_item.order
|
assert expected_order == actual_item.order
|
||||||
assert not actual_item.items
|
assert not actual_item.items
|
||||||
|
|
||||||
|
|
||||||
def test_add_item():
|
|
||||||
"""Verify that a menu item can be correctly added."""
|
|
||||||
expected_name = 'Name5'
|
|
||||||
expected_short_description = 'ShortDescription5'
|
|
||||||
expected_label = 'Label5'
|
|
||||||
expected_icon = 'Icon5'
|
|
||||||
expected_url = '/jjj/kkk/lll/'
|
|
||||||
expected_order = 5
|
|
||||||
menu = Menu()
|
|
||||||
actual_item = menu.add_item(expected_name, expected_short_description,
|
|
||||||
expected_label, expected_icon, expected_url,
|
|
||||||
expected_order)
|
|
||||||
|
|
||||||
assert len(menu.items) == 1
|
|
||||||
assert actual_item is not None
|
|
||||||
assert actual_item == menu.items[0]
|
|
||||||
assert expected_name == actual_item.name
|
|
||||||
assert expected_short_description == actual_item.short_description
|
|
||||||
assert expected_label == actual_item.label
|
|
||||||
assert expected_icon == actual_item.icon
|
|
||||||
assert expected_url == actual_item.url
|
|
||||||
assert expected_order == actual_item.order
|
|
||||||
assert not actual_item.items
|
|
||||||
|
|
||||||
|
|
||||||
def test_active_item():
|
def test_active_item():
|
||||||
"""Verify that an active menu item can be correctly retrieved."""
|
"""Verify that an active menu item can be correctly retrieved."""
|
||||||
menu = build_menu()
|
menu = build_menu()
|
||||||
@ -222,7 +185,6 @@ def test_active_item():
|
|||||||
request.path = URL_TEMPLATE.format(index, index, index)
|
request.path = URL_TEMPLATE.format(index, index, index)
|
||||||
item = menu.active_item(request)
|
item = menu.active_item(request)
|
||||||
if index <= 5:
|
if index <= 5:
|
||||||
assert 'Item' + str(index) == item.label
|
|
||||||
assert request.path == item.url
|
assert request.path == item.url
|
||||||
else:
|
else:
|
||||||
assert item is None
|
assert item is None
|
||||||
@ -235,5 +197,4 @@ def test_active_item_when_inside_subpath():
|
|||||||
request = HttpRequest()
|
request = HttpRequest()
|
||||||
request.path = expected_url + 'd/e/f/'
|
request.path = expected_url + 'd/e/f/'
|
||||||
item = menu.active_item(request)
|
item = menu.active_item(request)
|
||||||
assert item.label == 'Item1'
|
|
||||||
assert expected_url == item.url
|
assert expected_url == item.url
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user