From 2453bc8c05510708be03f15835de77a241d3264d Mon Sep 17 00:00:00 2001 From: "zia.fazal@arbisoft.com" Date: Thu, 13 Feb 2020 18:29:26 +0500 Subject: [PATCH] Stop showing hitting enterprise API in case of 404 error Stop showing hitting enterprise API when request is originated as result of 404 error. fixed quality violations Removed line break add unit tests Updated test docstring --- lms/djangoapps/static_template_view/views.py | 1 + .../enterprise_support/tests/test_utils.py | 46 +++++++++++++++++++ openedx/features/enterprise_support/utils.py | 5 ++ 3 files changed, 52 insertions(+) create mode 100644 openedx/features/enterprise_support/tests/test_utils.py diff --git a/lms/djangoapps/static_template_view/views.py b/lms/djangoapps/static_template_view/views.py index d383313d5f..8d314e535a 100644 --- a/lms/djangoapps/static_template_view/views.py +++ b/lms/djangoapps/static_template_view/views.py @@ -94,6 +94,7 @@ def render_press_release(request, slug): @fix_crum_request def render_404(request, exception): + request.view_name = '404' return HttpResponseNotFound(render_to_string('static_templates/404.html', {}, request=request)) diff --git a/openedx/features/enterprise_support/tests/test_utils.py b/openedx/features/enterprise_support/tests/test_utils.py new file mode 100644 index 0000000000..1e674088f1 --- /dev/null +++ b/openedx/features/enterprise_support/tests/test_utils.py @@ -0,0 +1,46 @@ +""" +Test the enterprise support utils. +""" + + +import mock +import ddt + +from django.test import TestCase +from django.test.utils import override_settings +from django.urls import reverse + +from openedx.core.djangolib.testing.utils import skip_unless_lms +from openedx.features.enterprise_support.tests import FEATURES_WITH_ENTERPRISE_ENABLED +from student.tests.factories import UserFactory + + +@ddt.ddt +@override_settings(FEATURES=FEATURES_WITH_ENTERPRISE_ENABLED) +@skip_unless_lms +class TestEnterpriseUtils(TestCase): + """ + Test enterprise support utils. + """ + + @classmethod + def setUpTestData(cls): + cls.user = UserFactory.create(password='password') + super(TestEnterpriseUtils, cls).setUpTestData() + + @ddt.data( + ('notfoundpage', 0), + (reverse('dashboard'), 1), + ) + @ddt.unpack + def test_enterprise_customer_for_request_called_on_404(self, resource, expected_calls): + """ + Test enterprise customer API is not called from 404 page + """ + self.client.login(username=self.user.username, password='password') + + with mock.patch( + 'openedx.features.enterprise_support.api.enterprise_customer_for_request' + ) as mock_customer_request: + self.client.get(resource) + self.assertEqual(mock_customer_request.call_count, expected_calls) diff --git a/openedx/features/enterprise_support/utils.py b/openedx/features/enterprise_support/utils.py index 12ac3c9623..7d464cdc2a 100644 --- a/openedx/features/enterprise_support/utils.py +++ b/openedx/features/enterprise_support/utils.py @@ -316,6 +316,11 @@ def get_enterprise_learner_generic_name(request): """ # Prevent a circular import. This function makes sense to be in this module though. And see function description. from openedx.features.enterprise_support.api import enterprise_customer_for_request + + # ENT-2626: For 404 pages we don't need to perform these actions. + if getattr(request, 'view_name', None) == '404': + return + enterprise_customer = enterprise_customer_for_request(request) return (