Use admin quality defaults throughout the request pipeline
Magent CI/CD / verify (push) Successful in 10m49s
Magent CI/CD / deploy-prod (push) Skipped
Magent CI/CD / deploy-beta (push) Successful in 1m6s

This commit is contained in:
2026-09-10 15:20:23 +12:00
parent 77f2c1b42a
commit df651eb312
4 changed files with 53 additions and 38 deletions
+39 -7
View File
@@ -803,7 +803,7 @@ class RequestCreationFlowTests(unittest.IsolatedAsyncioTestCase):
self.assertEqual(result, {"ok": True})
self.assertEqual(captured["payload"], {"mediaType": "movie", "mediaId": 209112})
async def test_request_destination_only_offers_live_sonarr_profiles(self) -> None:
async def test_request_destination_uses_admin_default_before_seerr(self) -> None:
runtime = SimpleNamespace(
sonarr_base_url="http://sonarr.test",
sonarr_api_key="key",
@@ -818,7 +818,7 @@ class RequestCreationFlowTests(unittest.IsolatedAsyncioTestCase):
"name": "Main Sonarr",
"isDefault": True,
"is4k": False,
"activeProfileId": 7,
"activeProfileId": 10,
"activeDirectory": "/tv",
}
]
@@ -834,10 +834,10 @@ class RequestCreationFlowTests(unittest.IsolatedAsyncioTestCase):
with patch.object(requests_router, "SonarrClient", return_value=sonarr):
destination = await requests_router._resolve_request_destination(
runtime, seerr, "tv", requested_profile_id=10
runtime, seerr, "tv"
)
self.assertEqual(destination["profile_id"], 10)
self.assertEqual(destination["profile_id"], 7)
self.assertEqual(destination["default_profile_id"], 7)
self.assertEqual(destination["root_folder"], "/tv")
self.assertEqual(destination["profiles"], [
@@ -845,11 +845,43 @@ class RequestCreationFlowTests(unittest.IsolatedAsyncioTestCase):
{"id": 10, "name": "Optimal"},
])
async def test_request_defaults_inherit_seerr_only_when_unset(self) -> None:
for media_type, service in [('movie', 'radarr'), ('tv', 'sonarr')]:
runtime = SimpleNamespace(**{
service + '_base_url': 'http://collector.test', service + '_api_key': 'key',
service + '_quality_profile_id': None, service + '_root_folder': '/media',
})
seerr = SimpleNamespace(get_service_settings=AsyncMock(return_value=[{
'id': 1, 'isDefault': True, 'activeProfileId': 7, 'activeDirectory': '/media',
}]))
collector = SimpleNamespace(configured=lambda: True,
get_quality_profiles=AsyncMock(return_value=[{'id': 7, 'name': 'HD'}]),
get_root_folders=AsyncMock(return_value=[{'path': '/media'}]))
with patch.object(requests_router, 'RadarrClient' if service == 'radarr' else 'SonarrClient', return_value=collector):
result = await requests_router._resolve_request_destination(runtime, seerr, media_type)
self.assertEqual(result['profile_id'], 7)
seerr.get_service_settings.return_value[0]['activeProfileId'] = 999
with self.assertRaises(HTTPException):
await requests_router._resolve_request_destination(runtime, seerr, media_type)
async def test_request_creation_ignores_browser_quality_override(self) -> None:
runtime = SimpleNamespace(jellyseerr_base_url='http://seerr.test', jellyseerr_api_key='key')
seerr = SimpleNamespace(configured=lambda: True,
get_movie=AsyncMock(return_value={'title': 'Movie'}),
create_request=AsyncMock(return_value={'status': 1}))
destination = {'server_id': 1, 'profile_id': 7, 'root_folder': '/movies'}
with patch.object(requests_router, 'get_runtime_settings', return_value=runtime), \
patch.object(requests_router, 'JellyseerrClient', return_value=seerr), \
patch.object(requests_router, '_resolve_request_destination', new_callable=AsyncMock, return_value=destination) as resolve:
await requests_router.create_request({'mediaType': 'movie', 'tmdbId': 123, 'profileId': 999}, {'username': 'viewer'})
resolve.assert_awaited_once_with(runtime, seerr, 'movie')
self.assertEqual(seerr.create_request.await_args.kwargs['profile_id'], 7)
async def test_request_destination_rejects_stale_profile_id(self) -> None:
runtime = SimpleNamespace(
radarr_base_url="http://radarr.test",
radarr_api_key="key",
radarr_quality_profile_id=6,
radarr_quality_profile_id=999,
radarr_root_folder="/movies",
)
seerr = SimpleNamespace(
@@ -875,10 +907,10 @@ class RequestCreationFlowTests(unittest.IsolatedAsyncioTestCase):
with patch.object(requests_router, "RadarrClient", return_value=radarr):
with self.assertRaises(HTTPException) as context:
await requests_router._resolve_request_destination(
runtime, seerr, "movie", requested_profile_id=999
runtime, seerr, "movie"
)
self.assertEqual(context.exception.status_code, 400)
self.assertEqual(context.exception.status_code, 409)
self.assertIn("not available in Radarr", context.exception.detail)