menu: Removed unused templates, methods and properties

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
Sunil Mohan Adapa 2019-05-07 19:46:17 -07:00
parent 27980238cd
commit 0eee8ddf65
No known key found for this signature in database
GPG Key ID: 43EA1CFF0AA7C5F2
4 changed files with 45 additions and 107 deletions

View File

@ -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

View File

@ -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'

View File

@ -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>

View File

@ -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