diff --git a/tests/__init__.py b/tests/__init__.py index 06ecf9c75..a8df289c4 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -150,6 +150,8 @@ def service_json( users = [] if permissions is None: permissions = ['email', 'sms'] + if service_callback_api is None: + service_callback_api = [] if inbound_api is None: inbound_api = [] return { diff --git a/tests/app/main/views/test_api_integration.py b/tests/app/main/views/test_api_integration.py index eb078db7c..5254f3ee2 100644 --- a/tests/app/main/views/test_api_integration.py +++ b/tests/app/main/views/test_api_integration.py @@ -1,7 +1,6 @@ import uuid from collections import OrderedDict from unittest.mock import call -from uuid import uuid4 import pytest from flask import url_for @@ -9,11 +8,7 @@ from flask import url_for from tests import sample_uuid, validate_route_permission from tests.conftest import ( SERVICE_ONE_ID, - mock_get_empty_service_callback_api, - mock_get_empty_service_inbound_api, mock_get_notifications, - mock_get_valid_service_callback_api, - mock_get_valid_service_inbound_api, normalize_spaces, ) @@ -522,16 +517,6 @@ def test_callback_forms_validation( assert error_msgs == expected_errors -@pytest.mark.parametrize('existing_values, callback_ids, delete_should_be_called', [ - (( - mock_get_valid_service_callback_api, - mock_get_valid_service_inbound_api, - ), [uuid4()], True), - (( - mock_get_empty_service_callback_api, - mock_get_empty_service_inbound_api, - ), [], False), -]) @pytest.mark.parametrize('bearer_token', ['', 'some-bearer-token']) @pytest.mark.parametrize('endpoint, expected_delete_url', [ ( @@ -546,22 +531,18 @@ def test_callback_forms_validation( def test_callback_forms_can_be_cleared( client_request, service_one, - existing_values, - callback_ids, - delete_should_be_called, endpoint, expected_delete_url, bearer_token, mocker, + fake_uuid, + mock_get_valid_service_callback_api, + mock_get_valid_service_inbound_api, ): - - service_one['service_callback_api'] = callback_ids - service_one['inbound_api'] = callback_ids - mocked_delete = mocker.patch('app.service_api_client.delete') - for mock_get_callback in existing_values: - mock_get_callback(mocker) - + service_one['service_callback_api'] = [fake_uuid] + service_one['inbound_api'] = [fake_uuid] service_one['permissions'] = ['inbound_sms'] + mocked_delete = mocker.patch('app.service_api_client.delete') page = client_request.post( endpoint, @@ -579,14 +560,53 @@ def test_callback_forms_can_be_cleared( assert not page.select(".error-message") - if delete_should_be_called: - mocked_delete.assert_called_once_with( - expected_delete_url.format( - service_one['id'], callback_ids[0] - ) + mocked_delete.assert_called_once_with( + expected_delete_url.format( + service_one['id'], fake_uuid ) - else: - assert mocked_delete.call_args_list == [] + ) + + +@pytest.mark.parametrize('bearer_token', ['', 'some-bearer-token']) +@pytest.mark.parametrize('endpoint, expected_delete_url', [ + ( + 'main.delivery_status_callback', + '/service/{}/delivery-receipt-api/{}', + ), + ( + 'main.received_text_messages_callback', + '/service/{}/inbound-api/{}', + ), +]) +def test_callback_forms_can_be_cleared_when_callback_and_inbound_apis_are_empty( + client_request, + service_one, + endpoint, + expected_delete_url, + bearer_token, + mocker, + mock_get_empty_service_callback_api, + mock_get_empty_service_inbound_api, +): + service_one['permissions'] = ['inbound_sms'] + mocked_delete = mocker.patch('app.service_api_client.delete') + + page = client_request.post( + endpoint, + service_id=service_one['id'], + _data={ + 'url': '', + 'bearer_token': bearer_token, + }, + _expected_redirect=url_for( + 'main.api_callbacks', + service_id=service_one['id'], + _external=True, + ) + ) + + assert not page.select(".error-message") + assert mocked_delete.call_args_list == [] @pytest.mark.parametrize('has_inbound_sms, expected_link', [ @@ -699,28 +719,14 @@ def test_create_delivery_status_and_receive_text_message_callbacks( ) -@pytest.mark.parametrize('endpoint, fixture', [ - ('main.delivery_status_callback', mock_get_valid_service_callback_api), - ('main.received_text_messages_callback', mock_get_valid_service_inbound_api), -]) -def test_update_delivery_status_and_receive_text_message_callbacks( +def test_update_delivery_status_callback_details( client_request, service_one, - mocker, - mock_get_notifications, - mock_update_service_inbound_api, mock_update_service_callback_api, - endpoint, - fixture, + mock_get_valid_service_callback_api, fake_uuid, ): - if endpoint == 'main.received_text_messages_callback': - service_one['inbound_api'] = [fake_uuid] - service_one['permissions'] = ['inbound_sms'] - else: - service_one['service_callback_api'] = [fake_uuid] - - fixture(mocker) + service_one['service_callback_api'] = [fake_uuid] data = { 'url': "https://test.url.com/", @@ -729,73 +735,88 @@ def test_update_delivery_status_and_receive_text_message_callbacks( } client_request.post( - endpoint, + 'main.delivery_status_callback', service_id=service_one['id'], _data=data, ) - if endpoint == 'main.received_text_messages_callback': - mock_update_service_inbound_api.assert_called_once_with( - service_one['id'], - url="https://test.url.com/", - bearer_token="1234567890", - user_id=fake_uuid, - inbound_api_id=fake_uuid, - ) - else: - mock_update_service_callback_api.assert_called_once_with( - service_one['id'], - url="https://test.url.com/", - bearer_token="1234567890", - user_id=fake_uuid, - callback_api_id=fake_uuid - ) + mock_update_service_callback_api.assert_called_once_with( + service_one['id'], + url="https://test.url.com/", + bearer_token="1234567890", + user_id=fake_uuid, + callback_api_id=fake_uuid + ) -@pytest.mark.parametrize('endpoint, data, fixture', [ - ( - 'main.delivery_status_callback', - {"url": "https://hello2.gov.uk", "bearer_token": "bearer_token_set"}, - mock_get_valid_service_callback_api - ), - ( - 'main.received_text_messages_callback', - {"url": "https://hello3.gov.uk", "bearer_token": "bearer_token_set"}, - mock_get_valid_service_inbound_api - ), -]) -def test_update_delivery_status_and_receive_text_message_callbacks_without_changes_do_not_update( +def test_update_receive_text_message_callback_details( client_request, service_one, - mocker, - mock_get_notifications, - mock_update_service_callback_api, mock_update_service_inbound_api, - data, - fixture, - endpoint, + mock_get_valid_service_inbound_api, fake_uuid, ): - if endpoint == 'main.received_text_messages_callback': - service_one['inbound_api'] = [fake_uuid] - service_one['permissions'] = ['inbound_sms'] - else: - service_one['service_callback_api'] = [fake_uuid] + service_one['inbound_api'] = [fake_uuid] + service_one['permissions'] = ['inbound_sms'] - fixture(mocker) - - data['user_id'] = fake_uuid + data = { + 'url': "https://test.url.com/", + 'bearer_token': '1234567890', + 'user_id': fake_uuid + } client_request.post( - endpoint, + 'main.received_text_messages_callback', service_id=service_one['id'], _data=data, ) - if endpoint == 'main.received_text_messages_callback': - assert mock_update_service_inbound_api.called is False - else: - assert mock_update_service_callback_api.called is False + mock_update_service_inbound_api.assert_called_once_with( + service_one['id'], + url="https://test.url.com/", + bearer_token="1234567890", + user_id=fake_uuid, + inbound_api_id=fake_uuid, + ) + + +def test_update_delivery_status_callback_without_changes_does_not_update( + client_request, + service_one, + mock_update_service_callback_api, + fake_uuid, + mock_get_valid_service_callback_api, +): + service_one['service_callback_api'] = [fake_uuid] + data = {"user_id": fake_uuid, "url": "https://hello2.gov.uk", "bearer_token": "bearer_token_set"} + + client_request.post( + 'main.delivery_status_callback', + service_id=service_one['id'], + _data=data, + ) + + assert mock_update_service_callback_api.called is False + + +def test_update_receive_text_message_callback_without_changes_does_not_update( + client_request, + service_one, + mock_update_service_inbound_api, + fake_uuid, + mock_get_valid_service_inbound_api, +): + service_one['inbound_api'] = [fake_uuid] + service_one['permissions'] = ['inbound_sms'] + data = {"user_id": fake_uuid, "url": "https://hello3.gov.uk", "bearer_token": "bearer_token_set"} + + client_request.post( + 'main.received_text_messages_callback', + service_id=service_one['id'], + _data=data, + ) + + assert mock_update_service_inbound_api.called is False @pytest.mark.parametrize('service_callback_api, delivery_url, expected_1st_table_row', [