mirror of
https://github.com/oskvr37/tiddl.git
synced 2026-06-13 04:05:08 +03:00
129 lines
3.7 KiB
Python
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"},
|
|
)
|