Files
lumeex/tests/conftest.py
Djeex f22634e9d9
CI / build-and-scan (push) Successful in 2m43s
CI/CD hardening: lint, secret scan, coverage gate, auto CVE-fix PRs, GHCR + GitHub mirror publishing (#34)
- release changelog: commits rendered as description (link), divider lines dropped
- gitleaks secret scan and hadolint on every push/PR
- ruff lint/format gate (Python repos) with a pytest --cov-fail-under gate
- scheduled CRITICAL Trivy failures attempt an apk upgrade rebuild and open a follow-up PR if it clears the finding, instead of just failing red
- images also published to ghcr.io/djeex/<repo>
- a matching GitHub Release is created on the GitHub mirror, with a notice pointing back to this repo as the source of truth
2026-08-26 15:38:54 +02:00

84 lines
2.6 KiB
Python

from pathlib import Path
import pytest
from PIL import Image
REPO_ROOT = Path(__file__).resolve().parent.parent
DEMO_ROOT = REPO_ROOT / "demo" / "config"
@pytest.fixture
def repo_root():
return REPO_ROOT
@pytest.fixture
def demo_root():
return DEMO_ROOT
@pytest.fixture
def make_image():
"""Factory that writes a small real image to disk and returns its path."""
def _make(path: Path, size=(64, 48), color=(200, 100, 50), fmt="JPEG", **save_kwargs):
path.parent.mkdir(parents=True, exist_ok=True)
Image.new("RGB", size, color).save(path, fmt, **save_kwargs)
return path
return _make
@pytest.fixture
def app_env(tmp_path, monkeypatch, make_image):
"""
Isolate the Flask webui from the real repo filesystem.
webui.py resolves most config paths from `Path(__file__).resolve().parents[3]`
(recomputed inline in most routes) or from module-level globals computed once
at import time (PHOTOS_DIR, SITE_YAML). We patch `__file__` so inline lookups
land in a throwaway tmp_path repo skeleton, patch the two import-time globals
directly, and chdir so the plain-relative paths used by gallery_builder
(GALLERY_YAML, GALLERY_DIR, HERO_DIR) resolve there too.
"""
import src.py.webui.webui as webui
root = tmp_path
(root / "config" / "photos" / "gallery").mkdir(parents=True)
(root / "config" / "photos" / "hero").mkdir(parents=True)
theme_dir = root / "config" / "themes" / "modern"
theme_dir.mkdir(parents=True)
(theme_dir / "theme.yaml").write_text(
"colors:\n browser_color: '#ffffff'\nfavicon:\n path: favicon.png\ngoogle_fonts: []\n",
encoding="utf-8",
)
make_image(theme_dir / "favicon.png", size=(32, 32), fmt="PNG")
(root / "config" / "gallery.yaml").write_text(
"hero:\n images: []\ngallery:\n images: []\n", encoding="utf-8"
)
(root / "config" / "site.yaml").write_text(
"info:\n title: Test\n canonical: https://example.com\nsocial:\n thumbnail: ''\n",
encoding="utf-8",
)
fake_module_file = root / "src" / "py" / "webui" / "webui.py"
fake_module_file.parent.mkdir(parents=True, exist_ok=True)
monkeypatch.chdir(root)
monkeypatch.setattr(webui, "__file__", str(fake_module_file))
monkeypatch.setattr(webui, "PHOTOS_DIR", root / "config" / "photos")
monkeypatch.setattr(webui, "SITE_YAML", root / "config" / "site.yaml")
webui.app.config["PHOTOS_DIR"] = root / "config" / "photos"
webui.app.config["TESTING"] = True
return root
@pytest.fixture
def client(app_env):
import src.py.webui.webui as webui
return webui.app.test_client()