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:" %}
+
+ {% for requests_substitution in value %}
+ -
+ {% if requests_substitution.url %}
{% trans "URL:" %} {{ requests_substitution.url }}
{% endif %}
+ {% trans "Search:" %} {{ requests_substitution.search }}
+ {% trans "Replace:" %} {{ requests_substitution.replace }}
+
+ {% endfor %}
+
+
+ {% 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)