# -*- 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 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): return mod.WebHandler(self.config) def test_get_fanstatic_url(self): handler = self.make_handler() # default with / root path url = handler.get_fanstatic_url(self.request, static.logo) self.assertEqual(url, '/fanstatic/wuttaweb_img/logo.png') # what about a subpath self.request.script_name = '/testing' url = handler.get_fanstatic_url(self.request, static.logo) self.assertEqual(url, '/testing/fanstatic/wuttaweb_img/logo.png') def test_get_favicon_url(self): handler = self.make_handler() # default url = handler.get_favicon_url(self.request) self.assertEqual(url, '/fanstatic/wuttaweb_img/favicon.ico') # config override self.config.setdefault('wuttaweb.favicon_url', '/testing/other.ico') url = handler.get_favicon_url(self.request) self.assertEqual(url, '/testing/other.ico') def test_get_header_logo_url(self): handler = self.make_handler() # default url = handler.get_header_logo_url(self.request) self.assertEqual(url, '/fanstatic/wuttaweb_img/favicon.ico') # config override self.config.setdefault('wuttaweb.header_logo_url', '/testing/header.png') url = handler.get_header_logo_url(self.request) self.assertEqual(url, '/testing/header.png') def test_get_main_logo_url(self): handler = self.make_handler() # default url = handler.get_main_logo_url(self.request) self.assertEqual(url, '/fanstatic/wuttaweb_img/logo.png') # config override self.config.setdefault('wuttaweb.logo_url', '/testing/other.png') url = handler.get_main_logo_url(self.request) self.assertEqual(url, '/testing/other.png') 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() form = handler.make_form(self.request) self.assertIsInstance(form, Form) def test_make_grid(self): handler = self.make_handler() grid = handler.make_grid(self.request) self.assertIsInstance(grid, Grid)