Skip to content

Commit 2be64e0

Browse files
committed
fix tests and simplify docstrings
1 parent c0a452d commit 2be64e0

2 files changed

Lines changed: 23 additions & 31 deletions

File tree

fishjam/api/_fishjam_client.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Fishjam client used to manage rooms."""
22

33
from dataclasses import dataclass, field
4+
from http import HTTPStatus
45
from typing import Any, Literal, cast
56

67
from fishjam._openapi_client.api.credentials import (
@@ -55,7 +56,6 @@
5556
from fishjam.api._client import Client
5657
from fishjam.errors import (
5758
InvalidFishjamCredentialsError,
58-
NotFoundError,
5959
)
6060

6161

@@ -174,7 +174,7 @@ def __init__(
174174
def create_and_verify(
175175
cls, *, fishjam_id: str, management_token: str
176176
) -> "FishjamClient":
177-
"""Construct a FishjamClient and verify credentials against the backend.
177+
"""Construct a FishjamClient and verify its credentials against the backend.
178178
179179
Args:
180180
fishjam_id: The unique identifier for the Fishjam instance.
@@ -184,29 +184,23 @@ def create_and_verify(
184184
FishjamClient: A client whose credentials have been verified.
185185
186186
Raises:
187-
InvalidFishjamCredentialsError: If the ``fishjam_id`` /
188-
``management_token`` pair is rejected by the backend.
187+
InvalidFishjamCredentialsError: If the token is rejected.
189188
"""
190189
client = cls(fishjam_id=fishjam_id, management_token=management_token)
191190
client.check_credentials()
192191
return client
193192

194193
def check_credentials(self) -> None:
195-
"""Verify configured credentials by pinging the backend.
196-
197-
Performs a single lightweight ``get_all_rooms`` call. A 401 or 404
198-
from the backend is translated into
199-
:class:`InvalidFishjamCredentialsError`; other HTTP errors propagate
200-
as their normal mapped types.
194+
"""Verify the management token via a single ``/validate`` call.
201195
202196
Raises:
203-
InvalidFishjamCredentialsError: If the ``fishjam_id`` /
204-
``management_token`` pair is rejected by the backend.
197+
InvalidFishjamCredentialsError: If the token is rejected.
205198
"""
206-
try:
207-
self._request(credentials_validate_credentials)
208-
except NotFoundError as exc:
209-
raise InvalidFishjamCredentialsError(*exc.args) from exc
199+
response = credentials_validate_credentials.sync_detailed(client=self.client)
200+
self._handle_deprecation_header(response.headers)
201+
202+
if response.status_code == HTTPStatus.NOT_FOUND:
203+
raise InvalidFishjamCredentialsError("Invalid Fishjam credentials")
210204

211205
def create_peer(
212206
self,

tests/test_config_validation.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
# pylint: disable=missing-class-docstring, missing-function-docstring, missing-module-docstring
22

3-
from unittest.mock import patch
3+
from http import HTTPStatus
4+
from unittest.mock import Mock, patch
45

56
import pytest
67

78
from fishjam import FishjamClient
89
from fishjam.errors import (
910
InvalidFishjamCredentialsError,
1011
MissingFishjamIdError,
11-
NotFoundError,
1212
)
1313

1414
VALID_FISHJAM_ID = "fjm_test"
1515
VALID_MANAGEMENT_TOKEN = "tok_test"
1616

17+
VALIDATE = "fishjam.api._fishjam_client.credentials_validate_credentials.sync_detailed"
18+
19+
20+
def _response(status: HTTPStatus):
21+
return Mock(status_code=status, headers={})
22+
1723

1824
class TestSyncValidation:
1925
def test_empty_fishjam_id_raises(self):
@@ -28,42 +34,34 @@ def test_both_provided_does_not_raise(self):
2834

2935
class TestLiveCheck:
3036
def test_create_and_verify_raises_invalid_credentials_on_404(self):
31-
with patch.object(
32-
FishjamClient,
33-
"_request",
34-
side_effect=NotFoundError("Fishjam not found"),
35-
):
37+
with patch(VALIDATE, return_value=_response(HTTPStatus.NOT_FOUND)):
3638
with pytest.raises(InvalidFishjamCredentialsError):
3739
FishjamClient.create_and_verify(
3840
fishjam_id=VALID_FISHJAM_ID,
3941
management_token=VALID_MANAGEMENT_TOKEN,
4042
)
4143

4244
def test_create_and_verify_returns_client_and_pings_once(self):
43-
with patch.object(FishjamClient, "_request", return_value=None) as mock_request:
45+
with patch(VALIDATE, return_value=_response(HTTPStatus.OK)) as mock_validate:
4446
client = FishjamClient.create_and_verify(
4547
fishjam_id=VALID_FISHJAM_ID,
4648
management_token=VALID_MANAGEMENT_TOKEN,
4749
)
4850

4951
assert isinstance(client, FishjamClient)
50-
assert mock_request.call_count == 1
52+
assert mock_validate.call_count == 1
5153

5254
def test_check_credentials_raises_invalid_credentials_on_404(self):
5355
client = FishjamClient(
5456
fishjam_id=VALID_FISHJAM_ID, management_token=VALID_MANAGEMENT_TOKEN
5557
)
56-
with patch.object(
57-
FishjamClient,
58-
"_request",
59-
side_effect=NotFoundError("Fishjam not found"),
60-
):
58+
with patch(VALIDATE, return_value=_response(HTTPStatus.NOT_FOUND)):
6159
with pytest.raises(InvalidFishjamCredentialsError):
6260
client.check_credentials()
6361

6462
def test_check_credentials_returns_none_on_success(self):
6563
client = FishjamClient(
6664
fishjam_id=VALID_FISHJAM_ID, management_token=VALID_MANAGEMENT_TOKEN
6765
)
68-
with patch.object(FishjamClient, "_request", return_value=None):
66+
with patch(VALIDATE, return_value=_response(HTTPStatus.OK)):
6967
assert client.check_credentials() is None

0 commit comments

Comments
 (0)