From 63401ae95aa8d38d6db3c034eb26d09f9faaee85 Mon Sep 17 00:00:00 2001 From: Ali Nawaz Date: Thu, 24 Oct 2024 14:47:43 +0500 Subject: [PATCH 1/2] fix: do not push runs without seats to ecommerce in data loader --- .../apps/course_metadata/data_loaders/api.py | 2 +- .../data_loaders/tests/test_api.py | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/course_discovery/apps/course_metadata/data_loaders/api.py b/course_discovery/apps/course_metadata/data_loaders/api.py index 1c16ad920f..40cf7c984b 100644 --- a/course_discovery/apps/course_metadata/data_loaders/api.py +++ b/course_discovery/apps/course_metadata/data_loaders/api.py @@ -174,7 +174,7 @@ def update_course_run(self, official_run, draft_run, body): self._update_verified_deadline_for_course_run(official_run) self._update_verified_deadline_for_course_run(draft_run) has_upgrade_deadline_override = run.seats.filter(upgrade_deadline_override__isnull=False) - if not has_upgrade_deadline_override and official_run: + if not has_upgrade_deadline_override and official_run and official_run.seats.count(): push_to_ecommerce_for_course_run(official_run) logger.info(f'Processed course run with UUID [{run.uuid}] and key [{run.key}].') diff --git a/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py b/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py index 57b1a0575e..b608f929b9 100644 --- a/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py +++ b/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py @@ -362,6 +362,34 @@ def test_ingest_verified_deadline_with_bypass_end_date_check(self, mock_push_to_ assert original_run1_deadline == updated_run1_upgrade_deadline assert run3.seats.first().upgrade_deadline is None + @responses.activate + @mock.patch('course_discovery.apps.course_metadata.data_loaders.api.push_to_ecommerce_for_course_run') + def test_not_pushed_to_ecomm_if_no_seats(self, mock_push_to_ecomm): + """ + Verify that LMS data loader will skip pushing a course run to ecommerce + if it has no seats + """ + TieredCache.dangerous_clear_all_tiers() + responses.calls.reset() # pylint: disable=no-member + api_data = self.mock_api() + assert Course.objects.count() == 0 + assert CourseRun.objects.count() == 0 + + self.loader.ingest() + self.assert_api_called(4) + runs = CourseRun.objects.all() + + run = runs[0] + run.end = datetime.datetime.now(pytz.UTC) + run.save() + + # Verify the CourseRuns were created correctly + expected_num_course_runs = len(api_data) + assert CourseRun.objects.count() == expected_num_course_runs + + self.loader.ingest() + assert not mock_push_to_ecomm.called + @responses.activate def test_ingest_exception_handling(self): """ Verify the data loader properly handles exceptions during processing of the data from the API. """ From 8c3b4cce396de6be3ff3bfa3b8a99a2f2fa08f2c Mon Sep 17 00:00:00 2001 From: Ali Nawaz Date: Mon, 28 Oct 2024 15:05:32 +0500 Subject: [PATCH 2/2] test: improvements --- .../apps/course_metadata/data_loaders/tests/test_api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py b/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py index b608f929b9..42255943e0 100644 --- a/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py +++ b/course_discovery/apps/course_metadata/data_loaders/tests/test_api.py @@ -382,6 +382,7 @@ def test_not_pushed_to_ecomm_if_no_seats(self, mock_push_to_ecomm): run = runs[0] run.end = datetime.datetime.now(pytz.UTC) run.save() + assert run.seats.count() == 0 # Verify the CourseRuns were created correctly expected_num_course_runs = len(api_data)