def test_blueprint(self): Menu(self.app) blueprint = Blueprint('foo', 'foo', url_prefix="/foo") @self.app.route('/test') @register_menu(self.app, '.', 'Test') def test(): return 'test' @blueprint.route('/bar') @register_menu(blueprint, 'bar', 'Foo Bar') def bar(): return 'bar' self.app.register_blueprint(blueprint) with self.app.test_client() as c: c.get('/test') assert request.endpoint == 'test' assert current_menu.text == 'Test' with self.app.test_client() as c: c.get('/foo/bar') self.assertEqual(current_menu.submenu('bar').text, 'Foo Bar') self.assertTrue(current_menu.submenu('bar').active)
def test_blueprint(self): Menu(self.app) blueprint = Blueprint('foo', 'foo', url_prefix="/foo") @self.app.route('/test') @register_menu(self.app, '.', 'Test') def test(): return 'test' @blueprint.route('/bar') @register_menu(blueprint, 'bar', 'Foo Bar') def bar(): return 'bar' self.app.register_blueprint(blueprint) with self.app.test_client() as c: c.get('/test') assert request.endpoint == 'test' assert current_menu.text == 'Test' with self.app.test_client() as c: c.get('/foo/bar') self.assertEqual(current_menu.submenu('bar').text, 'Foo Bar') self.assertTrue(current_menu.submenu('bar').active)
def menu_fixup(): item = current_menu.submenu("settings.groups") item.hide() item = current_menu.submenu("settings.workflows") item.hide() item = current_menu.submenu("settings.applications") item.hide() item = current_menu.submenu("settings.oauthclient") item.hide()
def test_simple_app(self): Menu(self.app) @self.app.route('/test') @register_menu(self.app, '.', 'Test') def test(): return 'test' @self.app.route('/level2') @register_menu(self.app, 'level2', 'Level 2') def level2(): return 'level2' @self.app.route('/level3') @register_menu(self.app, 'level2.level3', 'Level 3', order=2) def level3(): return 'level3' @self.app.route('/level3B') @register_menu(self.app, 'level2.level3B', 'Level 3B', order=1) def level3B(): return 'level3B' with self.app.test_client() as c: c.get('/test') assert request.endpoint == 'test' assert current_menu.url == '/test' assert current_menu.text == 'Test' assert current_menu.active self.assertEqual(current_menu.submenu('level2').text, 'Level 2') assert not current_menu.submenu('level2').active assert current_menu.submenu('missing', auto_create=False) is None assert len(current_menu.list_path('.', '.level2.level3')) == 3 assert current_menu.list_path('.', 'missing') is None assert current_menu.list_path('missing', '.level2.level3') is None assert current_menu.list_path('level2.level3B', 'level2.level3') is None with self.app.test_client() as c: c.get('/level2') assert current_menu.submenu('level2').active with self.app.test_client() as c: c.get('/level3') assert current_menu.submenu('.level2.level3').active assert current_menu.submenu('level2.level3').active item_2 = current_menu.submenu('level2.level3') item_1 = current_menu.submenu('level2.level3B') assert item_1.order < item_2.order assert item_1 == current_menu.submenu('level2').children[0] assert item_2 == current_menu.submenu('level2').children[1]
def test_active_when(self): Menu(self.app) @self.app.route('/always') @register_menu(self.app, 'always', 'Always', active_when=lambda: True) def always(): return 'never' @self.app.route('/never') @register_menu(self.app, 'never', 'Never', active_when=lambda: False) def never(): return 'never' @self.app.route('/normal') @register_menu(self.app, 'normal', 'Normal') def normal(): return 'normal' data = { 'never': {'never': False, 'always': True, 'normal': False}, 'always': {'never': False, 'always': True, 'normal': False}, 'normal': {'never': False, 'always': True, 'normal': True}, } for (k, v) in data.items(): with self.app.test_client() as c: c.get('/' + k) for (endpoint, active) in v.items(): self.assertEqual(current_menu.submenu(endpoint).active, active)
def menu_fixup(): # Change order item = current_menu.submenu("main.communities") item._order = 2 # Change order and text item = current_menu.submenu("main.webdeposit") item._text = "Upload" item._order = 4 item = current_menu.submenu("breadcrumbs.webdeposit") item._text = "Upload" # Remove item item = current_menu.submenu("main") item._child_entries.pop('documentation', None)
def test_dynamic_url(self): Menu(self.app) @self.app.route('/<int:id>/<string:name>') @register_menu(self.app, 'test', 'Test', endpoint_arguments_constructor=lambda: { 'id': request.view_args['id'], 'name': request.view_args['name'], }) def test(id, name): return str(id) + ':' + name with self.app.test_request_context(): url = url_for('test', id=1, name='foo') with self.app.test_client() as c: c.get(url) assert url == current_menu.submenu('test').url assert current_menu.submenu('missing').url == '#'
def test_dynamic_url(self): Menu(self.app) @self.app.route('/<int:id>/<string:name>') @register_menu(self.app, 'test', 'Test', endpoint_arguments_constructor=lambda: { 'id': request.view_args['id'], 'name': request.view_args['name'], }) def test(id, name): return str(id) + ':' + name with self.app.test_request_context(): url = url_for('test', id=1, name='foo') with self.app.test_client() as c: c.get(url) assert url == current_menu.submenu('test').url assert current_menu.submenu('missing').url == '#'
def test_kwargs(self): """Test optional arguments.""" Menu(self.app) count = 5 @self.app.route('/test') @register_menu(self.app, 'test', 'Test', count=count) def test(): return 'count' with self.app.test_client() as c: c.get('/test') assert count == current_menu.submenu('test').count
def test_kwargs(self): """Test optional arguments.""" Menu(self.app) count = 5 @self.app.route('/test') @register_menu(self.app, 'test', 'Test', count=count) def test(): return 'count' with self.app.test_client() as c: c.get('/test') assert count == current_menu.submenu('test').count
def test_active_when(self): Menu(self.app) @self.app.route('/always') @register_menu(self.app, 'always', 'Always', active_when=lambda: True) def always(): return 'never' @self.app.route('/never') @register_menu(self.app, 'never', 'Never', active_when=lambda: False) def never(): return 'never' @self.app.route('/normal') @register_menu( self.app, 'normal', 'Normal', active_when=lambda self: request.endpoint == self._endpoint) def normal(): return 'normal' data = { 'never': { 'never': False, 'always': True, 'normal': False }, 'always': { 'never': False, 'always': True, 'normal': False }, 'normal': { 'never': False, 'always': True, 'normal': True }, } for (k, v) in data.items(): with self.app.test_client() as c: c.get('/' + k) for (endpoint, active) in v.items(): self.assertEqual( current_menu.submenu(endpoint).active, active)
def menu_fixup(): # Change order item = current_menu.submenu("main.communities") item._order = 2 # Change order and text item = current_menu.submenu("main.webdeposit") item._text = "Upload" item._order = 4 item = current_menu.submenu("breadcrumbs.webdeposit") item._text = "Upload" # Remove items item = current_menu.submenu("main") item._child_entries.pop('documentation', None) item = current_menu.submenu("settings.groups") item.hide() item = current_menu.submenu("settings.workflows") item.hide() item = current_menu.submenu("main.getstarted.preservation") item.hide()
def menu_fixup(): # Change order item = current_menu.submenu("main.communities") item._order = 2 # Change order and text item = current_menu.submenu("main.webdeposit") item._text = "Upload" item._order = 4 item = current_menu.submenu("breadcrumbs.webdeposit") item._text = "Upload" # Remove items item = current_menu.submenu("main") item._child_entries.pop('documentation', None) item = current_menu.submenu("settings.groups") item.hide() item = current_menu.submenu("settings.workflows") item.hide() item = current_menu.submenu("main.getstarted.preservation") item.hide()
def register_menu_items(): """Setup menu for Zenodo.""" item = current_menu.submenu('breadcrumbs.zenodo_base') item.register('', '') item = current_menu.submenu('main.browse') item.register('', _('Browse'), order=3) item = current_menu.submenu('main.browse.datasets') item.register('search.collection', _('Datasets'), order=1, endpoint_arguments_constructor=lambda: dict(name='datasets')) item = current_menu.submenu('main.browse.images') item.register('search.collection', _('Images'), order=2, endpoint_arguments_constructor=lambda: dict(name='images')) item = current_menu.submenu('main.browse.posters') item.register('search.collection', _('Posters'), order=3, endpoint_arguments_constructor=lambda: dict(name='posters')) item = current_menu.submenu('main.browse.presentations') item.register( 'search.collection', _('Presentations'), order=4, endpoint_arguments_constructor=lambda: dict(name='presentations')) item = current_menu.submenu('main.browse.publications') item.register( 'search.collection', _('Publications'), order=5, endpoint_arguments_constructor=lambda: dict(name='publications')) item = current_menu.submenu('main.browse.software') item.register('search.collection', _('Software'), order=6, endpoint_arguments_constructor=lambda: dict(name='software')) item = current_menu.submenu('main.browse.videos') item.register('search.collection', _('Video/Audio'), order=7, endpoint_arguments_constructor=lambda: dict(name='videos')) item = current_menu.submenu('main.getstarted') item.register('', _('Get started'), order=5) def menu_fixup(): # Change order item = current_menu.submenu("main.communities") item._order = 2 # Change order and text item = current_menu.submenu("main.webdeposit") item._text = "Upload" item._order = 4 item = current_menu.submenu("breadcrumbs.webdeposit") item._text = "Upload" # Remove items item = current_menu.submenu("main") item._child_entries.pop('documentation', None) item = current_menu.submenu("settings.groups") item.hide() item = current_menu.submenu("settings.workflows") item.hide() item = current_menu.submenu("main.getstarted.preservation") item.hide() # Append function to end of before first request functions, to ensure # all menu items have been loaded. current_app.before_first_request_funcs.append(menu_fixup)
def register_menu_items(): """Setup menu for Zenodo.""" item = current_menu.submenu('breadcrumbs.zenodo_base') item.register('', '') item = current_menu.submenu('main.browse') item.register( '', _('Browse'), order=3, active_when=lambda: request.endpoint.startswith("search.collection") ) item = current_menu.submenu('main.browse.datasets') item.register( 'search.collection', _('Datasets'), order=1, endpoint_arguments_constructor=lambda: dict(name='datasets') ) item = current_menu.submenu('main.browse.images') item.register( 'search.collection', _('Images'), order=2, endpoint_arguments_constructor=lambda: dict(name='images') ) item = current_menu.submenu('main.browse.lessons') item.register( 'search.collection', _('Lessons'), order=2, endpoint_arguments_constructor=lambda: dict(name='lessons') ) item = current_menu.submenu('main.browse.posters') item.register( 'search.collection', _('Posters'), order=3, endpoint_arguments_constructor=lambda: dict(name='posters') ) item = current_menu.submenu('main.browse.presentations') item.register( 'search.collection', _('Presentations'), order=4, endpoint_arguments_constructor=lambda: dict(name='presentations') ) item = current_menu.submenu('main.browse.publications') item.register( 'search.collection', _('Publications'), order=5, endpoint_arguments_constructor=lambda: dict(name='publications') ) item = current_menu.submenu('main.browse.software') item.register( 'search.collection', _('Software'), order=6, endpoint_arguments_constructor=lambda: dict(name='software') ) item = current_menu.submenu('main.browse.videos') item.register( 'search.collection', _('Video/Audio'), order=7, endpoint_arguments_constructor=lambda: dict(name='videos') ) item = current_menu.submenu('main.getstarted') item.register( '', _('Get started'), order=5, active_when=lambda: request.endpoint.startswith("zenodo_base.") ) def menu_fixup(): # Change order item = current_menu.submenu("main.communities") item._order = 2 # Change order and text item = current_menu.submenu("main.webdeposit") item._text = "Upload" item._order = 4 item = current_menu.submenu("breadcrumbs.webdeposit") item._text = "Upload" # Remove items item = current_menu.submenu("main") item._child_entries.pop('documentation', None) item = current_menu.submenu("settings.groups") item.hide() item = current_menu.submenu("settings.workflows") item.hide() item = current_menu.submenu("main.getstarted.preservation") item.hide() # Append function to end of before first request functions, to ensure # all menu items have been loaded. current_app.before_first_request_funcs.append(menu_fixup)
def menu_fixup(): current_menu.submenu("settings.change_password").hide() current_menu.submenu("settings.groups").hide() current_menu.submenu("settings.workflows").hide() current_menu.submenu("settings.applications").hide() current_menu.submenu("settings.oauthclient").hide()
def register_menu_items(): item = current_menu.submenu('breadcrumbs.settings') item.register('', _('Account'))
def test_active_when(self): Menu(self.app) @self.app.route('/') @register_menu(self.app, 'root', 'Root') def root(): return 'root' @self.app.route('/always') @register_menu(self.app, 'always', 'Always', active_when=lambda: True) def always(): return 'always' @self.app.route('/never') @register_menu(self.app, 'never', 'Never', active_when=lambda: False) def never(): return 'never' @self.app.route('/normal') @register_menu(self.app, 'normal', 'Normal') def normal(): return 'normal' data = { '/never': { 'root': False, 'never': False, 'always': True, 'normal': False }, '/always': { 'root': False, 'never': False, 'always': True, 'normal': False }, '/normal': { 'root': False, 'never': False, 'always': True, 'normal': True }, '/normal/foo': { 'root': False, 'never': False, 'always': True, 'normal': True }, '/bar/normal': { 'root': False, 'never': False, 'always': True, 'normal': False }, '/bar/normal/foo': { 'root': False, 'never': False, 'always': True, 'normal': False }, '/': { 'root': True, 'never': False, 'always': True, 'normal': False }, '': { 'root': True, 'never': False, 'always': True, 'normal': False }, } for (path, testset) in data.items(): with self.app.test_client() as c: c.get(path) for (endpoint, active_should) in testset.items(): active_is = current_menu.submenu(endpoint).active self.assertEqual( active_is, active_should, 'path="{0}" submenu_by_endpoint="{1}" ' 'active_is={2} active_should={3}'.format( path, endpoint, active_is, active_should ) )
def menu_fixup(): current_menu.submenu("settings.change_password").hide() current_menu.submenu("settings.groups").hide() current_menu.submenu("settings.workflows").hide() current_menu.submenu("settings.applications").hide() current_menu.submenu("settings.oauthclient").hide()
def register_menu_items(): """Register empty account breadcrumb.""" item = current_menu.submenu('breadcrumbs.settings') item.register('', _('Account'))
def test_visible_when(self): Menu(self.app) @self.app.route('/always') @register_menu(self.app, 'always', 'Always', visible_when=lambda: True) def always(): return 'never' @self.app.route('/never') @register_menu(self.app, 'never', 'Never', visible_when=lambda: False) def never(): return 'never' @self.app.route('/normal') @register_menu(self.app, 'normal', 'Normal') def normal(): return 'normal' data = { 'never': { 'never': False, 'always': True, 'normal': True }, 'always': { 'never': False, 'always': True, 'normal': True }, 'normal': { 'never': False, 'always': True, 'normal': True }, } for (k, v) in data.items(): with self.app.test_client() as c: c.get('/' + k) for (endpoint, visible) in v.items(): self.assertEqual( current_menu.submenu(endpoint).visible, visible) with self.app.test_request_context(): current_menu.submenu('always').hide() data = { 'never': { 'never': False, 'always': False, 'normal': True }, 'always': { 'never': False, 'always': False, 'normal': True }, 'normal': { 'never': False, 'always': False, 'normal': True }, } for (k, v) in data.items(): with self.app.test_client() as c: c.get('/' + k) for (endpoint, visible) in v.items(): self.assertEqual( current_menu.submenu(endpoint).visible, visible)
def test_simple_app(self): Menu(self.app) @self.app.route('/test') @register_menu(self.app, '.', 'Test') def test(): return 'test' @self.app.route('/level2') @register_menu(self.app, 'level2', 'Level 2') def level2(): return 'level2' @self.app.route('/level3') @register_menu(self.app, 'level2.level3', 'Level 3', order=2) def level3(): return 'level3' @self.app.route('/level3B') @register_menu(self.app, 'level2.level3B', 'Level 3B', order=1) def level3B(): return 'level3B' with self.app.test_client() as c: c.get('/test') assert request.endpoint == 'test' assert current_menu.url == '/test' assert current_menu.text == 'Test' assert current_menu.active self.assertEqual(current_menu.submenu('level2').text, 'Level 2') assert not current_menu.submenu('level2').active assert current_menu.submenu('missing', auto_create=False) is None assert len(current_menu.list_path('.', '.level2.level3')) == 3 assert current_menu.list_path('.', 'missing') is None assert current_menu.list_path('missing', '.level2.level3') is None assert current_menu.list_path('level2.level3B', 'level2.level3') is None with self.app.test_client() as c: c.get('/level2') assert current_menu.submenu('level2').active with self.app.test_client() as c: c.get('/level3') assert current_menu.submenu('.level2.level3').active assert current_menu.submenu('level2.level3').active assert not current_menu.has_active_child(recursive=False) assert current_menu.has_active_child() assert current_menu.submenu('level2').has_active_child( recursive=False) assert current_menu.submenu('level2').has_active_child() item_2 = current_menu.submenu('level2.level3') item_1 = current_menu.submenu('level2.level3B') assert item_1.order < item_2.order assert item_1 == current_menu.submenu('level2').children[0] assert item_2 == current_menu.submenu('level2').children[1]