M8-R06: refresh Tibber prices after startup and configuration
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user