@@ -174,10 +174,7 @@ def test_recap_view_redirects_when_shortlist_not_visible(rf, mocker):
174174 response = admin .review_recap_view (request , review_session .id )
175175
176176 assert response .status_code == 302
177- assert (
178- response .url
179- == f"/admin/reviews/reviewsession/{ review_session .id } /change/"
180- )
177+ assert response .url == f"/admin/reviews/reviewsession/{ review_session .id } /change/"
181178
182179
183180# --- review_recap_compute_analysis_view tests ---
@@ -194,9 +191,7 @@ def cache_get_side_effect(key):
194191 mock_cache_get = mocker .patch (
195192 "django.core.cache.cache.get" , side_effect = cache_get_side_effect
196193 )
197- mock_cache_add = mocker .patch (
198- "django.core.cache.cache.add" , return_value = True
199- )
194+ mock_cache_add = mocker .patch ("django.core.cache.cache.add" , return_value = True )
200195 mocker .patch ("django.core.cache.cache.set" )
201196 mocker .patch ("django.core.cache.cache.delete" )
202197 mock_task = mocker .patch ("reviews.tasks.compute_recap_analysis.apply_async" )
@@ -573,6 +568,56 @@ def cache_get_side_effect(key):
573568 mock_check .assert_not_called ()
574569
575570
571+ def test_compute_analysis_view_check_only_returns_empty_on_cache_miss (rf , mocker ):
572+ user , conference , review_session , submissions = _create_recap_setup ()
573+
574+ _ , _ , mock_task , mock_check = _mock_analysis_deps (mocker , cache_return = None )
575+
576+ request = rf .get ("/?check=1" )
577+ request .user = user
578+
579+ admin = ReviewSessionAdmin (ReviewSession , AdminSite ())
580+ response = admin .review_recap_compute_analysis_view (request , review_session .id )
581+
582+ data = json .loads (response .content )
583+ assert data == {"status" : "empty" }
584+
585+ # Task should NOT be dispatched in check-only mode
586+ mock_task .assert_not_called ()
587+ mock_check .assert_not_called ()
588+
589+
590+ def test_compute_analysis_view_check_only_returns_cached_result (rf , mocker ):
591+ user , conference , review_session , submissions = _create_recap_setup ()
592+ sub1 , sub2 = submissions
593+
594+ cached_data = {
595+ "submissions_list" : [
596+ {
597+ "id" : sub1 .id ,
598+ "title" : str (sub1 .title ),
599+ "type" : sub1 .type .name ,
600+ "speaker" : sub1 .speaker .display_name ,
601+ "similar" : [],
602+ },
603+ ],
604+ "topic_clusters" : {"topics" : [], "outliers" : [], "submission_topics" : {}},
605+ }
606+
607+ _ , _ , mock_task , _ = _mock_analysis_deps (mocker , cache_return = cached_data )
608+
609+ request = rf .get ("/?check=1" )
610+ request .user = user
611+
612+ admin = ReviewSessionAdmin (ReviewSession , AdminSite ())
613+ response = admin .review_recap_compute_analysis_view (request , review_session .id )
614+
615+ data = json .loads (response .content )
616+ assert data ["submissions_list" ][0 ]["id" ] == sub1 .id
617+
618+ mock_task .assert_not_called ()
619+
620+
576621def test_error_cache_ttl_is_shorter_than_result_ttl ():
577622 from reviews .tasks import ERROR_CACHE_TTL , RESULT_CACHE_TTL
578623
0 commit comments