From 2f57a07331ecfba944785fac9d5f690affa4ddcf Mon Sep 17 00:00:00 2001 From: Alexander Dusenbery Date: Tue, 25 Feb 2025 16:00:14 -0500 Subject: [PATCH] fix: return empty dict if no customer results --- .../apps/api_client/lms_client.py | 6 ++- .../apps/api_client/tests/test_lms_client.py | 41 +++++++++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/enterprise_access/apps/api_client/lms_client.py b/enterprise_access/apps/api_client/lms_client.py index aa8943c9..e863c7ab 100755 --- a/enterprise_access/apps/api_client/lms_client.py +++ b/enterprise_access/apps/api_client/lms_client.py @@ -100,8 +100,10 @@ def get_enterprise_customer_data(self, enterprise_customer_uuid=None, enterprise response = self.client.get(endpoint, timeout=settings.LMS_CLIENT_TIMEOUT) response.raise_for_status() payload = response.json() - if results := payload.get('results'): - return results[0] + if 'count' in payload: + if results := payload.get('results'): + return results[0] + return {} return payload except requests.exceptions.HTTPError as exc: logger.exception(exc) diff --git a/enterprise_access/apps/api_client/tests/test_lms_client.py b/enterprise_access/apps/api_client/tests/test_lms_client.py index 7f990a0e..98e6ce38 100644 --- a/enterprise_access/apps/api_client/tests/test_lms_client.py +++ b/enterprise_access/apps/api_client/tests/test_lms_client.py @@ -140,9 +140,11 @@ def test_get_enterprise_customer_data( 'uuid': 'some-uuid', 'slug': 'some-test-slug', } - mock_json.return_value = mock_enterprise_customer - if not enterprise_uuid and enterprise_slug: - mock_json.return_value = {'results': [mock_enterprise_customer]} + if enterprise_uuid: + mock_json.return_value = mock_enterprise_customer + else: + mock_json.return_value = {'results': [mock_enterprise_customer], 'count': 1} + mock_oauth_client.return_value.get.return_value = requests.Response() mock_oauth_client.return_value.get.return_value.status_code = 200 @@ -174,6 +176,39 @@ def test_get_enterprise_customer_data( timeout=settings.LMS_CLIENT_TIMEOUT, ) + @mock.patch('requests.Response.json') + @mock.patch('enterprise_access.apps.api_client.base_oauth.OAuthAPIClient') + def test_get_enterprise_customer_data_no_hits( + self, + mock_oauth_client, + mock_json, + ): + """ + Verify client returns empty dict if no results when filtering by slug. + """ + mock_json.return_value = {'results': [], 'count': 0} + + mock_oauth_client.return_value.get.return_value = requests.Response() + mock_oauth_client.return_value.get.return_value.status_code = 200 + + client = LmsApiClient() + customer_data = client.get_enterprise_customer_data( + enterprise_customer_slug='nuthin', + ) + + self.assertEqual(customer_data, {}) + + expected_url = ( + 'http://edx-platform.example.com/' + 'enterprise/api/v1/' + 'enterprise-customer/' + '?slug=nuthin' + ) + mock_oauth_client.return_value.get.assert_called_with( + expected_url, + timeout=settings.LMS_CLIENT_TIMEOUT, + ) + @mock.patch('requests.Response.json') @mock.patch('enterprise_access.apps.api_client.base_oauth.OAuthAPIClient') def test_create_enterprise_customer_data(self, mock_oauth_client, mock_json):