diff --git a/bedrock/newsletter/tests/test_views.py b/bedrock/newsletter/tests/test_views.py index c9c1ded553e..c59b5826112 100644 --- a/bedrock/newsletter/tests/test_views.py +++ b/bedrock/newsletter/tests/test_views.py @@ -443,7 +443,20 @@ def test_normal(self): confirm.return_value = {'status': 'ok'} rsp = self.client.get(self.url) self.assertEqual(302, rsp.status_code) - self.assertTrue(rsp['Location'].endswith("%s?confirm=1" % reverse('newsletter.existing.token', kwargs={'token': self.token}))) + self.assertTrue(rsp['Location'].endswith("%s?confirm=1" % + reverse('newsletter.existing.token', + kwargs={'token': self.token}))) + + def test_normal_with_query_params(self): + """Confirm works with a valid token""" + with patch('basket.confirm') as confirm: + confirm.return_value = {'status': 'ok'} + rsp = self.client.get(self.url + '?utm_tracking=oh+definitely+yes&utm_source=malibu') + self.assertEqual(302, rsp.status_code) + self.assertTrue(rsp['Location'].endswith("%s?confirm=1&utm_tracking=oh+definitely+yes&" + "utm_source=malibu" % + reverse('newsletter.existing.token', + kwargs={'token': self.token}))) def test_basket_down(self): """If basket is down, we report the appropriate error""" diff --git a/bedrock/newsletter/views.py b/bedrock/newsletter/views.py index 2551ccd8bf4..595dfacc414 100644 --- a/bedrock/newsletter/views.py +++ b/bedrock/newsletter/views.py @@ -218,7 +218,13 @@ def confirm(request, token): # Assume rate limit error means user already confirmed and clicked confirm # link twice in quick succession if success or rate_limit_error: - return HttpResponseRedirect("%s?confirm=1" % reverse('newsletter.existing.token', kwargs={'token': token})) + qparams = ['confirm=1'] + qs = request.META.get('QUERY_STRING', '') + if qs: + qparams.append(qs) + return HttpResponseRedirect("%s?%s" % (reverse('newsletter.existing.token', + kwargs={'token': token}), + '&'.join(qparams))) else: return l10n_utils.render( request,