From d30452d10340bb061dbd0c5560fb17d9e792349f Mon Sep 17 00:00:00 2001 From: Amit Phulera Date: Mon, 26 Aug 2024 17:53:00 +0530 Subject: [PATCH 1/5] add check for the case type passed in the URL --- corehq/apps/export/views/new.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/corehq/apps/export/views/new.py b/corehq/apps/export/views/new.py index 4d1c2c1ccbf4..3ee2ee041e08 100644 --- a/corehq/apps/export/views/new.py +++ b/corehq/apps/export/views/new.py @@ -15,6 +15,7 @@ from memoized import memoized from corehq.apps.accounting.decorators import requires_privilege_with_fallback +from corehq.apps.reports.analytics.esaccessors import get_case_types_for_domain from dimagi.utils.web import json_response from corehq import privileges, toggles @@ -412,6 +413,21 @@ def create_new_export_instance(self, schema, username, export_settings=None): def get(self, request, *args, **kwargs): case_type = request.GET.get('export_tag').strip('"') + if ( + case_type not in get_case_types_for_domain(request.domain) + and case_type != ALL_CASE_TYPE_EXPORT + ): + messages.error( + request, + _( + "Case type '%(case_type)' does not exist in domain %(domain)" + ) % { + 'case_type': case_type, + 'domain': self.domain + } + ) + url = self.export_home_url + return HttpResponseRedirect(url) # First check if project is allowed to do a bulk export and redirect if necessary if case_type == ALL_CASE_TYPE_EXPORT and case_type_or_app_limit_exceeded(self.domain): messages.error( From bbc9d167de4f4674060ad5494228647fe358a011 Mon Sep 17 00:00:00 2001 From: Amit Phulera Date: Mon, 26 Aug 2024 18:30:38 +0530 Subject: [PATCH 2/5] patch get_case_types_for_domain in test --- corehq/apps/export/tests/test_export_views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/corehq/apps/export/tests/test_export_views.py b/corehq/apps/export/tests/test_export_views.py index 54553fcdbd33..93f75df29a26 100644 --- a/corehq/apps/export/tests/test_export_views.py +++ b/corehq/apps/export/tests/test_export_views.py @@ -151,6 +151,7 @@ def test_create_form_export(self): ) self.assertEqual(resp.status_code, 200) + @patch("corehq.apps.export.views.new.get_case_types_for_domain", lambda *a: ['random_case']) def test_create_case_export(self): resp = self.client.get( reverse(CreateNewCustomCaseExportView.urlname, args=[self.domain.name]), From bdaea16e9564ce64c6e2db17c77d3ed2874afef6 Mon Sep 17 00:00:00 2001 From: Amit Phulera Date: Wed, 28 Aug 2024 21:25:27 +0530 Subject: [PATCH 3/5] update error message --- corehq/apps/export/views/new.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corehq/apps/export/views/new.py b/corehq/apps/export/views/new.py index 3ee2ee041e08..e50754aae443 100644 --- a/corehq/apps/export/views/new.py +++ b/corehq/apps/export/views/new.py @@ -420,7 +420,7 @@ def get(self, request, *args, **kwargs): messages.error( request, _( - "Case type '%(case_type)' does not exist in domain %(domain)" + "Case type '%(case_type)' does not exist for this project." ) % { 'case_type': case_type, 'domain': self.domain From 6e2b364d9c1e9503a6e24b62e435259a1425b6c1 Mon Sep 17 00:00:00 2001 From: Amit Phulera Date: Wed, 28 Aug 2024 21:43:27 +0530 Subject: [PATCH 4/5] update error message and remove domain from it --- corehq/apps/export/views/new.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/corehq/apps/export/views/new.py b/corehq/apps/export/views/new.py index e50754aae443..e4943cf82d4e 100644 --- a/corehq/apps/export/views/new.py +++ b/corehq/apps/export/views/new.py @@ -419,12 +419,7 @@ def get(self, request, *args, **kwargs): ): messages.error( request, - _( - "Case type '%(case_type)' does not exist for this project." - ) % { - 'case_type': case_type, - 'domain': self.domain - } + _("Case type '{case_type}' does not exist for this project.").format(case_type=case_type) ) url = self.export_home_url return HttpResponseRedirect(url) From b744b1e60783b89496086d939c47d58999f6aed8 Mon Sep 17 00:00:00 2001 From: Amit Phulera Date: Wed, 28 Aug 2024 21:43:41 +0530 Subject: [PATCH 5/5] add test for invalid case type --- corehq/apps/export/tests/test_export_views.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/corehq/apps/export/tests/test_export_views.py b/corehq/apps/export/tests/test_export_views.py index 93f75df29a26..31d564e17163 100644 --- a/corehq/apps/export/tests/test_export_views.py +++ b/corehq/apps/export/tests/test_export_views.py @@ -151,6 +151,14 @@ def test_create_form_export(self): ) self.assertEqual(resp.status_code, 200) + @patch("corehq.apps.export.views.new.get_case_types_for_domain", lambda *a: ['random_case']) + def test_create_case_export_with_invalid_case(self): + resp = self.client.get( + reverse(CreateNewCustomCaseExportView.urlname, args=[self.domain.name]), + {'export_tag': 'some_case'} + ) + self.assertEqual(resp.status_code, 302) + @patch("corehq.apps.export.views.new.get_case_types_for_domain", lambda *a: ['random_case']) def test_create_case_export(self): resp = self.client.get(