Use fixtures for callbacks in a Pytest 5 compatible way

This commit is contained in:
Katie Smith
2020-01-07 11:44:35 +00:00
parent a3978f8a5f
commit 68983a21d2
2 changed files with 121 additions and 98 deletions

View File

@@ -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 {

View File

@@ -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', [