From 02052aff40c4188fb807b9d8601ae606e7458b6b Mon Sep 17 00:00:00 2001 From: Nicolas ROCHE Date: Thu, 25 Jun 2020 18:49:26 +0200 Subject: [PATCH] emails: allow user to define email sender name (#44411) --- hobo/emails/forms.py | 5 +++- hobo/emails/views.py | 2 +- hobo/environment/models.py | 1 + hobo/multitenant/settings_loaders.py | 5 ++-- tests/test_emails.py | 2 ++ tests/test_settings_loaders.py | 34 +++++++++++++++++++++++++++- 6 files changed, 44 insertions(+), 5 deletions(-) diff --git a/hobo/emails/forms.py b/hobo/emails/forms.py index 7a120df..fe195d3 100644 --- a/hobo/emails/forms.py +++ b/hobo/emails/forms.py @@ -28,7 +28,10 @@ class ValidEmailField(forms.EmailField): class EmailsForm(forms.Form): - default_from_email = ValidEmailField(label=_('Default From')) + default_from_email = ValidEmailField(label=_('Default From'), + help_text=_('Sender email address')) + email_sender_name = forms.CharField(label=_('Sender Name'), required=False, + help_text=_('Custom sender name (defaults to global title)')) global_email_prefix = forms.CharField(label=_('Prefix'), required=False, help_text=_('Custom prefix for emails subject (defaults to global title)')) email_signature = forms.CharField(label=_('Signature'), required=False, diff --git a/hobo/emails/views.py b/hobo/emails/views.py index a61712d..5069d56 100644 --- a/hobo/emails/views.py +++ b/hobo/emails/views.py @@ -24,7 +24,7 @@ from .forms import EmailsForm class HomeView(VariablesFormMixin, TemplateView): template_name = 'hobo/emails_home.html' - variables = ['default_from_email', 'global_email_prefix', 'email_signature'] + variables = ['default_from_email', 'email_sender_name', 'global_email_prefix', 'email_signature'] form_class = EmailsForm success_message = _('Emails settings have been updated. ' 'It will take a few seconds to be effective.') diff --git a/hobo/environment/models.py b/hobo/environment/models.py index fbb62fb..34a69ff 100644 --- a/hobo/environment/models.py +++ b/hobo/environment/models.py @@ -47,6 +47,7 @@ AUTO_VARIABLES = ( 'default_from_email', 'global_email_prefix', 'email_signature', + 'email_sender_name', 'global_title', 'robots_txt', 'meta_description', diff --git a/hobo/multitenant/settings_loaders.py b/hobo/multitenant/settings_loaders.py index 634d1bd..f65ee03 100644 --- a/hobo/multitenant/settings_loaders.py +++ b/hobo/multitenant/settings_loaders.py @@ -183,9 +183,10 @@ class TemplateVars(FileBaseSettingsLoader): tenant_settings.TEMPLATE_VARS[key] = value if variables.get('default_from_email'): - if variables.get('global_title'): + from_label = variables.get('email_sender_name') or variables.get('global_title') + if from_label: tenant_settings.DEFAULT_FROM_EMAIL = '"%s" <%s>' % ( - variables['global_title'].replace('"', ' '), variables['default_from_email']) + from_label.replace('"', ' '), variables['default_from_email']) else: tenant_settings.DEFAULT_FROM_EMAIL = variables['default_from_email'] diff --git a/tests/test_emails.py b/tests/test_emails.py index 09beef6..b87dbef 100644 --- a/tests/test_emails.py +++ b/tests/test_emails.py @@ -186,7 +186,9 @@ def test_emails_view(app, admin_user, dns_resolver, smtp_server, settings): resp.form['default_from_email'] = 'john.doe@example.com' resp.form['email_signature'] = 'my signature' resp.form['global_email_prefix'] = 'my prefix' + resp.form['email_sender_name'] = 'my name' resp = resp.form.submit() assert Variable.objects.filter(name='default_from_email')[0].value == 'john.doe@example.com' assert Variable.objects.filter(name='email_signature')[0].value == 'my signature' assert Variable.objects.filter(name='global_email_prefix')[0].value == 'my prefix' + assert Variable.objects.filter(name='email_sender_name')[0].value == 'my name' diff --git a/tests/test_settings_loaders.py b/tests/test_settings_loaders.py index eaafe40..5d2b46e 100644 --- a/tests/test_settings_loaders.py +++ b/tests/test_settings_loaders.py @@ -7,7 +7,7 @@ from django.conf import UserSettingsHolder from hobo.deploy.utils import get_hobo_json from hobo.environment.models import Authentic, Combo from hobo.multitenant.settings_loaders import Authentic as AuthenticLoader -from hobo.multitenant.settings_loaders import BackofficeLoginHint +from hobo.multitenant.settings_loaders import BackofficeLoginHint, TemplateVars from hobo.profile.models import AttributeDefinition pytestmark = pytest.mark.django_db @@ -98,3 +98,35 @@ def test_mellon_always_backoffice_login_hint_setting_from_path(tmpdir): loader = BackofficeLoginHint() loader.update_settings_from_path(tenant_settings, path) assert tenant_settings.MELLON_LOGIN_HINTS == ['always_backoffice'] + + +def test_email_update_settings_from_path(tmpdir): + tenant_settings = UserSettingsHolder({}) + loader = TemplateVars() + + def update_settings(env): + path = os.path.join(str(tmpdir), 'hobo.json') + json.dump(env, open(path, 'w')) + loader.update_settings_from_path(tenant_settings, path) + + tenant_settings.DEFAULT_FROM_EMAIL = 'webmaster@hobo.example.org' + env = {'services': [], 'variables': {}} + update_settings(env) + assert tenant_settings.DEFAULT_FROM_EMAIL == 'webmaster@hobo.example.org' + env['variables']['default_from_email'] = 'john.doe@example.com' + update_settings(env) + assert tenant_settings.DEFAULT_FROM_EMAIL == 'john.doe@example.com' + env['variables']['global_title'] = 'Publik' + update_settings(env) + assert tenant_settings.DEFAULT_FROM_EMAIL == '"Publik" ' + env['variables']['email_sender_name'] = 'Jhon Doe' + update_settings(env) + assert tenant_settings.DEFAULT_FROM_EMAIL == '"Jhon Doe" ' + env['variables']['default_from_email'] = 'foo@example.com' + update_settings(env) + assert tenant_settings.DEFAULT_FROM_EMAIL == '"Jhon Doe" ' + + # default_from_email needed for '"foo" ' address format + tenant_settings.DEFAULT_FROM_EMAIL = '' + update_settings({'services': [], 'variables': {'global_title': 'Publik'}}) + assert tenant_settings.DEFAULT_FROM_EMAIL == ''