46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
import time
|
|
import requests
|
|
from unittest.mock import patch, MagicMock
|
|
import pytest
|
|
from app.platforms.ebay.auth import EbayTokenManager
|
|
|
|
|
|
def test_fetches_token_on_first_call():
|
|
manager = EbayTokenManager(client_id="id", client_secret="secret", env="sandbox")
|
|
mock_resp = MagicMock()
|
|
mock_resp.json.return_value = {"access_token": "tok123", "expires_in": 7200}
|
|
mock_resp.raise_for_status = MagicMock()
|
|
with patch("app.platforms.ebay.auth.requests.post", return_value=mock_resp) as mock_post:
|
|
token = manager.get_token()
|
|
assert token == "tok123"
|
|
assert mock_post.called
|
|
|
|
|
|
def test_returns_cached_token_before_expiry():
|
|
manager = EbayTokenManager(client_id="id", client_secret="secret", env="sandbox")
|
|
manager._token = "cached"
|
|
manager._expires_at = time.time() + 3600
|
|
with patch("app.platforms.ebay.auth.requests.post") as mock_post:
|
|
token = manager.get_token()
|
|
assert token == "cached"
|
|
assert not mock_post.called
|
|
|
|
|
|
def test_refreshes_token_after_expiry():
|
|
manager = EbayTokenManager(client_id="id", client_secret="secret", env="sandbox")
|
|
manager._token = "old"
|
|
manager._expires_at = time.time() - 1 # expired
|
|
mock_resp = MagicMock()
|
|
mock_resp.json.return_value = {"access_token": "new_tok", "expires_in": 7200}
|
|
mock_resp.raise_for_status = MagicMock()
|
|
with patch("app.platforms.ebay.auth.requests.post", return_value=mock_resp):
|
|
token = manager.get_token()
|
|
assert token == "new_tok"
|
|
|
|
|
|
def test_token_fetch_failure_raises():
|
|
"""Spec requires: on token fetch failure, raise immediately — no silent fallback."""
|
|
manager = EbayTokenManager(client_id="id", client_secret="secret", env="sandbox")
|
|
with patch("app.platforms.ebay.auth.requests.post", side_effect=requests.RequestException("network error")):
|
|
with pytest.raises(requests.RequestException):
|
|
manager.get_token()
|