diff --git a/opentech/public/mailchimp/tests.py b/opentech/public/mailchimp/tests.py index 660e53682013e8da00dfe3c8d176bb95dfb41566..4e838712116aa9e1e3ef5ebae892e6706f7b1d64 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 e06f1263da184561ac03e2373f59e427052bac81..19a7f6795851dc2bbf029d4035a9e7772b9ee436 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 8df0d97850c24e8266b26c44c9bc8134b90e6ab1..a732b3c02c88324a2409d84b2ed4c7136d6bd1db 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;