import unittest from types import SimpleNamespace from unittest.mock import AsyncMock, patch from backend.app.routers import requests from backend.app.models import Snapshot, RequestType class RecheckMonitoringTests(unittest.IsolatedAsyncioTestCase): async def test_series_restores_only_requested_seasons_and_episodes(self): original={'id':10,'monitored':False,'qualityProfileId':7,'seasons':[{'seasonNumber':1,'monitored':False},{'seasonNumber':2,'monitored':False}]} restored={**original,'monitored':True,'seasons':[{'seasonNumber':1,'monitored':True},{'seasonNumber':2,'monitored':False}]} client=SimpleNamespace(get_series=AsyncMock(side_effect=[original,restored]),update_series=AsyncMock(),get_episodes=AsyncMock(side_effect=[[{'id':1,'seasonNumber':1,'monitored':False},{'id':2,'seasonNumber':2,'monitored':False}],[{'id':1,'seasonNumber':1,'monitored':True},{'id':2,'seasonNumber':2,'monitored':False}]]),monitor_episodes=AsyncMock()) snapshot=Snapshot(request_id='42',title='Test',request_type=RequestType.tv,raw={'arr':{'item':{'id':10}}}) runtime=SimpleNamespace(sonarr_base_url='http://sonarr',sonarr_api_key='test') with patch.object(requests,'get_runtime_settings',return_value=runtime),patch.object(requests,'SonarrClient',return_value=client): self.assertTrue(await requests._restore_request_monitoring(snapshot,{'status':2,'seasons':[{'seasonNumber':1}]})) client.update_series.assert_awaited_once_with(restored) client.monitor_episodes.assert_awaited_once_with([1],True) async def test_movie_monitoring_preserves_profile_and_pending_is_noop(self): movie={'id':10,'monitored':False,'qualityProfileId':7} client=SimpleNamespace(get_movie=AsyncMock(side_effect=[movie,{**movie,'monitored':True}]),update_movie=AsyncMock()) snapshot=Snapshot(request_id='42',title='Test',request_type=RequestType.movie,raw={'arr':{'item':{'id':10}}}) runtime=SimpleNamespace(radarr_base_url='http://radarr',radarr_api_key='test') with patch.object(requests,'get_runtime_settings',return_value=runtime),patch.object(requests,'RadarrClient',return_value=client): self.assertFalse(await requests._restore_request_monitoring(snapshot,{'status':1})) self.assertTrue(await requests._restore_request_monitoring(snapshot,{'status':2})) client.update_movie.assert_awaited_once_with({**movie,'monitored':True})