Merge pull request #1300 from alphagov/inbound-sms-permission

Service setting for inbound sms
This commit is contained in:
Rebecca Law
2017-06-05 13:54:42 +01:00
committed by GitHub
6 changed files with 127 additions and 9 deletions

View File

@@ -49,6 +49,7 @@ def service_settings(service_id):
letter_branding=letter_branding_organisations.get(
current_service.get('dvla_organisation', '001')
),
can_receive_inbound=('inbound_sms' in current_service['permissions']),
letter_contact_block=Field(current_service['letter_contact_block'], html='escape')
)
@@ -267,14 +268,27 @@ def service_set_reply_to_email(service_id):
@user_has_permissions('manage_settings', admin_override=True)
def service_set_sms_sender(service_id):
form = ServiceSmsSender()
if form.validate_on_submit():
set_inbound_sms = request.args.get('set_inbound_sms', False)
if set_inbound_sms == 'True':
permissions = current_service['permissions']
if 'inbound_sms' in permissions:
permissions.remove('inbound_sms')
else:
permissions.append('inbound_sms')
service_api_client.update_service_with_properties(
current_service['id'],
{'permissions': permissions,
'sms_sender': form.sms_sender.data or None}
)
else:
service_api_client.update_service(
current_service['id'],
sms_sender=form.sms_sender.data or None
)
return redirect(url_for('.service_settings', service_id=service_id))
if request.method == 'GET':
form.sms_sender.data = current_service.get('sms_sender')
if form.validate_on_submit():
service_api_client.update_service(
current_service['id'],
sms_sender=form.sms_sender.data or None
)
return redirect(url_for('.service_settings', service_id=service_id))
return render_template(
'views/service-settings/set-sms-sender.html',
form=form)

View File

@@ -94,6 +94,7 @@ class ServiceAPIClient(NotifyAdminAPIClient):
'organisation',
'letter_contact_block',
'dvla_organisation',
'permissions'
}
if disallowed_attributes:
raise TypeError('Not allowed to update service attributes: {}'.format(

View File

@@ -37,7 +37,12 @@
{% call row() %}
{{ text_field('Text message sender') }}
{{ text_field(current_service.sms_sender) }}
{{ edit_field('Change', url_for('.service_set_sms_sender', service_id=current_service.id)) }}
{% if current_user.has_permissions([], admin_override=True) or not can_receive_inbound %}
{{ edit_field('Change', url_for('.service_set_sms_sender', service_id=current_service.id, set_inbound_sms=False)) }}
{% else %}
{{ text_field('') }}
{% endif %}
{% endcall %}
{% call row() %}
@@ -162,6 +167,11 @@
</a>
</li>
{% endif %}
<li class="bottom-gutter">
<a href="{{ url_for('.service_set_sms_sender', service_id=current_service.id, set_inbound_sms=True) }}" class="button">
{{ 'Stop inbound sms' if can_receive_inbound else 'Allow inbound sms' }}
</a>
</li>
</ul>
{% endif %}

View File

@@ -54,7 +54,8 @@ def service_json(
organisation=None,
branding='govuk',
created_at=None,
letter_contact_block=None
letter_contact_block=None,
permissions=[]
):
if users is None:
users = []
@@ -76,6 +77,7 @@ def service_json(
'created_at': created_at or str(datetime.utcnow()),
'letter_contact_block': letter_contact_block,
'dvla_organisation': '001',
'permissions': permissions,
}

View File

@@ -92,6 +92,22 @@ def test_if_cant_send_letters_then_cant_see_letter_contact_block(
assert 'Letter contact block' not in response.get_data(as_text=True)
def test_if_can_receive_inbound_then_cant_change_sms_sender(
logged_in_client,
service_one,
mock_get_letter_organisations,
):
service_one['permissions'] = ['inbound_sms']
service_one['sms_sender'] = 'SomeNumber'
response = logged_in_client.get(url_for(
'main.service_settings', service_id=service_one['id']
))
assert 'Text message sender SomeNumber Change' not in response.get_data(as_text=True)
assert url_for('.service_set_sms_sender', service_id=service_one['id'],
set_inbound_sms=False) not in response.get_data(as_text=True)
assert 'SomeNumber' in response.get_data(as_text=True)
def test_letter_contact_block_shows_none_if_not_set(
logged_in_client,
service_one,
@@ -615,6 +631,80 @@ def test_set_text_message_sender(
)
def test_set_text_message_sender_and_inbound_sms(
logged_in_client,
service_one,
mock_get_letter_organisations,
mocker,
):
service_one['permissions'] = []
update_service_mock = mocker.patch('app.service_api_client.update_service_with_properties',
return_value=service_one)
data = {"sms_sender": "elevenchars"}
response = logged_in_client.post(url_for('main.service_set_sms_sender', service_id=service_one['id'],
set_inbound_sms=True),
data=data,
follow_redirects=True)
assert response.status_code == 200
update_service_mock.assert_called_with(
service_one['id'],
{'permissions': ['inbound_sms'],
'sms_sender': "elevenchars"}
)
assert app.current_service['permissions'] == ['inbound_sms']
def test_turn_inbound_sms_off(
logged_in_client,
service_one,
mock_get_letter_organisations,
mocker,
):
service_one['permissions'] = ['inbound_sms']
update_service_mock = mocker.patch('app.service_api_client.update_service_with_properties',
return_value=service_one)
data = {"sms_sender": "elevenchars"}
response = logged_in_client.post(url_for('main.service_set_sms_sender', service_id=service_one['id'],
set_inbound_sms=True),
data=data,
follow_redirects=True)
assert response.status_code == 200
update_service_mock.assert_called_with(
service_one['id'],
{'permissions': [],
'sms_sender': "elevenchars"}
)
assert app.current_service['permissions'] == []
def test_set_text_message_sender_and_not_inbound_sms(
logged_in_client,
service_one,
mock_get_letter_organisations,
mocker,
):
service_one['permissions'] = []
update_service_mock = mocker.patch('app.service_api_client.update_service',
return_value=service_one)
data = {"sms_sender": "elevenchars"}
response = logged_in_client.post(url_for('main.service_set_sms_sender', service_id=service_one['id'],
set_inbound_sms=False),
data=data,
follow_redirects=True)
assert response.status_code == 200
update_service_mock.assert_called_with(
service_one['id'],
sms_sender="elevenchars"
)
assert app.current_service['permissions'] == []
@pytest.mark.parametrize('content, expected_error', [
("", "Cant be empty"),
("twelvecharss", "Enter 11 characters or fewer"),

View File

@@ -167,7 +167,8 @@ def mock_update_service(mocker):
'restricted',
'email_from',
'reply_to_email_address',
'sms_sender'
'sms_sender',
'permissions'
]}
)
return {'data': service}