3
0
Fork 0
wuttaweb/tests/cli/test_webapp.py
Lance Edgar 4d0693862d fix: format all code with black
and from now on should not deviate from that...
2025-08-31 12:26:43 -05:00

121 lines
3.6 KiB
Python

# -*- coding: utf-8; -*-
from unittest.mock import MagicMock, patch
from wuttjamaican.testing import ConfigTestCase
from wuttaweb.cli import webapp as mod
class TestWebapp(ConfigTestCase):
def make_context(self, **kwargs):
params = {"auto_reload": False}
params.update(kwargs.get("params", {}))
ctx = MagicMock(params=params)
ctx.parent.wutta_config = self.config
return ctx
def test_missing_config_file(self):
# nb. our default config has no files, so can test w/ that
ctx = self.make_context()
with patch.object(mod, "sys") as sys:
sys.exit.side_effect = RuntimeError
self.assertRaises(RuntimeError, mod.webapp, ctx)
sys.stderr.write.assert_called_once_with("no config files found!\n")
sys.exit.assert_called_once_with(1)
def test_invalid_runner(self):
# make new config from file, with bad setting
path = self.write_file(
"my.conf",
"""
[wutta.web]
app.runner = bogus
""",
)
self.config = self.make_config(files=[path])
ctx = self.make_context()
with patch.object(mod, "sys") as sys:
sys.exit.side_effect = RuntimeError
self.assertRaises(RuntimeError, mod.webapp, ctx)
sys.stderr.write.assert_called_once_with("unknown web app runner: bogus\n")
sys.exit.assert_called_once_with(2)
def test_pserve(self):
path = self.write_file(
"my.conf",
"""
[wutta.web]
app.runner = pserve
""",
)
self.config = self.make_config(files=[path])
# normal
with patch.object(mod, "pserve") as pserve:
ctx = self.make_context()
mod.webapp(ctx)
pserve.main.assert_called_once_with(argv=["pserve", f"file+ini:{path}"])
# with reload
with patch.object(mod, "pserve") as pserve:
ctx = self.make_context(params={"auto_reload": True})
mod.webapp(ctx)
pserve.main.assert_called_once_with(
argv=["pserve", f"file+ini:{path}", "--reload"]
)
def test_uvicorn(self):
path = self.write_file(
"my.conf",
"""
[wutta.web]
app.runner = uvicorn
app.spec = wuttaweb.app:make_wsgi_app
""",
)
self.config = self.make_config(files=[path])
orig_import = __import__
uvicorn = MagicMock()
def mock_import(name, *args, **kwargs):
if name == "uvicorn":
return uvicorn
return orig_import(name, *args, **kwargs)
# normal
with patch("builtins.__import__", side_effect=mock_import):
ctx = self.make_context()
mod.webapp(ctx)
uvicorn.run.assert_called_once_with(
"wuttaweb.app:make_wsgi_app",
host="127.0.0.1",
port=8000,
reload=False,
reload_dirs=None,
factory=False,
interface="auto",
root_path="",
)
# with reload
uvicorn.run.reset_mock()
with patch("builtins.__import__", side_effect=mock_import):
ctx = self.make_context(params={"auto_reload": True})
mod.webapp(ctx)
uvicorn.run.assert_called_once_with(
"wuttaweb.app:make_wsgi_app",
host="127.0.0.1",
port=8000,
reload=True,
reload_dirs=None,
factory=False,
interface="auto",
root_path="",
)