M8-R06: refresh Tibber prices after startup and configuration

This commit is contained in:
2026-08-24 06:45:31 +02:00
parent 0924e8df52
commit 09abe05f66
8 changed files with 275 additions and 14 deletions
+37
View File
@@ -152,3 +152,40 @@ def test_app_start_syncs_app_hostname_from_env_even_when_db_has_old_value(
get_settings.cache_clear()
reset_db_caches()
def test_lifespan_schedules_immediate_and_hourly_tibber_refresh(tmp_path, monkeypatch: pytest.MonkeyPatch) -> None:
"""The single Tibber interval job starts immediately while retaining its hourly trigger."""
import app.main as main
app_database_url = _prepare_app_db(tmp_path)
added_jobs = []
class _Scheduler:
def __init__(self, **_kwargs): pass
def add_job(self, func, **kwargs): added_jobs.append((func, kwargs))
def start(self): pass
def shutdown(self, **_kwargs): pass
monkeypatch.setenv("APP_DATABASE_URL", app_database_url)
monkeypatch.setenv("AUTH_BOOTSTRAP_USERNAME", "admin")
monkeypatch.setenv("AUTH_BOOTSTRAP_PASSWORD", "test-password")
monkeypatch.setattr(main, "BackgroundScheduler", _Scheduler)
monkeypatch.setattr(main.mqtt_manager, "connect", lambda _settings: None)
monkeypatch.setattr(main.mqtt_manager, "disconnect", lambda: None)
monkeypatch.setattr(main, "apply_dsmr_subscription", lambda _settings: None)
monkeypatch.setattr(main.warmtelink_worker_manager, "start", lambda: None)
monkeypatch.setattr(main.warmtelink_worker_manager, "shutdown", lambda: None)
get_settings.cache_clear()
reset_db_caches()
anyio.run(_run_lifespan, create_app())
tibber_jobs = [kwargs for func, kwargs in added_jobs if func is main._run_scheduled_tibber_refresh]
assert len(tibber_jobs) == 1
assert tibber_jobs[0]["id"] == "tibber-refresh"
assert tibber_jobs[0]["max_instances"] == 1
assert tibber_jobs[0]["next_run_time"] is not None
get_settings.cache_clear()
reset_db_caches()