mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-05 06:01:46 -04:00
Make service API client do partial updates
The service API client was updating every attribute of a service. Which, while kinda clunky, is fine… …until something calling it doesn’t pass in every attribute of the current service. It was then defaulting optional parameters to `None`. Which resulted in a bug whereby every time a service was set to live, its `reply_to_address` and `sms_sender_name` got overwritten to be empty. This commit changes the `update` method to only require the service ID, and pass whatever other named arguments it received straight through to the API. The API handles partial updates just fine (I think).
This commit is contained in:
@@ -40,15 +40,17 @@ def created_by_json(id_, name='', email_address=''):
|
||||
|
||||
|
||||
def service_json(
|
||||
id_,
|
||||
name,
|
||||
users,
|
||||
message_limit=1000,
|
||||
active=False,
|
||||
restricted=True,
|
||||
email_from=None,
|
||||
reply_to_email_address=None,
|
||||
research_mode=False):
|
||||
id_,
|
||||
name,
|
||||
users,
|
||||
message_limit=1000,
|
||||
active=False,
|
||||
restricted=True,
|
||||
email_from=None,
|
||||
reply_to_email_address=None,
|
||||
sms_sender=None,
|
||||
research_mode=False
|
||||
):
|
||||
return {
|
||||
'id': id_,
|
||||
'name': name,
|
||||
@@ -58,6 +60,7 @@ def service_json(
|
||||
'restricted': restricted,
|
||||
'email_from': email_from,
|
||||
'reply_to_email_address': reply_to_email_address,
|
||||
'sms_sender': sms_sender,
|
||||
'research_mode': research_mode
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,11 @@ def test_switch_service_to_live(app_,
|
||||
assert response.location == url_for(
|
||||
'main.service_settings',
|
||||
service_id=service_one['id'], _external=True)
|
||||
mock_update_service.assert_called_with(ANY, ANY, ANY, 250000, False, ANY, ANY)
|
||||
mock_update_service.assert_called_with(
|
||||
service_one['id'],
|
||||
message_limit=250000,
|
||||
restricted=False
|
||||
)
|
||||
|
||||
|
||||
def test_switch_service_to_restricted(app_,
|
||||
@@ -100,7 +104,11 @@ def test_switch_service_to_restricted(app_,
|
||||
assert response.location == url_for(
|
||||
'main.service_settings',
|
||||
service_id=service_one['id'], _external=True)
|
||||
mock_update_service.assert_called_with(ANY, ANY, ANY, 50, True, ANY, ANY)
|
||||
mock_update_service.assert_called_with(
|
||||
service_one['id'],
|
||||
message_limit=50,
|
||||
restricted=True
|
||||
)
|
||||
|
||||
|
||||
def test_should_not_allow_duplicate_names(app_,
|
||||
@@ -159,13 +167,11 @@ def test_should_redirect_after_service_name_confirmation(app_,
|
||||
assert response.status_code == 302
|
||||
settings_url = url_for('main.service_settings', service_id=service_id, _external=True)
|
||||
assert settings_url == response.location
|
||||
mock_update_service.assert_called_once_with(service_id,
|
||||
service_new_name,
|
||||
service_one['active'],
|
||||
service_one['message_limit'],
|
||||
service_one['restricted'],
|
||||
service_one['users'],
|
||||
email_safe(service_new_name))
|
||||
mock_update_service.assert_called_once_with(
|
||||
service_id,
|
||||
name=service_new_name,
|
||||
email_from=email_safe(service_new_name)
|
||||
)
|
||||
assert mock_verify_password.called
|
||||
|
||||
|
||||
@@ -564,14 +570,10 @@ def test_set_reply_to_email_address(
|
||||
data=data,
|
||||
follow_redirects=True)
|
||||
assert response.status_code == 200
|
||||
mock_update_service.assert_called_with(service_one['id'],
|
||||
service_one['name'],
|
||||
service_one['active'],
|
||||
service_one['message_limit'],
|
||||
service_one['restricted'],
|
||||
ANY,
|
||||
service_one['email_from'],
|
||||
"test@someservice.gov.uk")
|
||||
mock_update_service.assert_called_with(
|
||||
service_one['id'],
|
||||
reply_to_email_address="test@someservice.gov.uk"
|
||||
)
|
||||
|
||||
|
||||
def test_if_reply_to_email_address_set_then_form_populated(app_,
|
||||
@@ -710,15 +712,10 @@ def test_set_text_message_sender(
|
||||
follow_redirects=True)
|
||||
assert response.status_code == 200
|
||||
|
||||
mock_update_service.assert_called_with(service_one['id'],
|
||||
service_one['name'],
|
||||
service_one['active'],
|
||||
service_one['message_limit'],
|
||||
service_one['restricted'],
|
||||
service_one['users'],
|
||||
service_one['email_from'],
|
||||
service_one['reply_to_email_address'],
|
||||
"elevenchars")
|
||||
mock_update_service.assert_called_with(
|
||||
service_one['id'],
|
||||
sms_sender="elevenchars"
|
||||
)
|
||||
|
||||
|
||||
def test_if_sms_sender_set_then_form_populated(app_,
|
||||
|
||||
@@ -125,18 +125,20 @@ def mock_create_service(mocker):
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_update_service(mocker):
|
||||
def _update(service_id,
|
||||
service_name,
|
||||
active,
|
||||
message_limit,
|
||||
restricted,
|
||||
users,
|
||||
email_from,
|
||||
reply_to_email_address=None,
|
||||
sms_sender=None):
|
||||
def _update(service_id, **kwargs):
|
||||
service = service_json(
|
||||
service_id, service_name, users, message_limit=message_limit,
|
||||
active=active, restricted=restricted, email_from=email_from, reply_to_email_address=reply_to_email_address)
|
||||
service_id,
|
||||
**{key: kwargs.get(key) for key in [
|
||||
'name',
|
||||
'users',
|
||||
'message_limit',
|
||||
'active',
|
||||
'restricted',
|
||||
'email_from',
|
||||
'reply_to_email_address',
|
||||
'sms_sender'
|
||||
]}
|
||||
)
|
||||
return {'data': service}
|
||||
|
||||
return mocker.patch(
|
||||
@@ -145,14 +147,11 @@ def mock_update_service(mocker):
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_update_service_raise_httperror_duplicate_name(mocker):
|
||||
def _update(service_id,
|
||||
service_name,
|
||||
active,
|
||||
limit,
|
||||
restricted,
|
||||
users,
|
||||
email_from):
|
||||
json_mock = Mock(return_value={'message': {'name': ["Duplicate service name '{}'".format(service_name)]}})
|
||||
def _update(
|
||||
service_id,
|
||||
**kwargs
|
||||
):
|
||||
json_mock = Mock(return_value={'message': {'name': ["Duplicate service name '{}'".format(kwargs.get('name'))]}})
|
||||
resp_mock = Mock(status_code=400, json=json_mock)
|
||||
http_error = HTTPError(response=resp_mock, message="Default message")
|
||||
raise http_error
|
||||
|
||||
Reference in New Issue
Block a user