From 45204e8501ffdee7c0be34a5642929b4988d352e Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 1 Feb 2023 19:03:49 +0100 Subject: [PATCH] base: show configured requests_substitutions (#74030) --- passerelle/base/models.py | 12 ++++-- .../passerelle/manage/service_view.html | 20 ++++++++++ tests/test_manager.py | 38 +++++++++++++++++++ tests/test_requests.py | 1 + 4 files changed, 67 insertions(+), 4 deletions(-) diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 0edb01ee..5de2a0cf 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -668,14 +668,18 @@ class BaseResource(models.Model): ).exists() def get_setting(self, name): + connector_settings = self.get_settings() + return connector_settings.get(name) + + def get_settings(self): connectors_settings = settings.CONNECTORS_SETTINGS if not isinstance(connectors_settings, dict): return None connector_identifier = f'{self.get_connector_slug()}/{self.slug}' - connector_settings = connectors_settings.get(connector_identifier) - if not isinstance(connector_settings, dict): - return None - return connector_settings.get(name) + connector_settings = connectors_settings.get(connector_identifier) or {} + if not isinstance(connectors_settings, dict): + return {} + return connector_settings class AccessRight(models.Model): diff --git a/passerelle/templates/passerelle/manage/service_view.html b/passerelle/templates/passerelle/manage/service_view.html index 44ef4f52..536812bc 100644 --- a/passerelle/templates/passerelle/manage/service_view.html +++ b/passerelle/templates/passerelle/manage/service_view.html @@ -56,6 +56,26 @@

{% endif %} {% endfor %} + {% block settings %} + {% if user.is_staff %} + {% for name, value in object.get_settings.items %} + {% if name == 'requests_substitutions' %} +
+

{% trans "Requests substitutions:" %}

+ +
+ {% endif %} + {% endfor %} + {% endif %} + {% endblock %} {% endblock %} {% endif %} diff --git a/tests/test_manager.py b/tests/test_manager.py index 353cac95..315f1ee3 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -808,3 +808,41 @@ def test_manager_open_access_flag(app, admin_user): resp = app.get('/manage/', status=200) assert 'open access' in resp.text + + +class TestRequestsSubstitutionsDisplay: + @pytest.fixture + def setup(self, settings): + settings.CONNECTORS_SETTINGS = { + "photon/t": { + "requests_substitutions": [ + { + 'search': 'abcd', + 'replace': 'efgh', + } + ] + } + } + photon = Photon.objects.create(slug='t') + return {'url': photon.get_absolute_url()} + + def test_shown_when_logged(self, setup, app, admin_user): + app = login(app) + resp = app.get(setup['url']) + paragraph = str(resp.pyquery('#requests-substitutions')) + assert 'Requests substitutions' in paragraph + assert 'URL:' not in paragraph + assert 'Search: abcd' in paragraph + assert 'Replace: efgh' in paragraph + + def test_absent_when_unlogged(self, setup, app): + resp = app.get(setup['url']) + paragraph = str(resp.pyquery('#requests-substitutions')) + assert 'Requests substitutions' not in paragraph + + def test_url(self, setup, app, admin_user, settings): + settings.CONNECTORS_SETTINGS['photon/t']['requests_substitutions'][0]['url'] = 'https://example.com/' + app = login(app) + resp = app.get(setup['url']) + paragraph = str(resp.pyquery('#requests-substitutions')) + assert 'URL: https://example.com/' in paragraph diff --git a/tests/test_requests.py b/tests/test_requests.py index 5a3d5cd8..4620ab5c 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -545,6 +545,7 @@ def test_requests_substitution(settings): resource.requests_max_retries = {} resource.slug = 'test' resource.get_connector_slug.return_value = 'cmis' + resource.get_settings = lambda: BaseResource.get_settings(resource) resource.get_setting = lambda name: BaseResource.get_setting(resource, name) requests = Request(logger=logging.getLogger(), resource=resource)