Init
This commit is contained in:
59
tests/test_garmin.py
Normal file
59
tests/test_garmin.py
Normal 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"
|
||||
|
||||
Reference in New Issue
Block a user