Files
manage/backend/tests/test_jellyseerr_client.py
2026-05-04 13:50:53 +02:00

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()