66
77from django .conf import settings
88
9+ from celery import states
910from celery .result import EagerResult
1011from django_celery_beat .models import PeriodicTask
1112
1213from hope_country_report .apps .power_query .celery_tasks import refresh_report , reports_refresh , run_background_query
1314from hope_country_report .apps .power_query .exceptions import QueryRunCanceled , QueryRunTerminated
15+ from hope_country_report .apps .power_query .models import Query , ReportConfiguration
1416from hope_country_report .config .celery import app
1517from hope_country_report .state import state
1618
@@ -77,41 +79,45 @@ def query2():
7779
7880
7981@pytest .fixture ()
80- def report (query1 : " Query" ):
82+ def report (query1 : Query ):
8183 from testutils .factories import ReportConfigurationFactory
8284
8385 return ReportConfigurationFactory (name = "Celery Report" , query = query1 , owner = query1 .owner )
8486
8587
86- def test_run_background_query (settings , query1 : " Query" ) -> None :
88+ def test_run_background_query (settings , query1 : Query ) -> None :
8789 settings .CELERY_TASK_ALWAYS_EAGER = True
8890 run_background_query .delay (query1 .pk , query1 .version )
8991 assert query1 .datasets .exists ()
9092
9193
92- def test_run_background_query_version_mismatch (settings , query1 : " Query" ) -> None :
94+ def test_run_background_query_version_mismatch (settings , query1 : Query ) -> None :
9395 settings .CELERY_TASK_ALWAYS_EAGER = True
94- result = run_background_query .delay (query1 .pk , - 1 )
95- assert result .state == " REJECTED"
96+ result : EagerResult = run_background_query .delay (query1 .pk , - 1 )
97+ assert result .state == states . REJECTED
9698
9799
98- def test_run_background_query_removed (settings , query1 : " Query" , monkeypatch ) -> None :
99- from hope_country_report . apps . power_query . models import Query
100+ def test_run_background_query_removed (settings , query1 : Query ) -> None :
101+ from unittest . mock import PropertyMock
100102
101103 settings .CELERY_TASK_ALWAYS_EAGER = True
102- with mock .patch ("hope_country_report.apps.power_query.models.Query.status" , Query .CANCELED ):
104+ with mock .patch (
105+ "hope_country_report.apps.power_query.models.Query.task_status" ,
106+ new_callable = PropertyMock ,
107+ return_value = states .REVOKED ,
108+ ):
103109 result : EagerResult = run_background_query .delay (query1 .pk , query1 .version )
104- assert result .state == "IGNORED "
110+ assert result .state == "SUCCESS "
105111
106112
107- def test_run_background_query_canceled (settings , query1 : " Query" , monkeypatch ) -> None :
113+ def test_run_background_query_canceled (settings , query1 : Query , monkeypatch ) -> None :
108114 settings .CELERY_TASK_ALWAYS_EAGER = True
109115 with mock .patch ("hope_country_report.apps.power_query.models.Query.execute_matrix" , side_effect = QueryRunCanceled ()):
110116 result : EagerResult = run_background_query .delay (query1 .pk , query1 .version )
111117 assert result .state == "REJECTED"
112118
113119
114- def test_run_background_query_terminate (settings , query1 : " Query" , monkeypatch ) -> None :
120+ def test_run_background_query_terminate (settings , query1 : Query , monkeypatch ) -> None :
115121 settings .CELERY_TASK_ALWAYS_EAGER = True
116122 with mock .patch (
117123 "hope_country_report.apps.power_query.models.Query.execute_matrix" , side_effect = QueryRunTerminated ()
@@ -125,13 +131,13 @@ def test_refresh_report(report: "ReportConfiguration") -> None:
125131 assert report .documents .exists ()
126132
127133
128- def test_celery_no_worker (db , settings , query2 : " Query" ) -> None :
134+ def test_celery_no_worker (db , settings , query2 : Query ) -> None :
129135 settings .CELERY_TASK_ALWAYS_EAGER = False
130- assert query2 .status == "Not scheduled"
136+ assert query2 .task_status == "Not scheduled"
131137 query2 .queue ()
132- assert query2 .status == "QUEUED"
138+ assert query2 .task_status == "QUEUED"
133139 query2 .terminate ()
134- assert query2 .status == "CANCELED "
140+ assert query2 .task_status == "Not scheduled "
135141
136142
137143def test_celery_reports_refresh (db , settings , report : "ReportConfiguration" ) -> None :
@@ -147,45 +153,19 @@ def test_celery_reports_refresh(db, settings, report: "ReportConfiguration") ->
147153 assert result .state == "SUCCESS"
148154
149155
150- # @pytest.fixture(scope="session")
151- # def celery_config():
152- # return {"broker_url": settings.CELERY_BROKER_URL, "result_backend": settings.CELERY_BROKER_URL}
153- #
154- #
155- # @pytest.fixture(scope="session")
156- # def celery_enable_logging():
157- # return True
158- #
159- #
160- # @pytest.fixture(scope="session")
161- # def celery_worker_pool():
162- # return "prefork"
163- #
164-
165-
166- @pytest .mark .django_db (transaction = True )
167- def test_celery_error (settings , query_exception : "Query" ) -> None :
156+ @pytest .mark .django_db
157+ def test_celery_error (settings , query_exception : Query ) -> None :
168158 settings .CELERY_TASK_ALWAYS_EAGER = True
159+ settings .CELERY_TASK_STORE_EAGER_RESULT = True
169160 query_exception .last_run = None
170- result = query_exception .queue ()
171- assert result
161+ query_exception .error_message = None
162+ query_exception .sentry_error_id = None
163+ query_exception .save ()
164+
165+ query_exception .queue ()
166+
172167 query_exception .refresh_from_db ()
173- assert query_exception .last_run
174- assert query_exception .curr_async_result_id == result
175- assert query_exception .status == "Not scheduled"
176- assert query_exception .error_message
177-
178-
179- #
180- #
181- # @pytest.mark.django_db(transaction=True)
182- # def test_celery_async(settings, celery_worker, query_exception: "Query") -> None:
183- # settings.CELERY_TASK_ALWAYS_EAGER = True
184- # query_exception.last_run = None
185- # result = query_exception.queue()
186- # assert result
187- # query_exception.refresh_from_db()
188- # assert query_exception.last_run
189- # assert query_exception.curr_async_result_id == result
190- # assert query_exception.status == "Not scheduled"
191- # assert query_exception.error_message
168+
169+ assert query_exception .error_message == "internal exc"
170+ assert query_exception .sentry_error_id
171+ assert query_exception .task_status == "MISSING"
0 commit comments