mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-19 14:08:47 -04:00
remove broadcast-related code, except migrations
This commit is contained in:
@@ -18,7 +18,6 @@ from app.dao.services_dao import (
|
||||
from app.dao.templates_dao import dao_redact_template
|
||||
from app.dao.users_dao import save_model_user
|
||||
from app.models import (
|
||||
BROADCAST_TYPE,
|
||||
EMAIL_AUTH_TYPE,
|
||||
EMAIL_TYPE,
|
||||
INBOUND_SMS_TYPE,
|
||||
@@ -38,7 +37,6 @@ from app.models import (
|
||||
Notification,
|
||||
Permission,
|
||||
Service,
|
||||
ServiceBroadcastSettings,
|
||||
ServiceEmailReplyTo,
|
||||
ServiceLetterContact,
|
||||
ServicePermission,
|
||||
@@ -250,16 +248,12 @@ def test_get_service_by_id(admin_request, sample_service):
|
||||
assert not json_resp['data']['research_mode']
|
||||
assert json_resp['data']['email_branding'] is None
|
||||
assert json_resp['data']['prefix_sms'] is True
|
||||
assert json_resp['data']['allowed_broadcast_provider'] is None
|
||||
assert json_resp['data']['broadcast_channel'] is None
|
||||
|
||||
assert set(json_resp['data'].keys()) == {
|
||||
'active',
|
||||
'allowed_broadcast_provider',
|
||||
'billing_contact_email_addresses',
|
||||
'billing_contact_names',
|
||||
'billing_reference',
|
||||
'broadcast_channel',
|
||||
'consent_to_research',
|
||||
'contact_link',
|
||||
'count_as_live',
|
||||
@@ -289,28 +283,6 @@ def test_get_service_by_id(admin_request, sample_service):
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize('broadcast_channel,allowed_broadcast_provider', (
|
||||
('operator', 'all'),
|
||||
('test', 'all'),
|
||||
('severe', 'all'),
|
||||
('government', 'all'),
|
||||
('operator', 'o2'),
|
||||
('test', 'ee'),
|
||||
('severe', 'three'),
|
||||
('government', 'vodafone'),
|
||||
))
|
||||
def test_get_service_by_id_for_broadcast_service_returns_broadcast_keys(
|
||||
notify_db_session, admin_request, sample_broadcast_service, broadcast_channel, allowed_broadcast_provider
|
||||
):
|
||||
sample_broadcast_service.broadcast_channel = broadcast_channel
|
||||
sample_broadcast_service.allowed_broadcast_provider = allowed_broadcast_provider
|
||||
|
||||
json_resp = admin_request.get('service.get_service_by_id', service_id=sample_broadcast_service.id)
|
||||
assert json_resp['data']['id'] == str(sample_broadcast_service.id)
|
||||
assert json_resp['data']['allowed_broadcast_provider'] == allowed_broadcast_provider
|
||||
assert json_resp['data']['broadcast_channel'] == broadcast_channel
|
||||
|
||||
|
||||
@pytest.mark.parametrize('detailed', [True, False])
|
||||
def test_get_service_by_id_returns_organisation_type(admin_request, sample_service, detailed):
|
||||
json_resp = admin_request.get('service.get_service_by_id', service_id=sample_service.id, detailed=detailed)
|
||||
@@ -1000,7 +972,6 @@ def test_update_service_permissions_will_add_service_permissions(client, sample_
|
||||
(LETTER_TYPE),
|
||||
(INBOUND_SMS_TYPE),
|
||||
(EMAIL_AUTH_TYPE),
|
||||
(BROADCAST_TYPE), # TODO: remove this ability to set broadcast permission this way
|
||||
]
|
||||
)
|
||||
def test_add_service_permission_will_add_permission(client, service_with_no_permissions, permission_to_add):
|
||||
@@ -3728,496 +3699,3 @@ def test_get_returned_letter(admin_request, sample_letter_template):
|
||||
assert not response[4]['original_file_name']
|
||||
assert not response[4]['job_row_number']
|
||||
assert response[4]['uploaded_letter_file_name'] == 'filename.pdf'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('channel', ["operator", "test", "severe", "government"])
|
||||
def test_set_as_broadcast_service_sets_broadcast_channel(
|
||||
admin_request, sample_service, broadcast_organisation, channel
|
||||
):
|
||||
assert sample_service.service_broadcast_settings is None
|
||||
data = {
|
||||
'broadcast_channel': channel,
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['name'] == 'Sample service'
|
||||
assert result['data']['broadcast_channel'] == channel
|
||||
|
||||
records = ServiceBroadcastSettings.query.filter_by(service_id=sample_service.id).all()
|
||||
assert len(records) == 1
|
||||
assert records[0].service_id == sample_service.id
|
||||
assert records[0].channel == channel
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_updates_channel_for_broadcast_service(
|
||||
admin_request, sample_broadcast_service
|
||||
):
|
||||
assert sample_broadcast_service.broadcast_channel == "severe"
|
||||
|
||||
data = {
|
||||
'broadcast_channel': "test",
|
||||
'service_mode': 'training',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_broadcast_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['name'] == 'Sample broadcast service'
|
||||
assert result['data']['broadcast_channel'] == "test"
|
||||
|
||||
records = ServiceBroadcastSettings.query.filter_by(service_id=sample_broadcast_service.id).all()
|
||||
assert len(records) == 1
|
||||
assert records[0].service_id == sample_broadcast_service.id
|
||||
assert records[0].channel == "test"
|
||||
|
||||
|
||||
@pytest.mark.parametrize('channel', ["extreme", "exercise", "random", ""])
|
||||
def test_set_as_broadcast_service_rejects_unknown_channels(
|
||||
admin_request, sample_service, broadcast_organisation, channel
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': channel,
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
_expected_status=400,
|
||||
)
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_rejects_if_no_channel(
|
||||
admin_request, notify_db_session, sample_service, broadcast_organisation
|
||||
):
|
||||
data = {
|
||||
'service_mode': 'training',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
_expected_status=400,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('starting_permissions, ending_permissions', (
|
||||
([], [BROADCAST_TYPE]),
|
||||
([EMAIL_AUTH_TYPE], [BROADCAST_TYPE, EMAIL_AUTH_TYPE]),
|
||||
([p for p in SERVICE_PERMISSION_TYPES if p != BROADCAST_TYPE], [BROADCAST_TYPE, EMAIL_AUTH_TYPE]),
|
||||
))
|
||||
def test_set_as_broadcast_service_gives_broadcast_permission_and_removes_other_channel_permissions(
|
||||
admin_request, broadcast_organisation, starting_permissions, ending_permissions
|
||||
):
|
||||
sample_service = create_service(service_permissions=starting_permissions)
|
||||
data = {
|
||||
'broadcast_channel': "severe",
|
||||
'service_mode': 'training',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert set(result['data']['permissions']) == set(ending_permissions)
|
||||
|
||||
permissions = ServicePermission.query.filter_by(service_id=sample_service.id).all()
|
||||
assert set([p.permission for p in permissions]) == set(ending_permissions)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('has_email_auth, ending_permissions', (
|
||||
(False, [BROADCAST_TYPE]),
|
||||
(True, [BROADCAST_TYPE, EMAIL_AUTH_TYPE]),
|
||||
))
|
||||
def test_set_as_broadcast_service_maintains_broadcast_permission_for_existing_broadcast_service(
|
||||
admin_request, sample_broadcast_service, has_email_auth, ending_permissions
|
||||
):
|
||||
if has_email_auth:
|
||||
service_permission = ServicePermission(service_id=sample_broadcast_service.id, permission=EMAIL_AUTH_TYPE)
|
||||
sample_broadcast_service.permissions.append(service_permission)
|
||||
|
||||
current_permissions = [p.permission for p in sample_broadcast_service.permissions]
|
||||
assert set(current_permissions) == set(ending_permissions)
|
||||
|
||||
data = {
|
||||
'broadcast_channel': "severe",
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_broadcast_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert set(result['data']['permissions']) == set(ending_permissions)
|
||||
|
||||
permissions = ServicePermission.query.filter_by(service_id=sample_broadcast_service.id).all()
|
||||
assert set([p.permission for p in permissions]) == set(ending_permissions)
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_sets_count_as_live_to_false(
|
||||
admin_request, sample_service, broadcast_organisation
|
||||
):
|
||||
assert sample_service.count_as_live is True
|
||||
|
||||
data = {
|
||||
'broadcast_channel': "severe",
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['count_as_live'] is False
|
||||
|
||||
service_from_db = Service.query.filter_by(id=sample_service.id).all()[0]
|
||||
assert service_from_db.count_as_live is False
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_sets_service_org_to_broadcast_org(
|
||||
admin_request, sample_service, broadcast_organisation
|
||||
):
|
||||
assert sample_service.organisation_id != current_app.config['BROADCAST_ORGANISATION_ID']
|
||||
|
||||
data = {
|
||||
'broadcast_channel': "severe",
|
||||
'service_mode': 'training',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['organisation'] == current_app.config['BROADCAST_ORGANISATION_ID']
|
||||
|
||||
service_from_db = Service.query.filter_by(id=sample_service.id).all()[0]
|
||||
assert str(service_from_db.organisation_id) == current_app.config['BROADCAST_ORGANISATION_ID']
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_does_not_error_if_run_on_a_service_that_is_already_a_broadcast_service(
|
||||
admin_request, sample_service, broadcast_organisation
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': "severe",
|
||||
'service_mode': "live",
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
for _ in range(2):
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
|
||||
|
||||
@freeze_time('2021-02-02')
|
||||
def test_set_as_broadcast_service_sets_service_to_live_mode(
|
||||
admin_request, notify_db_session, sample_service, broadcast_organisation
|
||||
):
|
||||
sample_service.restricted = True
|
||||
notify_db_session.add(sample_service)
|
||||
notify_db_session.commit()
|
||||
assert sample_service.restricted is True
|
||||
assert sample_service.go_live_at is None
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['name'] == 'Sample service'
|
||||
assert result['data']['restricted'] is False
|
||||
assert result['data']['go_live_at'] == '2021-02-02 00:00:00.000000'
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_doesnt_override_existing_go_live_at(
|
||||
admin_request, notify_db_session, sample_broadcast_service
|
||||
):
|
||||
sample_broadcast_service.restricted = False
|
||||
sample_broadcast_service.go_live_at = datetime(2021, 1, 1)
|
||||
notify_db_session.add(sample_broadcast_service)
|
||||
notify_db_session.commit()
|
||||
assert sample_broadcast_service.restricted is False
|
||||
assert sample_broadcast_service.go_live_at is not None
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_broadcast_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['name'] == 'Sample broadcast service'
|
||||
assert result['data']['restricted'] is False
|
||||
assert result['data']['go_live_at'] == '2021-01-01 00:00:00.000000'
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_sets_service_to_training_mode(
|
||||
admin_request, notify_db_session, sample_broadcast_service
|
||||
):
|
||||
sample_broadcast_service.restricted = False
|
||||
sample_broadcast_service.go_live_at = datetime(2021, 1, 1)
|
||||
notify_db_session.add(sample_broadcast_service)
|
||||
notify_db_session.commit()
|
||||
assert sample_broadcast_service.restricted is False
|
||||
assert sample_broadcast_service.go_live_at is not None
|
||||
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': 'training',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_broadcast_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['name'] == 'Sample broadcast service'
|
||||
assert result['data']['restricted'] is True
|
||||
assert result['data']['go_live_at'] is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize('service_mode', ["testing", ""])
|
||||
def test_set_as_broadcast_service_rejects_unknown_service_mode(
|
||||
admin_request, sample_service, broadcast_organisation, service_mode
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': service_mode,
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
_expected_status=400,
|
||||
)
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_rejects_if_no_service_mode(
|
||||
admin_request, sample_service, broadcast_organisation
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
_expected_status=400,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('provider', ["all", "three", "ee", "vodafone", "o2"])
|
||||
def test_set_as_broadcast_service_sets_mobile_provider_restriction(
|
||||
admin_request, sample_service, broadcast_organisation, provider
|
||||
):
|
||||
assert sample_service.service_broadcast_settings is None
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': provider
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
assert result['data']['name'] == 'Sample service'
|
||||
assert result['data']['allowed_broadcast_provider'] == provider
|
||||
|
||||
records = ServiceBroadcastSettings.query.filter_by(service_id=sample_service.id).all()
|
||||
assert len(records) == 1
|
||||
assert records[0].service_id == sample_service.id
|
||||
assert records[0].provider == provider
|
||||
|
||||
|
||||
@pytest.mark.parametrize('provider', ["all", "vodafone"])
|
||||
def test_set_as_broadcast_service_updates_mobile_provider_restriction(
|
||||
admin_request, notify_db_session, sample_broadcast_service, provider
|
||||
):
|
||||
sample_broadcast_service.service_broadcast_settings.provider = "o2"
|
||||
notify_db_session.add(sample_broadcast_service)
|
||||
notify_db_session.commit()
|
||||
assert sample_broadcast_service.service_broadcast_settings.provider == "o2"
|
||||
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': provider
|
||||
}
|
||||
|
||||
result = admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_broadcast_service.id,
|
||||
_data=data,
|
||||
)
|
||||
|
||||
assert result['data']['name'] == 'Sample broadcast service'
|
||||
assert result['data']['allowed_broadcast_provider'] == provider
|
||||
|
||||
records = ServiceBroadcastSettings.query.filter_by(service_id=sample_broadcast_service.id).all()
|
||||
assert len(records) == 1
|
||||
assert records[0].service_id == sample_broadcast_service.id
|
||||
assert records[0].provider == provider
|
||||
|
||||
|
||||
@pytest.mark.parametrize('provider', ["three, o2", "giffgaff", "", "None"])
|
||||
def test_set_as_broadcast_service_rejects_unknown_provider_restriction(
|
||||
admin_request, sample_service, broadcast_organisation, provider
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': 'test',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': provider
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
_expected_status=400,
|
||||
)
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_errors_if_no_mobile_provider_restriction(
|
||||
admin_request, sample_service, broadcast_organisation
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': 'severe',
|
||||
'service_mode': 'live',
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
_expected_status=400,
|
||||
)
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_updates_services_history(
|
||||
admin_request, sample_service, broadcast_organisation
|
||||
):
|
||||
old_history_records = Service.get_history_model().query.filter_by(id=sample_service.id).all()
|
||||
data = {
|
||||
'broadcast_channel': 'test',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': "all",
|
||||
}
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data=data,
|
||||
)
|
||||
|
||||
new_history_records = Service.get_history_model().query.filter_by(id=sample_service.id).all()
|
||||
assert len(new_history_records) == len(old_history_records) + 1
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_removes_user_permissions(
|
||||
admin_request,
|
||||
broadcast_organisation,
|
||||
sample_service,
|
||||
sample_service_full_permissions,
|
||||
sample_invited_user,
|
||||
):
|
||||
service_user = sample_service.users[0]
|
||||
|
||||
# make the user a member of a second service
|
||||
dao_add_user_to_service(
|
||||
sample_service_full_permissions,
|
||||
service_user,
|
||||
permissions=[
|
||||
Permission(service_id=sample_service_full_permissions.id,
|
||||
user_id=service_user.id,
|
||||
permission='send_emails')
|
||||
]
|
||||
)
|
||||
assert len(service_user.get_permissions(service_id=sample_service.id)) == 8
|
||||
assert len(sample_invited_user.get_permissions()) == 3
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data={
|
||||
'broadcast_channel': 'test',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': 'ee'
|
||||
}
|
||||
)
|
||||
|
||||
# The user permissions for the broadcast service (apart from 'view_activity') get removed
|
||||
assert service_user.get_permissions(service_id=sample_service.id) == ['view_activity']
|
||||
|
||||
# Permissions for users invited to the broadcast service (apart from 'view_activity') get removed
|
||||
assert sample_invited_user.permissions == 'view_activity'
|
||||
|
||||
# Permissions for other services remain
|
||||
assert service_user.get_permissions(service_id=sample_service_full_permissions.id) == ['send_emails']
|
||||
|
||||
|
||||
@freeze_time('2021-12-21')
|
||||
def test_set_as_broadcast_service_revokes_api_keys(
|
||||
admin_request,
|
||||
broadcast_organisation,
|
||||
sample_service,
|
||||
sample_service_full_permissions,
|
||||
):
|
||||
api_key_1 = create_api_key(service=sample_service)
|
||||
api_key_2 = create_api_key(service=sample_service)
|
||||
api_key_3 = create_api_key(service=sample_service_full_permissions)
|
||||
|
||||
api_key_2.expiry_date = datetime.utcnow() - timedelta(days=365)
|
||||
|
||||
admin_request.post(
|
||||
'service.set_as_broadcast_service',
|
||||
service_id=sample_service.id,
|
||||
_data={
|
||||
'broadcast_channel': 'government',
|
||||
'service_mode': 'live',
|
||||
'provider_restriction': 'all',
|
||||
}
|
||||
)
|
||||
|
||||
# This key should have a new expiry date
|
||||
assert api_key_1.expiry_date.isoformat().startswith('2021-12-21')
|
||||
|
||||
# This key keeps its old expiry date
|
||||
assert api_key_2.expiry_date.isoformat().startswith('2020-12-21')
|
||||
|
||||
# This key is from a different service
|
||||
assert api_key_3.expiry_date is None
|
||||
|
||||
Reference in New Issue
Block a user