Resolve Arr metadata before adding media
Magent CI/CD / verify (push) Successful in 11m12s
Magent CI/CD / deploy-prod (push) Skipped
Magent CI/CD / deploy-beta (push) Successful in 14s

This commit is contained in:
2026-08-30 16:32:14 +12:00
parent 3815dfea60
commit 9db32481bd
4 changed files with 126 additions and 10 deletions
+61
View File
@@ -344,6 +344,67 @@ class LiveDownloadProgressTests(unittest.IsolatedAsyncioTestCase):
self.assertEqual(result["torrents"][0]["progressPercent"], 13.4)
class ArrAddPayloadTests(unittest.IsolatedAsyncioTestCase):
async def test_radarr_add_resolves_title_before_posting_movie(self) -> None:
client = requests_router.RadarrClient("http://radarr.test", "radarr-key")
with patch.object(
client,
"get",
new=AsyncMock(return_value={"title": "A Grand Day Out", "tmdbId": 530}),
) as lookup, patch.object(
client,
"post",
new=AsyncMock(return_value={"id": 12, "title": "A Grand Day Out"}),
) as create:
result = await client.add_movie(530, 1, "/movies")
lookup.assert_awaited_once_with("/api/v3/movie/lookup/tmdb", params={"tmdbId": 530})
payload = create.await_args.kwargs["payload"]
self.assertEqual(payload["title"], "A Grand Day Out")
self.assertEqual(payload["tmdbId"], 530)
self.assertEqual(result["id"], 12)
async def test_sonarr_add_resolves_matching_series_title_before_posting(self) -> None:
client = requests_router.SonarrClient("http://sonarr.test", "sonarr-key")
lookup_response = [
{"title": "Wrong Show", "tvdbId": 111},
{"title": "Example Show", "tvdbId": 222},
]
with patch.object(
client,
"get",
new=AsyncMock(return_value=lookup_response),
) as lookup, patch.object(
client,
"post",
new=AsyncMock(return_value={"id": 42, "title": "Example Show"}),
) as create:
result = await client.add_series(222, 2, "/television")
lookup.assert_awaited_once_with("/api/v3/series/lookup", params={"term": "tvdb:222"})
payload = create.await_args.kwargs["payload"]
self.assertEqual(payload["title"], "Example Show")
self.assertEqual(payload["tvdbId"], 222)
self.assertEqual(result["id"], 42)
def test_arr_error_message_does_not_expose_upstream_stack_trace(self) -> None:
response = httpx.Response(
500,
request=httpx.Request("POST", "http://radarr.test/api/v3/movie"),
json={
"message": "Object reference not set to an instance of an object.",
"description": "System.NullReferenceException\n at Radarr.Internal.SecretMethod()",
},
)
error = httpx.HTTPStatusError("Radarr failed", request=response.request, response=response)
message = requests_router._format_upstream_error("Radarr", error)
self.assertIn("Object reference", message)
self.assertNotIn("NullReferenceException", message)
self.assertNotIn("SecretMethod", message)
class CollectorManualDownloadTests(unittest.IsolatedAsyncioTestCase):
@staticmethod
def _runtime() -> SimpleNamespace: