165 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- 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)
 |