feat: support focused dev reload scopes
This commit is contained in:
@@ -6,11 +6,92 @@ import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from govoplan_core.devserver import redacted_database_url
|
||||
from govoplan_core.devserver import build_reload_dirs, redacted_database_url
|
||||
|
||||
|
||||
class DevserverSmokeTests(unittest.TestCase):
|
||||
def test_reload_dirs_can_be_limited_to_selected_modules(self) -> None:
|
||||
with tempfile.TemporaryDirectory(prefix="govoplan-reload-") as directory:
|
||||
root = Path(directory)
|
||||
core_root = root / "core"
|
||||
calendar_root = root / "calendar"
|
||||
mail_root = root / "mail"
|
||||
extra_root = root / "extra"
|
||||
for path in (core_root, calendar_root, mail_root, extra_root):
|
||||
path.mkdir()
|
||||
|
||||
manifests = (
|
||||
SimpleNamespace(id="calendar"),
|
||||
SimpleNamespace(id="mail"),
|
||||
)
|
||||
config = SimpleNamespace(enabled_modules=(), manifest_factories=())
|
||||
registry = SimpleNamespace(manifests=lambda: manifests)
|
||||
|
||||
def manifest_roots(manifest: object) -> tuple[Path, ...]:
|
||||
return (
|
||||
calendar_root
|
||||
if getattr(manifest, "id") == "calendar"
|
||||
else mail_root,
|
||||
)
|
||||
|
||||
with (
|
||||
patch(
|
||||
"govoplan_core.devserver._config_source_roots",
|
||||
return_value=(core_root,),
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.devserver._entry_point_source_roots",
|
||||
return_value=(),
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.devserver._manifest_source_roots",
|
||||
side_effect=manifest_roots,
|
||||
),
|
||||
):
|
||||
broad = build_reload_dirs(config, registry=registry)
|
||||
focused = build_reload_dirs(
|
||||
config,
|
||||
registry=registry,
|
||||
module_ids=("calendar",),
|
||||
extra_dirs=(str(extra_root),),
|
||||
)
|
||||
core_only = build_reload_dirs(
|
||||
config,
|
||||
registry=registry,
|
||||
module_ids=(),
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
{str(core_root), str(calendar_root), str(mail_root)},
|
||||
set(broad),
|
||||
)
|
||||
self.assertEqual(
|
||||
{str(core_root), str(calendar_root), str(extra_root)},
|
||||
set(focused),
|
||||
)
|
||||
self.assertEqual([str(core_root)], core_only)
|
||||
|
||||
def test_reload_dirs_reject_disabled_module_selector(self) -> None:
|
||||
config = SimpleNamespace(enabled_modules=(), manifest_factories=())
|
||||
registry = SimpleNamespace(
|
||||
manifests=lambda: (SimpleNamespace(id="calendar"),)
|
||||
)
|
||||
with (
|
||||
patch(
|
||||
"govoplan_core.devserver._config_source_roots",
|
||||
return_value=(),
|
||||
),
|
||||
self.assertRaisesRegex(SystemExit, "mail"),
|
||||
):
|
||||
build_reload_dirs(
|
||||
config,
|
||||
registry=registry,
|
||||
module_ids=("mail",),
|
||||
)
|
||||
|
||||
def test_database_url_redaction_hides_passwords(self) -> None:
|
||||
rendered = redacted_database_url(
|
||||
"postgresql+psycopg://govoplan:database-secret@db.example.test/govoplan"
|
||||
|
||||
Reference in New Issue
Block a user