82 lines
3.2 KiB
Python
82 lines
3.2 KiB
Python
"""Unit tests for the Jellyseerr client."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from unittest.mock import MagicMock
|
|
|
|
from media_library_viewer_api.clients.jellyseerr import JellyseerrClient
|
|
|
|
|
|
class JellyseerrClientTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.client = JellyseerrClient("https://requests.example.com/api/v1", "api-key")
|
|
self.session = MagicMock()
|
|
self.client.session = self.session
|
|
|
|
def test_jellyfin_users_accepts_wrapped_payload(self) -> None:
|
|
response = MagicMock()
|
|
response.raise_for_status.return_value = None
|
|
response.json.return_value = {
|
|
"users": [
|
|
{"id": "jf1", "username": "alex", "email": "alex@example.com", "thumb": "/avatar"},
|
|
{"id": "jf2", "username": "sam", "email": "sam@example.com", "thumb": "/avatar2"},
|
|
]
|
|
}
|
|
self.session.get.return_value = response
|
|
|
|
users = self.client.jellyfin_users()
|
|
|
|
self.assertEqual(len(users), 2)
|
|
self.assertEqual(users[0]["email"], "alex@example.com")
|
|
self.assertEqual(users[1]["username"], "sam")
|
|
self.session.get.assert_called_once()
|
|
|
|
def test_jellyfin_users_accepts_list_payload(self) -> None:
|
|
response = MagicMock()
|
|
response.raise_for_status.return_value = None
|
|
response.json.return_value = [
|
|
{"id": "jf1", "username": "alex"},
|
|
{"id": "jf2", "username": "sam"},
|
|
]
|
|
self.session.get.return_value = response
|
|
|
|
users = self.client.jellyfin_users()
|
|
|
|
self.assertEqual([u["username"] for u in users], ["alex", "sam"])
|
|
|
|
def test_users_uses_take_and_skip(self) -> None:
|
|
first = MagicMock()
|
|
first.raise_for_status.return_value = None
|
|
first.json.return_value = {
|
|
"pageInfo": {"results": 3, "pages": 2, "pageSize": 2, "page": 1},
|
|
"results": [
|
|
{"id": 1, "username": "alex", "email": "alex@example.com"},
|
|
{"id": 2, "username": "sam", "email": "sam@example.com"},
|
|
],
|
|
}
|
|
second = MagicMock()
|
|
second.raise_for_status.return_value = None
|
|
second.json.return_value = {
|
|
"pageInfo": {"results": 3, "pages": 2, "pageSize": 2, "page": 2},
|
|
"results": [
|
|
{"id": 3, "username": "max", "email": "max@example.com"},
|
|
],
|
|
}
|
|
self.session.get.side_effect = [first, second]
|
|
|
|
users = self.client.users(page_size=2)
|
|
|
|
self.assertEqual([u["username"] for u in users], ["alex", "sam", "max"])
|
|
self.assertEqual(self.session.get.call_args_list[0].kwargs["params"], {"take": 2, "skip": 0})
|
|
self.assertEqual(self.session.get.call_args_list[1].kwargs["params"], {"take": 2, "skip": 2})
|
|
|
|
def test_absolute_url_normalizes_relative_paths(self) -> None:
|
|
self.assertEqual(self.client.absolute_url("/avatar.png"), "https://requests.example.com/avatar.png")
|
|
self.assertEqual(self.client.absolute_url("avatar.png"), "https://requests.example.com/avatar.png")
|
|
self.assertEqual(self.client.absolute_url("https://cdn.example.com/x.png"), "https://cdn.example.com/x.png")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|