what i've seen in the wild seems to be caused by a crawler trying to fetch non-minified JS files, when the fanstatic resource library only includes minified JS files. still not sure why that would cause the specific error but oh well, this hopefully "solves" for now
179 lines
6.2 KiB
Python
179 lines
6.2 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
|
|
with patch.object(self.request, "script_name", new="/testing"):
|
|
url = handler.get_fanstatic_url(self.request, static.logo)
|
|
self.assertEqual(url, "/testing/fanstatic/wuttaweb_img/logo.png")
|
|
|
|
# error if environ missing config/data
|
|
environ = dict(self.request.environ)
|
|
del environ["fanstatic.needed"]
|
|
with patch.object(self.request, "environ", new=environ):
|
|
self.assertRaises(
|
|
KeyError, handler.get_fanstatic_url, self.request, static.logo
|
|
)
|
|
|
|
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")
|
|
|
|
# returns empty if environ missing config/data
|
|
environ = dict(self.request.environ)
|
|
del environ["fanstatic.needed"]
|
|
with patch.object(self.request, "environ", new=environ):
|
|
self.assertEqual(handler.get_favicon_url(self.request), "")
|
|
|
|
# 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)
|