newsletters: send user mobile phone when available (#20098)
This commit is contained in:
parent
8e1373022f
commit
c09f344d35
|
@ -23,7 +23,8 @@ from django.utils.translation import ugettext_lazy as _
|
|||
class NewslettersManageForm(forms.Form):
|
||||
def __init__(self, *args, **kwargs):
|
||||
logger = logging.getLogger(__name__)
|
||||
self.user = kwargs.pop('user')
|
||||
self.request = kwargs.pop('request')
|
||||
self.user = self.request.user
|
||||
self.instance = kwargs.pop('instance')
|
||||
self.themes = set()
|
||||
super(NewslettersManageForm, self).__init__(*args, **kwargs)
|
||||
|
@ -39,6 +40,10 @@ class NewslettersManageForm(forms.Form):
|
|||
self.params = {'email': self.user.email}
|
||||
if hasattr(self.user, 'saml_identifiers') and self.user.saml_identifiers.exists():
|
||||
self.params['uuid'] = self.user.saml_identifiers.first().name_id
|
||||
|
||||
# get mobile number from mellon session as it is not user attribute
|
||||
if self.request.session.get('mellon_session'):
|
||||
self.params['mobile'] = self.request.session['mellon_session'].get('mobile', '')
|
||||
try:
|
||||
subscriptions = self.instance.get_subscriptions(**self.params)
|
||||
except Exception, e:
|
||||
|
|
|
@ -139,6 +139,9 @@ class NewslettersCell(CellBase):
|
|||
|
||||
def set_subscriptions(self, subscriptions, **kwargs):
|
||||
logger = logging.getLogger(__name__)
|
||||
# uuid is mandatory to store subscriptions
|
||||
if 'uuid' not in kwargs:
|
||||
raise SubscriptionsSaveError
|
||||
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
|
||||
url = get_templated_url(self.url)
|
||||
try:
|
||||
|
@ -160,7 +163,7 @@ class NewslettersCell(CellBase):
|
|||
def render(self, context):
|
||||
user = context.get('user')
|
||||
if user and user.is_authenticated():
|
||||
form = NewslettersManageForm(instance=self, user=user)
|
||||
form = NewslettersManageForm(instance=self, request=context['request'])
|
||||
context['form'] = form
|
||||
return super(NewslettersCell, self).render(context)
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ class NewslettersView(FormView):
|
|||
def get_form_kwargs(self):
|
||||
kwargs = super(NewslettersView, self).get_form_kwargs()
|
||||
self.instance = NewslettersCell.objects.get(pk=self.kwargs['pk'])
|
||||
kwargs.update({'user': self.request.user, 'instance': self.instance})
|
||||
kwargs.update({'request': self.request, 'instance': self.instance})
|
||||
return kwargs
|
||||
|
||||
def form_invalid(self, form):
|
||||
|
|
|
@ -4,7 +4,6 @@ import pytest
|
|||
import mock
|
||||
import requests
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.template.defaultfilters import slugify
|
||||
|
||||
from combo.data.models import Page
|
||||
|
@ -152,6 +151,18 @@ def test_failed_set_subscriptions(mock_post, cell):
|
|||
with pytest.raises(SubscriptionsSaveError):
|
||||
cell.set_subscriptions(subscriptions, email=USER_EMAIL)
|
||||
|
||||
@mock.patch('combo.apps.newsletters.models.requests.post')
|
||||
def test_set_subscriptions_with_no_uuid(mocked_post, cell):
|
||||
restrictions = ('sms', 'mail')
|
||||
cell.transports_restrictions = ','.join(restrictions)
|
||||
subscriptions = [{'id': '1', 'transports': [{'id': 'mail', 'text': 'mail'}]},
|
||||
{'id': '8', 'transports': [{'id': 'sms', 'text': 'sms'},
|
||||
{'id': 'mail', 'text': 'mail'}]}]
|
||||
mock_json = mock.Mock()
|
||||
mock_json.json.return_value = {'err': 0, 'data': True}
|
||||
with pytest.raises(SubscriptionsSaveError):
|
||||
cell.set_subscriptions(subscriptions)
|
||||
|
||||
@mock.patch('combo.apps.newsletters.models.requests.post')
|
||||
def test_set_subscriptions(mock_post, cell):
|
||||
restrictions = ('sms', 'mail')
|
||||
|
@ -164,7 +175,28 @@ def test_set_subscriptions(mock_post, cell):
|
|||
mock_json.json.return_value = {'err': 0,
|
||||
'data': True}
|
||||
mock_post.return_value = mock_json
|
||||
cell.set_subscriptions(subscriptions, email=USER_EMAIL)
|
||||
cell.set_subscriptions(subscriptions, uuid='useruuid', email=USER_EMAIL)
|
||||
assert 'uuid=useruuid' in mock_post.call_args[0][0]
|
||||
|
||||
@mock.patch('combo.apps.newsletters.models.requests.get')
|
||||
def test_get_subscriptions_with_name_id_and_mobile(mock_get, cell):
|
||||
restrictions = ('sms', 'mail')
|
||||
cell.transports_restrictions = ','.join(restrictions)
|
||||
mock_json = mock.Mock()
|
||||
mock_json.json.return_value = {'err': 0,
|
||||
'data': NEWSLETTERS}
|
||||
mock_get.return_value = mock_json
|
||||
|
||||
fake_saml_request = mock.Mock()
|
||||
fake_saml_request.user = mock.Mock(email=USER_EMAIL)
|
||||
fake_saml_request.user.saml_identifiers = mock.Mock()
|
||||
fake_saml_request.user.saml_identifiers.exists.return_value = True
|
||||
fake_saml_request.user.saml_identifiers.first.return_value = mock.Mock(name_id='nameid')
|
||||
fake_saml_request.session = {'mellon_session': {'mobile': '0607080900'}}
|
||||
|
||||
form = NewslettersManageForm(instance=cell, request=fake_saml_request)
|
||||
assert 'uuid=nameid' in mock_get.call_args[0][0]
|
||||
assert 'mobile=0607080900' in mock_get.call_args[0][0]
|
||||
|
||||
def mocked_requests_get(*args, **kwargs):
|
||||
url = args[0]
|
||||
|
@ -190,8 +222,9 @@ def test_subscriptions_form(mock_get, cell):
|
|||
cell.transports_restrictions = ','.join(restrictions)
|
||||
newsletters = [n['id'] for n in cell.get_newsletters()]
|
||||
subscriptions = [s['id'] for s in cell.get_subscriptions()]
|
||||
form = NewslettersManageForm(instance=cell,
|
||||
user=User(email=USER_EMAIL))
|
||||
fake_request = mock.Mock(user=mock.Mock(username='username', email=USER_EMAIL),
|
||||
session={})
|
||||
form = NewslettersManageForm(instance=cell, request=fake_request)
|
||||
# test if all newsletters are present
|
||||
for f_id, field in form.fields.iteritems():
|
||||
assert f_id in newsletters
|
||||
|
|
Loading…
Reference in New Issue