mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-11 10:28:55 -04:00
Make service a member of the broadcast organisation
We will use this to easily identify all our broadcast services. There could be other ways to deal with finding and seeing all broadcast services but this is a good and easy way to start.
This commit is contained in:
@@ -384,6 +384,9 @@ class Config(object):
|
||||
|
||||
ENABLED_CBCS = {BroadcastProvider.EE, BroadcastProvider.THREE, BroadcastProvider.O2, BroadcastProvider.VODAFONE}
|
||||
|
||||
# as defined in api db migration 0331_add_broadcast_org.py
|
||||
BROADCAST_ORGANISATION_ID = '38e4bf69-93b0-445d-acee-53ea53fe02df'
|
||||
|
||||
|
||||
######################
|
||||
# Config overrides ###
|
||||
|
||||
+8
-3
@@ -29,7 +29,10 @@ from app.dao.fact_notification_status_dao import (
|
||||
fetch_stats_for_all_services_by_date_range, fetch_monthly_template_usage_for_service
|
||||
)
|
||||
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
||||
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
||||
from app.dao.organisation_dao import (
|
||||
dao_get_organisation_by_service_id,
|
||||
dao_add_service_to_organisation,
|
||||
)
|
||||
from app.dao.returned_letters_dao import (
|
||||
fetch_most_recent_returned_letter,
|
||||
fetch_recent_returned_letter_count,
|
||||
@@ -1094,9 +1097,9 @@ def set_as_broadcast_service(service_id):
|
||||
"""
|
||||
This route does four things
|
||||
- adds a service broadcast settings to define which channel broadcasts should go out on
|
||||
- removes all current service permissions
|
||||
- adds the broadcast service permission
|
||||
- removes all current service permissions and adds the broadcast service permission
|
||||
- sets the services `count_as_live` to false
|
||||
- adds the service to the broadcast organisation
|
||||
"""
|
||||
data = validate(request.get_json(), service_broadcast_settings_schema)
|
||||
service = dao_fetch_service_by_id(service_id)
|
||||
@@ -1111,5 +1114,7 @@ def set_as_broadcast_service(service_id):
|
||||
service.count_as_live = False
|
||||
dao_update_service(service)
|
||||
|
||||
dao_add_service_to_organisation(service, current_app.config['BROADCAST_ORGANISATION_ID'])
|
||||
|
||||
data = service_schema.dump(service).data
|
||||
return jsonify(data=data)
|
||||
|
||||
+13
-2
@@ -14,7 +14,7 @@ from app.dao.api_key_dao import save_model_api_key
|
||||
from app.dao.invited_user_dao import save_invited_user
|
||||
from app.dao.jobs_dao import dao_create_job
|
||||
from app.dao.notifications_dao import dao_create_notification
|
||||
from app.dao.organisation_dao import dao_create_organisation
|
||||
from app.dao.organisation_dao import dao_create_organisation, dao_add_service_to_organisation
|
||||
from app.dao.services_dao import (dao_create_service, dao_add_user_to_service)
|
||||
from app.dao.service_broadcast_settings_dao import insert_or_update_service_broadcast_settings
|
||||
from app.dao.templates_dao import dao_create_template
|
||||
@@ -151,7 +151,7 @@ def sample_service(notify_db_session):
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def sample_broadcast_service(notify_db_session):
|
||||
def sample_broadcast_service(notify_db_session, broadcast_organisation):
|
||||
user = create_user()
|
||||
service_name = 'Sample broadcast service'
|
||||
email_from = service_name.lower().replace(' ', '.')
|
||||
@@ -170,6 +170,7 @@ def sample_broadcast_service(notify_db_session):
|
||||
service = Service(**data)
|
||||
dao_create_service(service, user, service_permissions=[BROADCAST_TYPE])
|
||||
insert_or_update_service_broadcast_settings(service, channel="severe")
|
||||
dao_add_service_to_organisation(service, current_app.config['BROADCAST_ORGANISATION_ID'])
|
||||
else:
|
||||
if user not in service.users:
|
||||
dao_add_user_to_service(service, user)
|
||||
@@ -877,6 +878,16 @@ def sample_organisation(notify_db_session):
|
||||
return org
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def broadcast_organisation(notify_db_session):
|
||||
org = Organisation.query.get(current_app.config['BROADCAST_ORGANISATION_ID'])
|
||||
if not org:
|
||||
org = Organisation(id=current_app.config['BROADCAST_ORGANISATION_ID'], name='broadcast organisation')
|
||||
dao_create_organisation(org)
|
||||
|
||||
return org
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def restore_provider_details(notify_db, notify_db_session):
|
||||
"""
|
||||
|
||||
@@ -3652,7 +3652,9 @@ def test_get_returned_letter(admin_request, sample_letter_template):
|
||||
|
||||
|
||||
@pytest.mark.parametrize('channel', ["test", "severe"])
|
||||
def test_set_as_broadcast_service_sets_broadcast_channel(client, notify_db, sample_service, channel):
|
||||
def test_set_as_broadcast_service_sets_broadcast_channel(
|
||||
client, notify_db, sample_service, broadcast_organisation, channel
|
||||
):
|
||||
assert sample_service.service_broadcast_settings is None
|
||||
data = {
|
||||
'broadcast_channel': channel,
|
||||
@@ -3674,7 +3676,9 @@ def test_set_as_broadcast_service_sets_broadcast_channel(client, notify_db, samp
|
||||
assert records[0].channel == channel
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_updates_channel_for_broadcast_service(client, notify_db, sample_broadcast_service):
|
||||
def test_set_as_broadcast_service_updates_channel_for_broadcast_service(
|
||||
client, notify_db, sample_broadcast_service, broadcast_organisation
|
||||
):
|
||||
assert sample_broadcast_service.broadcast_channel == "severe"
|
||||
|
||||
resp = client.post(
|
||||
@@ -3696,7 +3700,9 @@ def test_set_as_broadcast_service_updates_channel_for_broadcast_service(client,
|
||||
|
||||
|
||||
@pytest.mark.parametrize('channel', ["government", "extreme", "exercise", "random", ""])
|
||||
def test_set_as_broadcast_service_rejects_unknown_channels(client, notify_db, sample_service, channel):
|
||||
def test_set_as_broadcast_service_rejects_unknown_channels(
|
||||
client, notify_db, sample_service, broadcast_organisation, channel
|
||||
):
|
||||
data = {
|
||||
'broadcast_channel': channel,
|
||||
}
|
||||
@@ -3709,7 +3715,7 @@ def test_set_as_broadcast_service_rejects_unknown_channels(client, notify_db, sa
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_rejects_if_no_channel(client, notify_db, sample_service):
|
||||
def test_set_as_broadcast_service_rejects_if_no_channel(client, notify_db, sample_service, broadcast_organisation):
|
||||
data = {}
|
||||
|
||||
resp = client.post(
|
||||
@@ -3720,7 +3726,9 @@ def test_set_as_broadcast_service_rejects_if_no_channel(client, notify_db, sampl
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_gives_broadcast_permission_and_removes_other_permissions(client, notify_db, sample_service):
|
||||
def test_set_as_broadcast_service_gives_broadcast_permission_and_removes_other_permissions(
|
||||
client, notify_db, sample_service, broadcast_organisation
|
||||
):
|
||||
current_permissions = [p.permission for p in sample_service.permissions]
|
||||
assert len(current_permissions) > 0
|
||||
assert current_permissions != [BROADCAST_TYPE]
|
||||
@@ -3741,7 +3749,7 @@ def test_set_as_broadcast_service_gives_broadcast_permission_and_removes_other_p
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_maintains_broadcast_permission_for_existing_broadcast_service(
|
||||
client, notify_db, sample_broadcast_service
|
||||
client, notify_db, sample_broadcast_service, broadcast_organisation
|
||||
):
|
||||
current_permissions = [p.permission for p in sample_broadcast_service.permissions]
|
||||
assert current_permissions == [BROADCAST_TYPE]
|
||||
@@ -3761,7 +3769,7 @@ def test_set_as_broadcast_service_maintains_broadcast_permission_for_existing_br
|
||||
assert [p.permission for p in permissions] == [BROADCAST_TYPE]
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_sets_count_as_live_to_false(client, notify_db, sample_service):
|
||||
def test_set_as_broadcast_service_sets_count_as_live_to_false(client, notify_db, sample_service, broadcast_organisation):
|
||||
assert sample_service.count_as_live == True
|
||||
|
||||
resp = client.post(
|
||||
@@ -3777,3 +3785,36 @@ def test_set_as_broadcast_service_sets_count_as_live_to_false(client, notify_db,
|
||||
|
||||
service_from_db = Service.query.filter_by(id=sample_service.id).all()[0]
|
||||
assert service_from_db.count_as_live == False
|
||||
|
||||
|
||||
def test_set_as_broadcast_service_sets_service_org_to_broadcast_org(client, notify_db, sample_service, broadcast_organisation):
|
||||
assert sample_service.organisation_id != current_app.config['BROADCAST_ORGANISATION_ID']
|
||||
|
||||
resp = client.post(
|
||||
'/service/{}/set-as-broadcast-service'.format(sample_service.id),
|
||||
data=json.dumps({
|
||||
'broadcast_channel': "severe",
|
||||
}),
|
||||
headers=[('Content-Type', 'application/json'), create_authorization_header()]
|
||||
)
|
||||
result = resp.json
|
||||
assert resp.status_code == 200
|
||||
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(
|
||||
client, notify_db, sample_service, broadcast_organisation
|
||||
):
|
||||
for _ in range(2):
|
||||
resp = client.post(
|
||||
'/service/{}/set-as-broadcast-service'.format(sample_service.id),
|
||||
data=json.dumps({
|
||||
'broadcast_channel': "severe",
|
||||
}),
|
||||
headers=[('Content-Type', 'application/json'), create_authorization_header()]
|
||||
)
|
||||
result = resp.json
|
||||
assert resp.status_code == 200
|
||||
|
||||
Reference in New Issue
Block a user