| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  | # -*- coding: utf-8; -*- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | from unittest.mock import patch | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | from wuttaweb import handler as mod, static | 
					
						
							| 
									
										
										
										
											2024-12-11 22:06:33 -06:00
										 |  |  | from wuttaweb.forms import Form | 
					
						
							|  |  |  | from wuttaweb.grids import Grid | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | from wuttaweb.menus import MenuHandler | 
					
						
							| 
									
										
										
										
											2025-01-06 16:47:48 -06:00
										 |  |  | from wuttaweb.testing import WebTestCase | 
					
						
							| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | class MockMenuHandler(MenuHandler): | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | class LegacyMenuHandler(MenuHandler): | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | class AnotherMenuHandler(MenuHandler): | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/fanstatic/wuttaweb_img/logo.png") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # what about a subpath | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.request.script_name = "/testing" | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         url = handler.get_fanstatic_url(self.request, static.logo) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/testing/fanstatic/wuttaweb_img/logo.png") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_get_favicon_url(self): | 
					
						
							|  |  |  |         handler = self.make_handler() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # default | 
					
						
							|  |  |  |         url = handler.get_favicon_url(self.request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/fanstatic/wuttaweb_img/favicon.ico") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # config override | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.favicon_url", "/testing/other.ico") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         url = handler.get_favicon_url(self.request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/testing/other.ico") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_get_header_logo_url(self): | 
					
						
							|  |  |  |         handler = self.make_handler() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # default | 
					
						
							|  |  |  |         url = handler.get_header_logo_url(self.request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/fanstatic/wuttaweb_img/favicon.ico") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # config override | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.header_logo_url", "/testing/header.png") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         url = handler.get_header_logo_url(self.request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/testing/header.png") | 
					
						
							| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |     def test_get_main_logo_url(self): | 
					
						
							|  |  |  |         handler = self.make_handler() | 
					
						
							| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         # default | 
					
						
							|  |  |  |         url = handler.get_main_logo_url(self.request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/fanstatic/wuttaweb_img/logo.png") | 
					
						
							| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         # config override | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.logo_url", "/testing/other.png") | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         url = handler.get_main_logo_url(self.request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(url, "/testing/other.png") | 
					
						
							| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |     def test_get_menu_handler(self): | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         handler = self.make_handler() | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # built-in default | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:02 -06:00
										 |  |  |         menus = handler.get_menu_handler() | 
					
						
							| 
									
										
										
										
											2024-07-14 10:47:14 -05:00
										 |  |  |         self.assertIsInstance(menus, MenuHandler) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |         self.assertIs(type(menus), MenuHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # configured default | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wutta.web.menus.handler.default_spec", "tests.test_handler:MockMenuHandler" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |         menus = handler.get_menu_handler() | 
					
						
							|  |  |  |         self.assertIsInstance(menus, MockMenuHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # configured handler (legacy) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wutta.web.menus.handler_spec", "tests.test_handler:LegacyMenuHandler" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |         menus = handler.get_menu_handler() | 
					
						
							|  |  |  |         self.assertIsInstance(menus, LegacyMenuHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # configued handler (proper) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wutta.web.menus.handler.spec", "tests.test_handler:AnotherMenuHandler" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |         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() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertIn("wuttaweb.menus:MenuHandler", specs) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # caller can specify default as string | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         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) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # caller can specify default as list | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         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) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # default can be configured | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wutta.web.menus.handler.default_spec", | 
					
						
							|  |  |  |             "tests.test_handler:AnotherMenuHandler", | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |         specs = handler.get_menu_handler_specs() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertIn("wuttaweb.menus:MenuHandler", specs) | 
					
						
							|  |  |  |         self.assertNotIn("tests.test_handler:MockMenuHandler", specs) | 
					
						
							|  |  |  |         self.assertIn("tests.test_handler:AnotherMenuHandler", specs) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # the rest come from entry points | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         with patch.object( | 
					
						
							|  |  |  |             mod, | 
					
						
							|  |  |  |             "load_entry_points", | 
					
						
							|  |  |  |             return_value={ | 
					
						
							|  |  |  |                 "legacy": LegacyMenuHandler, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         ): | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |             specs = handler.get_menu_handler_specs() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.assertNotIn("wuttaweb.menus:MenuHandler", specs) | 
					
						
							|  |  |  |             self.assertNotIn("tests.test_handler:MockMenuHandler", specs) | 
					
						
							|  |  |  |             self.assertIn("tests.test_handler:LegacyMenuHandler", specs) | 
					
						
							| 
									
										
										
										
											2025-01-13 12:55:34 -06:00
										 |  |  |             # nb. this remains from previous config default | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.assertIn("tests.test_handler:AnotherMenuHandler", specs) | 
					
						
							| 
									
										
										
										
											2024-12-11 22:06:33 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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) |