Files
beets/test/plugins/utils/test_requests.py
Sebastian Mohr adfb73b66d Run ruff format
2026-05-20 16:53:06 +02:00

44 lines
1.2 KiB
Python

from unittest.mock import MagicMock
import pytest
import requests
from beetsplug._utils.requests import RateLimitAdapter
def _prepared_request(
url: str = "https://example.com",
) -> requests.PreparedRequest:
req = requests.Request("GET", url)
return req.prepare()
class TestRateLimitAdapter:
@pytest.mark.parametrize(
"last_request_time, now, expected_sleep",
[(100.0, 100.0, 0.25), (100.0, 100.1, 0.15)],
)
def test_send_sleeps_for_remaining_time(
self, monkeypatch, last_request_time, now, expected_sleep
):
adapter = RateLimitAdapter(rate_limit=0.25)
request = _prepared_request()
send_mock = MagicMock(return_value="ok")
monkeypatch.setattr(
"beetsplug._utils.requests.HTTPAdapter.send", send_mock
)
monkeypatch.setattr(
"beetsplug._utils.requests.time.monotonic", lambda: now
)
sleep_mock = MagicMock()
monkeypatch.setattr("beetsplug._utils.requests.time.sleep", sleep_mock)
adapter._last_request_time = last_request_time
adapter.send(request)
assert sleep_mock.call_count == 1
assert sleep_mock.call_args.args[0] == pytest.approx(expected_sleep)