fix: expose setting to choose menu handler, in appinfo/configure
This commit is contained in:
parent
8ba44e10bd
commit
2b3d69a379
5 changed files with 181 additions and 12 deletions
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from wuttaweb import handler as mod, static
|
||||
from wuttaweb.forms import Form
|
||||
from wuttaweb.grids import Grid
|
||||
|
@ -7,6 +9,16 @@ from wuttaweb.menus import MenuHandler
|
|||
from wuttaweb.testing import WebTestCase
|
||||
|
||||
|
||||
class MockMenuHandler(MenuHandler):
|
||||
pass
|
||||
|
||||
class LegacyMenuHandler(MenuHandler):
|
||||
pass
|
||||
|
||||
class AnotherMenuHandler(MenuHandler):
|
||||
pass
|
||||
|
||||
|
||||
class TestWebHandler(WebTestCase):
|
||||
|
||||
def make_handler(self):
|
||||
|
@ -60,10 +72,71 @@ class TestWebHandler(WebTestCase):
|
|||
url = handler.get_main_logo_url(self.request)
|
||||
self.assertEqual(url, '/testing/other.png')
|
||||
|
||||
def test_menu_handler_default(self):
|
||||
def test_get_menu_handler(self):
|
||||
handler = self.make_handler()
|
||||
|
||||
# built-in default
|
||||
menus = handler.get_menu_handler()
|
||||
self.assertIsInstance(menus, MenuHandler)
|
||||
self.assertIs(type(menus), MenuHandler)
|
||||
|
||||
# configured default
|
||||
self.config.setdefault('wutta.web.menus.handler.default_spec',
|
||||
'tests.test_handler:MockMenuHandler')
|
||||
menus = handler.get_menu_handler()
|
||||
self.assertIsInstance(menus, MockMenuHandler)
|
||||
|
||||
# configured handler (legacy)
|
||||
self.config.setdefault('wutta.web.menus.handler_spec',
|
||||
'tests.test_handler:LegacyMenuHandler')
|
||||
menus = handler.get_menu_handler()
|
||||
self.assertIsInstance(menus, LegacyMenuHandler)
|
||||
|
||||
# configued handler (proper)
|
||||
self.config.setdefault('wutta.web.menus.handler.spec',
|
||||
'tests.test_handler:AnotherMenuHandler')
|
||||
menus = handler.get_menu_handler()
|
||||
self.assertIsInstance(menus, AnotherMenuHandler)
|
||||
|
||||
def test_get_menu_handler_specs(self):
|
||||
handler = self.make_handler()
|
||||
|
||||
# at least one spec by default
|
||||
specs = handler.get_menu_handler_specs()
|
||||
self.assertIn('wuttaweb.menus:MenuHandler', specs)
|
||||
|
||||
# caller can specify default as string
|
||||
specs = handler.get_menu_handler_specs(default='tests.test_handler:MockMenuHandler')
|
||||
self.assertIn('wuttaweb.menus:MenuHandler', specs)
|
||||
self.assertIn('tests.test_handler:MockMenuHandler', specs)
|
||||
self.assertNotIn('tests.test_handler:AnotherMenuHandler', specs)
|
||||
|
||||
# caller can specify default as list
|
||||
specs = handler.get_menu_handler_specs(default=[
|
||||
'tests.test_handler:MockMenuHandler',
|
||||
'tests.test_handler:AnotherMenuHandler'])
|
||||
self.assertIn('wuttaweb.menus:MenuHandler', specs)
|
||||
self.assertIn('tests.test_handler:MockMenuHandler', specs)
|
||||
self.assertIn('tests.test_handler:AnotherMenuHandler', specs)
|
||||
|
||||
# default can be configured
|
||||
self.config.setdefault('wutta.web.menus.handler.default_spec',
|
||||
'tests.test_handler:AnotherMenuHandler')
|
||||
specs = handler.get_menu_handler_specs()
|
||||
self.assertIn('wuttaweb.menus:MenuHandler', specs)
|
||||
self.assertNotIn('tests.test_handler:MockMenuHandler', specs)
|
||||
self.assertIn('tests.test_handler:AnotherMenuHandler', specs)
|
||||
|
||||
# the rest come from entry points
|
||||
with patch.object(mod, 'load_entry_points', return_value={
|
||||
'legacy': LegacyMenuHandler,
|
||||
}):
|
||||
specs = handler.get_menu_handler_specs()
|
||||
self.assertNotIn('wuttaweb.menus:MenuHandler', specs)
|
||||
self.assertNotIn('tests.test_handler:MockMenuHandler', specs)
|
||||
self.assertIn('tests.test_handler:LegacyMenuHandler', specs)
|
||||
# nb. this remains from previous config default
|
||||
self.assertIn('tests.test_handler:AnotherMenuHandler', specs)
|
||||
|
||||
def test_make_form(self):
|
||||
handler = self.make_handler()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue