Use admin quality defaults throughout the request pipeline
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user