From 332bfb87bc127dfb5920894de283e06b68650c20 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Thu, 9 Aug 2018 11:28:50 +0100 Subject: [PATCH] Correctly handle email signups if mailchimp not configured --- opentech/public/mailchimp/tests.py | 11 +++++++- opentech/public/mailchimp/views.py | 26 ++++++++++++++++--- .../src/sass/public/components/_messages.scss | 2 +- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/opentech/public/mailchimp/tests.py b/opentech/public/mailchimp/tests.py index 660e53682..4e8387121 100644 --- a/opentech/public/mailchimp/tests.py +++ b/opentech/public/mailchimp/tests.py @@ -7,6 +7,9 @@ from django.urls import reverse import responses +any_url = re.compile(".") + + class TestNewsletterView(TestCase): url = reverse('newsletter:subscribe') @@ -19,7 +22,14 @@ class TestNewsletterView(TestCase): request = response.request self.assertRedirects(response, '{}://{}/'.format(request['wsgi.url_scheme'], request['SERVER_NAME'])) + @override_settings( + MAILCHIMP_API_KEY='a' * 32, + MAILCHIMP_LIST_ID='12345' + ) + @responses.activate def test_can_subscribe(self): + responses.add(responses.POST, any_url, json={'id': '1234'}, status=200) + response = self.client.post(self.url, data={'email': 'email@email.com'}, secure=True, follow=True) self.assertRedirects(response, self.origin) @@ -42,7 +52,6 @@ class TestNewsletterView(TestCase): @responses.activate @mock.patch('opentech.public.mailchimp.views.logging') def test_error_with_mailchimp(self, logging): - any_url = re.compile(".") # Copied from the mailchimp playground response_data = { "title": "Invalid Resource", diff --git a/opentech/public/mailchimp/views.py b/opentech/public/mailchimp/views.py index e06f1263d..19a7f6795 100644 --- a/opentech/public/mailchimp/views.py +++ b/opentech/public/mailchimp/views.py @@ -28,7 +28,7 @@ class MailchimpSubscribeView(FormMixin, RedirectView): return self.form_invalid(form) def form_invalid(self, form): - messages.error(self.request, _('Sorry, there were errors with your form.') + str(form.errors)) + self.error(form) return HttpResponseRedirect(self.get_success_url()) def form_valid(self, form): @@ -51,12 +51,30 @@ class MailchimpSubscribeView(FormMixin, RedirectView): 'merge_fields': data, }) except Exception as e: - messages.warning(self.request, _('Sorry, there has been an problem. Please try again later.')) - logging.info(e.args[0]) + self.warning(e) else: - messages.success(self.request, _('Thank you for subscribing')) + if mailchimp_enabled: + self.success() + else: + self.warning(Exception( + 'Incorrect Mailchimp configuration: API_KEY: {}, LIST_ID: {}'.format( + str(settings.MAILCHIMP_API_KEY), + str(settings.MAILCHIMP_LIST_ID), + ) + )) + return super().form_valid(form) + def error(self, form): + messages.error(self.request, _('Sorry, there were errors with your form.') + str(form.errors)) + + def warning(self, e): + messages.warning(self.request, _('Sorry, there has been an problem. Please try again later.')) + logging.info(e.args[0]) + + def success(self): + messages.success(self.request, _('Thank you for subscribing')) + def get_success_url(self): # Go back to where you came from return self.request.META['HTTP_ORIGIN'] diff --git a/opentech/static_src/src/sass/public/components/_messages.scss b/opentech/static_src/src/sass/public/components/_messages.scss index 8df0d9785..a732b3c02 100644 --- a/opentech/static_src/src/sass/public/components/_messages.scss +++ b/opentech/static_src/src/sass/public/components/_messages.scss @@ -18,7 +18,7 @@ border-color: darken($color--mint, 20%); } - &--warning { + &--warning, &--error { font-weight: bold; color: $color--white; background: $color--error; -- GitLab