This commit is contained in:
Joakim Hellsén 2026-04-27 20:43:26 +02:00
commit a7a5b5c8ea
Signed by: Joakim Hellsén
SSH key fingerprint: SHA256:/9h/CsExpFp+PRhsfA0xznFx2CGfTT5R/kpuFfUgEQk
43 changed files with 5531 additions and 9 deletions

View file

@ -0,0 +1,61 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from django.utils import autoreload
from watchfiles import Change
from config.dev_autoreload import TussilagoWatchfilesReloader
from config.dev_autoreload import build_project_watch_roots
if TYPE_CHECKING:
from pathlib import Path
import pytest
def test_build_project_watch_roots_excludes_firecracker(tmp_path: Path) -> None:
"""Project watch roots should skip firecracker and hidden directories."""
(tmp_path / "config").mkdir()
(tmp_path / "control_plane").mkdir()
(tmp_path / "firecracker").mkdir()
(tmp_path / ".venv").mkdir()
(tmp_path / "static").mkdir()
assert build_project_watch_roots(tmp_path) == (
tmp_path / "config",
tmp_path / "control_plane",
tmp_path / "static",
)
def test_reloader_replaces_repo_root_with_child_dirs(
tmp_path: Path,
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""Repo root watch should be split so firecracker is excluded."""
(tmp_path / "config").mkdir()
(tmp_path / "control_plane").mkdir()
(tmp_path / "firecracker").mkdir()
(tmp_path / "static").mkdir()
watched_settings = tmp_path / "config" / "settings.py"
watched_settings.touch()
firecracker_config = tmp_path / "firecracker" / "vm_config.json"
firecracker_config.touch()
monkeypatch.setattr(
autoreload,
"sys_path_directories",
lambda: iter((tmp_path, tmp_path / "config")),
)
reloader = TussilagoWatchfilesReloader(project_root=tmp_path)
roots = reloader.watched_roots((tmp_path / "manage.py", watched_settings))
assert tmp_path not in roots
assert tmp_path / "config" in roots
assert tmp_path / "control_plane" in roots
assert tmp_path / "static" in roots
assert tmp_path / "firecracker" not in roots
assert reloader.file_filter(Change.added, str(firecracker_config)) is False