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"