diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index fc68c650f..e886efc93 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -359,21 +359,34 @@ def service_set_sms_sender(service_id): @login_required @user_has_permissions('manage_settings', admin_override=True) def service_set_inbound_number(service_id): - inbound_number = inbound_number_client.get_inbound_sms_number_for_service(service_id) + new_number = False - if inbound_number['data'] == '' or inbound_number['data'] is None: - inbound_number = inbound_number_client.get_available_inbound_number(service_id) + inbound_number = inbound_number_client.get_inbound_sms_number_for_service(service_id) + + if inbound_number['data'] is None: + + inbound_number = inbound_number_client.get_available_inbound_number() + # if (inbound_number['data'] is None): + if (inbound_number['data'] is []): + # either return 404 or 400 or return a message to the html + + new_number = True if request.method == 'POST': - switch_service_permissions(current_service['id'], 'inbound_sms') - if new_number: - inbound_number_client.activate_inbound_sms_service(service_id, inbound_number['data']['id']) - return redirect(url_for('.service_settings', service_id=service_id)) - else: - inbound_number_client.reactivate_inbound_sms_service(inbound_number['data']['id']) - return redirect(url_for('.service_settings', service_id=service_id)) + try: + switch_service_permissions(current_service['id'], 'inbound_sms') + if new_number: + inbound_number_client.activate_inbound_sms_service(service_id, inbound_number['data']['id']) + return redirect(url_for('.service_settings', service_id=service_id)) + else: + inbound_number_client.reactivate_inbound_sms_service(inbound_number['data']['id']) + return redirect(url_for('.service_settings', service_id=service_id)) + + except HTTPError as e: + raise e + return render_template( 'views/service-settings/confirm-inbound-number.html', diff --git a/app/notify_client/inbound_number_client.py b/app/notify_client/inbound_number_client.py index 79e558471..601bfb6f4 100644 --- a/app/notify_client/inbound_number_client.py +++ b/app/notify_client/inbound_number_client.py @@ -11,20 +11,25 @@ class InboundNumberClient(NotifyAdminAPIClient): self.api_key = app.config['ADMIN_CLIENT_SECRET'] def get_all_inbound_sms_number_service(self): - endpoint = '/inbound_number' - return self.get(endpoint) + + return self.get('/inbound_number') def get_inbound_sms_number_for_service(self, service_id): return self.get('/inbound_number/service/{}'.format(service_id)) - def activate_inbound_sms_service(self, service_id, inbound_number_id): - return self.post(url='/inbound_number/{}/service/{}'.format(inbound_number_id, service_id), data={}) + # def activate_inbound_sms_service(self, service_id, inbound_number_id): + # return self.post(url='/inbound_number/{}/service/{}'.format(inbound_number_id, service_id), data={}) def reactivate_inbound_sms_service(self, inbound_number_id): + try: + + + catch: + return self.post(url='/inbound_number/{}/on'.format(inbound_number_id), data={}) def deactivate_inbound_sms_permission(self, inbound_number_id): return self.post(url='/inbound_number/{}/off'.format(inbound_number_id), data={}) - def get_available_inbound_number(self): - return self.get(url='/inbound_number/available'.format()) + # def get_available_inbound_number(self): + # return self.get(url='/inbound_number/available'.format()) diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index 9a3e57ba3..aba7172e1 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -807,7 +807,7 @@ def test_if_currently_inbound_number_is_none( assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True) mocker_get_inbound_number_fun.assert_called_once_with(service_one['id']) - mocker_get_available_inbound_number_fun.assert_called_once_with(service_one['id']) + mocker_get_available_inbound_number_fun.assert_called_once_with() mocker_get_activate_inbound_number_fun.assert_called_once_with(service_one['id'], 'some_uuid') @@ -824,8 +824,7 @@ def test_if_currently_inbound_number_is_not_empty( mocker_get_reactivate_inbound_number_fun = mocker.patch( 'app.inbound_number_client.reactivate_inbound_sms_service') - response = logged_in_client.post(url_for('main.service_set_inbound_number', service_id=service_one['id']), - ) + response = logged_in_client.post(url_for('main.service_set_inbound_number', service_id=service_one['id']),) assert response.status_code == 302 assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True) @@ -834,6 +833,33 @@ def test_if_currently_inbound_number_is_not_empty( mocker_get_reactivate_inbound_number_fun.assert_called_once_with('some_uuid') +def test_no_inbound_number_available( + logged_in_client, + mock_update_service, + service_one, + mocker +): + mocker_get_inbound_number_fun = mocker.patch( + 'app.inbound_number_client.get_inbound_sms_number_for_service', + return_value={'data': None}) + + mocker_get_available_inbound_number_fun = mocker.patch( + 'app.inbound_number_client.get_available_inbound_number', + return_value=Mock('something', + status_code=400, + json=lambda: { + } + )) + + response = logged_in_client.get(url_for('main.service_set_inbound_number', service_id=service_one['id']), + ) + + assert response.status_code == 400 + + # mocker_get_inbound_number_fun.assert_called_once_with(service_one['id']) + # mocker_get_available_inbound_number_fun.assert_called_once_with() + + def test_set_text_message_sender_and_inbound_sms( logged_in_client, service_one,