Add support for unbinding sub-menus.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
- Allow changing the output format, DPI of the pdftoppm command, and
|
||||
the output format of the converter via the CONVERTER_GRAPHICS_BACKEND_CONFIG
|
||||
setting. GitHub issues #256 #257 GitLab issue #416.
|
||||
- Add support for unbinding sub menus.
|
||||
|
||||
2.6.4 (2017-07-26)
|
||||
==================
|
||||
|
||||
@@ -61,6 +61,10 @@ class Menu(object):
|
||||
def get(cls, name):
|
||||
return cls._registry[name]
|
||||
|
||||
@classmethod
|
||||
def reset(cls):
|
||||
cls._registry={}
|
||||
|
||||
def __init__(self, name, icon=None, label=None):
|
||||
if name in self.__class__._registry:
|
||||
raise Exception('A menu with this name already exists')
|
||||
@@ -196,7 +200,8 @@ class Menu(object):
|
||||
for link in self.bound_links.get(None, []):
|
||||
if isinstance(link, Menu):
|
||||
resolved_link = link
|
||||
resolved_links.append(resolved_link)
|
||||
if resolved_link not in self.unbound_links.get(None, ()):
|
||||
resolved_links.append(resolved_link)
|
||||
else:
|
||||
# "Always show" links
|
||||
resolved_link = link.resolve(context=context)
|
||||
|
||||
9
mayan/apps/navigation/tests/literals.py
Normal file
9
mayan/apps/navigation/tests/literals.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
TEST_PERMISSION_NAMESPACE_NAME = 'test namespace name'
|
||||
TEST_PERMISSION_NAMESPACE_TEXT = 'test namespace text'
|
||||
TEST_PERMISSION_NAME = 'test permission name'
|
||||
TEST_PERMISSION_LABEL = 'test permission label'
|
||||
TEST_LINK_TEXT = 'test link text'
|
||||
TEST_MENU_NAME = 'menu test'
|
||||
TEST_SUBMENU_NAME = 'submenu test'
|
||||
@@ -9,13 +9,13 @@ from common.tests.test_views import GenericViewTestCase
|
||||
from permissions import Permission, PermissionNamespace
|
||||
from user_management.tests import TEST_USER_PASSWORD, TEST_USER_USERNAME
|
||||
|
||||
from ..classes import Link
|
||||
from ..classes import Link, Menu
|
||||
|
||||
TEST_PERMISSION_NAMESPACE_NAME = 'test namespace name'
|
||||
TEST_PERMISSION_NAMESPACE_TEXT = 'test namespace text'
|
||||
TEST_PERMISSION_NAME = 'test permission name'
|
||||
TEST_PERMISSION_LABEL = 'test permission label'
|
||||
TEST_LINK_TEXT = 'test link text'
|
||||
from .literals import (
|
||||
TEST_PERMISSION_NAMESPACE_NAME, TEST_PERMISSION_NAMESPACE_TEXT,
|
||||
TEST_PERMISSION_NAME, TEST_PERMISSION_LABEL, TEST_LINK_TEXT,
|
||||
TEST_MENU_NAME, TEST_SUBMENU_NAME
|
||||
)
|
||||
|
||||
|
||||
class LinkClassTestCase(GenericViewTestCase):
|
||||
@@ -105,3 +105,50 @@ class LinkClassTestCase(GenericViewTestCase):
|
||||
|
||||
self.assertNotEqual(resolved_link, None)
|
||||
self.assertEqual(resolved_link.url, reverse(TEST_VIEW_NAME))
|
||||
|
||||
|
||||
class MenuClassTestCase(GenericViewTestCase):
|
||||
def setUp(self):
|
||||
super(MenuClassTestCase, self).setUp()
|
||||
|
||||
self.add_test_view(test_object=self.group)
|
||||
|
||||
self.namespace = PermissionNamespace(
|
||||
TEST_PERMISSION_NAMESPACE_NAME, TEST_PERMISSION_NAMESPACE_TEXT
|
||||
)
|
||||
|
||||
self.permission = self.namespace.add_permission(
|
||||
name=TEST_PERMISSION_NAME, label=TEST_PERMISSION_LABEL
|
||||
)
|
||||
|
||||
Menu.reset()
|
||||
self.menu = Menu(name=TEST_MENU_NAME)
|
||||
self.sub_menu = Menu(name=TEST_SUBMENU_NAME)
|
||||
self.link = Link(text=TEST_LINK_TEXT, view=TEST_VIEW_NAME)
|
||||
Permission.invalidate_cache()
|
||||
|
||||
def test_null_source_link_unbinding(self):
|
||||
self.menu.bind_links(links=(self.link,))
|
||||
|
||||
response = self.get(TEST_VIEW_NAME)
|
||||
context = Context({'request': response.wsgi_request})
|
||||
|
||||
self.assertEqual(
|
||||
self.menu.resolve(context=context)[0][0].link, self.link
|
||||
)
|
||||
|
||||
self.menu.unbind_links(links=(self.link,))
|
||||
|
||||
self.assertEqual(self.menu.resolve(context=context), [])
|
||||
|
||||
def test_null_source_submenu_unbinding(self):
|
||||
self.menu.bind_links(links=(self.sub_menu,))
|
||||
|
||||
response = self.get(TEST_VIEW_NAME)
|
||||
context = Context({'request': response.wsgi_request})
|
||||
|
||||
self.assertEqual(self.menu.resolve(context=context), [[self.sub_menu]])
|
||||
|
||||
self.menu.unbind_links(links=(self.sub_menu,))
|
||||
|
||||
self.assertEqual(self.menu.resolve(context=context), [])
|
||||
|
||||
Reference in New Issue
Block a user