saving
This commit is contained in:
65
tests/unit/test_run_sync.py
Normal file
65
tests/unit/test_run_sync.py
Normal file
@@ -0,0 +1,65 @@
|
||||
"""Tests for the `run_sync` orchestrator in `openrun.ingest.garmin_api`.
|
||||
|
||||
`run_sync` is the auth-free body shared by the CLI and the web "Sync now"
|
||||
button. We stub every network-touching sub-sync so the test verifies only the
|
||||
orchestration contract: which steps run, what the summary holds, that progress
|
||||
is streamed, and that `last_sync_utc` is recorded.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import openrun.ingest.garmin_api as g
|
||||
from openrun.db import get_state
|
||||
|
||||
|
||||
def _stub_subsyncs(monkeypatch, tmp_path):
|
||||
monkeypatch.setattr(g, "sync_activities", lambda conn, **kw: 3)
|
||||
monkeypatch.setattr(g, "backfill_fits", lambda conn, **kw: 2)
|
||||
monkeypatch.setattr(g, "_fit_dir", lambda: tmp_path)
|
||||
for name in (
|
||||
"sync_steps", "sync_sleep", "sync_stress", "sync_hrv",
|
||||
"sync_intensity_minutes", "sync_resting_hr", "sync_body_battery",
|
||||
):
|
||||
monkeypatch.setattr(g, name, lambda conn, end, period: 1)
|
||||
|
||||
|
||||
def test_run_sync_default_pass(tmp_conn, tmp_path, monkeypatch) -> None:
|
||||
_stub_subsyncs(monkeypatch, tmp_path)
|
||||
msgs: list[str] = []
|
||||
|
||||
summary = g.run_sync(tmp_conn, progress=msgs.append)
|
||||
|
||||
assert summary["activities"] == 3
|
||||
assert "fit_backfill" not in summary # off by default
|
||||
assert summary["steps"] == 1 and summary["body battery"] == 1
|
||||
assert any("activities" in m for m in msgs)
|
||||
assert get_state(tmp_conn, "last_sync_utc") is not None
|
||||
|
||||
|
||||
def test_run_sync_includes_backfill_when_requested(tmp_conn, tmp_path, monkeypatch) -> None:
|
||||
_stub_subsyncs(monkeypatch, tmp_path)
|
||||
summary = g.run_sync(tmp_conn, fit_backfill=True, progress=lambda _m: None)
|
||||
assert summary["fit_backfill"] == 2
|
||||
|
||||
|
||||
def test_run_sync_skip_activities(tmp_conn, tmp_path, monkeypatch) -> None:
|
||||
_stub_subsyncs(monkeypatch, tmp_path)
|
||||
# If activities ran, the stub would put a key in the summary — assert it didn't.
|
||||
summary = g.run_sync(tmp_conn, skip_activities=True, progress=lambda _m: None)
|
||||
assert "activities" not in summary
|
||||
assert summary["HRV"] == 1 # wellness still runs
|
||||
|
||||
|
||||
def test_run_sync_forwards_fit_flag(tmp_conn, tmp_path, monkeypatch) -> None:
|
||||
seen: dict = {}
|
||||
monkeypatch.setattr(g, "sync_activities", lambda conn, **kw: seen.update(kw) or 0)
|
||||
monkeypatch.setattr(g, "_fit_dir", lambda: tmp_path)
|
||||
for name in (
|
||||
"sync_steps", "sync_sleep", "sync_stress", "sync_hrv",
|
||||
"sync_intensity_minutes", "sync_resting_hr", "sync_body_battery",
|
||||
):
|
||||
monkeypatch.setattr(g, name, lambda conn, end, period: 0)
|
||||
|
||||
g.run_sync(tmp_conn, fetch_fit=False, full=True, progress=lambda _m: None)
|
||||
assert seen["fetch_fit"] is False
|
||||
assert seen["full"] is True
|
||||
Reference in New Issue
Block a user