Files
tiddl/tests/core/auth/test_auth_client.py
T
Oskar Dudziński b87888536e tiddl3 (#194)
2025-11-08 15:18:44 +01:00

129 lines
3.7 KiB
Python

import pytest
from pytest_mock import MockerFixture
from tiddl.core.auth.client import AuthClient
from tiddl.core.auth.exceptions import AuthClientError
def test_get_device_auth_calls_request(mocker: MockerFixture):
mock_request = mocker.patch("tiddl.core.auth.client.request")
data = {"device_code": "abc"}
mock_response = mocker.Mock()
mock_response.json.return_value = data
mock_request.return_value = mock_response
client = AuthClient()
result = client.get_device_auth()
mock_request.assert_called_once_with(
"POST",
"https://auth.tidal.com/v1/oauth2/device_authorization",
data={"client_id": client.client_id, "scope": "r_usr+w_usr+w_sub"},
)
assert result == data
def test_get_auth_returns_json_on_200(mocker: MockerFixture):
mock_request = mocker.patch("tiddl.core.auth.client.request")
mock_response = mocker.Mock()
mock_response.status_code = 200
mock_response.json.return_value = {
"access_token": "token123",
"refresh_token": "refresh123",
"expires_in": 3600,
}
mock_request.return_value = mock_response
client = AuthClient()
result = client.get_auth("device123")
assert result["access_token"] == "token123"
assert result["refresh_token"] == "refresh123"
assert result["expires_in"] == 3600
mock_request.assert_called_once_with(
"POST",
"https://auth.tidal.com/v1/oauth2/token",
data={
"client_id": client.client_id,
"device_code": "device123",
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
"scope": "r_usr+w_usr+w_sub",
},
auth=(client.client_id, client.client_secret),
)
def test_get_auth_raises_on_non_200(mocker: MockerFixture):
mock_request = mocker.patch("tiddl.core.auth.client.request")
mock_response = mocker.Mock()
mock_response.status_code = 400
mock_response.json.return_value = {
"error": "error",
"status": 400,
"sub_status": 1001,
"error_description": "invalid",
}
mock_request.return_value = mock_response
client = AuthClient()
with pytest.raises(AuthClientError):
client.get_auth("device123")
mock_request.assert_called_once_with(
"POST",
"https://auth.tidal.com/v1/oauth2/token",
data={
"client_id": client.client_id,
"device_code": "device123",
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
"scope": "r_usr+w_usr+w_sub",
},
auth=(client.client_id, client.client_secret),
)
def test_refresh_token(mocker: MockerFixture):
mock_request = mocker.patch("tiddl.core.auth.client.request")
mock_response = mocker.Mock()
mock_response.status_code = 400
mock_response.json.return_value = {
"token": "abc",
}
mock_request.return_value = mock_response
refresh_token = "token"
client = AuthClient()
result = client.refresh_token(refresh_token)
mock_request.assert_called_once_with(
"POST",
"https://auth.tidal.com/v1/oauth2/token",
data={
"client_id": client.client_id,
"refresh_token": refresh_token,
"grant_type": "refresh_token",
"scope": "r_usr+w_usr+w_sub",
},
auth=(client.client_id, client.client_secret),
)
assert result["token"] == "abc"
def test_logout_token(mocker: MockerFixture):
mock_request = mocker.patch("tiddl.core.auth.client.request")
client = AuthClient()
client.logout_token("token")
mock_request.assert_called_once_with(
"POST",
"https://api.tidal.com/v1/logout",
headers={"authorization": "Bearer token"},
)