import json
import os
from unittest.mock import MagicMock, patch
import pytest
from lib.api.debrid.realdebrid import RealDebrid
# Load fixture data
FIXTURE_PATH = os.path.join(os.path.dirname(__file__), "../fixtures/realdebrid_response.json")
with open(FIXTURE_PATH) as f:
JSON_DATA = json.load(f)
@pytest.fixture
def rd_client():
mock_session = MagicMock()
with patch.object(RealDebrid, "decode_token_str", return_value={"private_token": "secret"}):
client = RealDebrid(token="test_token", session=mock_session)
client.headers = {"Authorization": f"Bearer {client.token}"}
return client
def test_realdebrid_api(rd_client):
# Test get_user
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.json.return_value = JSON_DATA["user"]
# The base class uses session.request(method=...)
rd_client.session.request.return_value = mock_response
user = rd_client.get_user()
assert user["username"] == "testuser"
assert user["type"] == "premium"
# Test add_magnet_link
mock_response.json.return_value = JSON_DATA["addMagnet"]
magnet = "magnet:?xt=urn:btih:123"
response = rd_client.add_magnet_link(magnet)
assert response["id"] == "NEWTORRENT456"
# Test get_user_torrent_list
mock_response.json.return_value = JSON_DATA["torrents"]
torrents = rd_client.get_user_torrent_list()
assert len(torrents) == 1
assert torrents[0]["status"] == "downloaded"