This commit is contained in:
Bastian Wagner
2026-05-05 19:26:43 +02:00
commit 8d07939527
29 changed files with 2646 additions and 0 deletions

59
tests/test_garmin.py Normal file
View File

@@ -0,0 +1,59 @@
from dataclasses import replace
import pytest
from mywhoosh_garmin_sync.garmin import GarminUploadBlocked, GarminUploader
class FakeGarminClient:
def __init__(self, *args, **kwargs):
self.prompt_mfa = kwargs.get("prompt_mfa")
self.logged_in = False
def login(self, tokenstore=None):
self.logged_in = True
def upload_activity(self, activity_path):
return {"activityId": 12345, "path": activity_path}
class DuplicateGarminClient(FakeGarminClient):
def upload_activity(self, activity_path):
raise RuntimeError("409 duplicate activity already exists")
def test_garmin_uploader_success(settings, tmp_path):
fit = tmp_path / "activity.fit"
fit.write_bytes(b"fit")
uploader = GarminUploader(settings, client_factory=FakeGarminClient)
result = uploader.upload(fit)
assert result.status == "uploaded"
assert result.garmin_activity_id == "12345"
def test_garmin_uploader_duplicate(settings, tmp_path):
fit = tmp_path / "activity.fit"
fit.write_bytes(b"fit")
uploader = GarminUploader(settings, client_factory=DuplicateGarminClient)
result = uploader.upload(fit)
assert result.duplicate is True
assert result.status == "duplicate"
def test_mfa_prompt_blocks_without_code(settings):
uploader = GarminUploader(settings, client_factory=FakeGarminClient)
with pytest.raises(GarminUploadBlocked):
uploader._prompt_mfa()
def test_mfa_prompt_returns_env_code(settings):
settings = replace(settings, garmin_mfa_code="123456")
uploader = GarminUploader(settings, client_factory=FakeGarminClient)
assert uploader._prompt_mfa() == "123456"