mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-24 11:31:50 -05:00
Merge pull request #3305 from alphagov/fetch-alerts-list-for-govuk-alerts
get_broadcasts returns a list of alerts for gov.uk/alerts
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import desc
|
||||
|
||||
from app import db
|
||||
from app.dao.dao_utils import autocommit
|
||||
@@ -9,6 +12,8 @@ from app.models import (
|
||||
BroadcastProviderMessage,
|
||||
BroadcastProviderMessageNumber,
|
||||
BroadcastProviderMessageStatus,
|
||||
BroadcastStatusType,
|
||||
ServiceBroadcastSettings,
|
||||
)
|
||||
|
||||
|
||||
@@ -29,6 +34,27 @@ def dao_get_broadcast_messages_for_service(service_id):
|
||||
).order_by(BroadcastMessage.created_at)
|
||||
|
||||
|
||||
def dao_get_all_broadcast_messages():
|
||||
return db.session.query(
|
||||
BroadcastMessage.id,
|
||||
BroadcastMessage.reference,
|
||||
ServiceBroadcastSettings.channel,
|
||||
BroadcastMessage.content,
|
||||
BroadcastMessage.areas,
|
||||
BroadcastMessage.status,
|
||||
BroadcastMessage.starts_at,
|
||||
BroadcastMessage.finishes_at,
|
||||
BroadcastMessage.approved_at,
|
||||
BroadcastMessage.cancelled_at,
|
||||
).join(
|
||||
ServiceBroadcastSettings, ServiceBroadcastSettings.service_id == BroadcastMessage.service_id
|
||||
).filter(
|
||||
BroadcastMessage.starts_at >= datetime(2021, 5, 25, 0, 0, 0),
|
||||
BroadcastMessage.stubbed == False, # noqa
|
||||
BroadcastMessage.status.in_(BroadcastStatusType.LIVE_STATUSES)
|
||||
).order_by(desc(BroadcastMessage.starts_at)).all()
|
||||
|
||||
|
||||
def get_earlier_events_for_broadcast_event(broadcast_event_id):
|
||||
"""
|
||||
This is used to build up the references list.
|
||||
|
||||
@@ -1,8 +1,23 @@
|
||||
from flask import jsonify
|
||||
|
||||
from app.dao.broadcast_message_dao import dao_get_all_broadcast_messages
|
||||
from app.utils import get_dt_string_or_none
|
||||
from app.v2.govuk_alerts import v2_govuk_alerts_blueprint
|
||||
|
||||
|
||||
@v2_govuk_alerts_blueprint.route('')
|
||||
def get_broadcasts():
|
||||
return jsonify({})
|
||||
broadcasts = dao_get_all_broadcast_messages()
|
||||
broadcasts_dict = {"alerts": [{
|
||||
"id": broadcast.id,
|
||||
"reference": broadcast.reference,
|
||||
"channel": broadcast.channel,
|
||||
"content": broadcast.content,
|
||||
"areas": broadcast.areas,
|
||||
"status": broadcast.status,
|
||||
"starts_at": get_dt_string_or_none(broadcast.starts_at),
|
||||
"finishes_at": get_dt_string_or_none(broadcast.finishes_at),
|
||||
"approved_at": get_dt_string_or_none(broadcast.approved_at),
|
||||
"cancelled_at": get_dt_string_or_none(broadcast.cancelled_at),
|
||||
} for broadcast in broadcasts]}
|
||||
return jsonify(broadcasts_dict), 200
|
||||
|
||||
@@ -2,12 +2,17 @@ from datetime import datetime
|
||||
|
||||
from app.dao.broadcast_message_dao import (
|
||||
create_broadcast_provider_message,
|
||||
dao_get_all_broadcast_messages,
|
||||
get_earlier_events_for_broadcast_event,
|
||||
)
|
||||
from app.dao.broadcast_service_dao import (
|
||||
insert_or_update_service_broadcast_settings,
|
||||
)
|
||||
from app.models import BROADCAST_TYPE, BroadcastEventMessageType
|
||||
from tests.app.db import (
|
||||
create_broadcast_event,
|
||||
create_broadcast_message,
|
||||
create_service,
|
||||
create_template,
|
||||
)
|
||||
|
||||
@@ -65,3 +70,62 @@ def test_create_broadcast_provider_message_creates_in_correct_state(sample_broad
|
||||
assert broadcast_provider_message.broadcast_event_id == broadcast_event.id
|
||||
assert broadcast_provider_message.created_at is not None
|
||||
assert broadcast_provider_message.updated_at is None
|
||||
|
||||
|
||||
def test_dao_get_all_broadcast_messages(sample_broadcast_service):
|
||||
template_1 = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
# older message, should appear second in list
|
||||
broadcast_message_1 = create_broadcast_message(
|
||||
template_1,
|
||||
starts_at=datetime(2021, 6, 15, 12, 0, 0),
|
||||
status='cancelled')
|
||||
|
||||
service_2 = create_service(
|
||||
service_name="broadcast service 2",
|
||||
service_permissions=[BROADCAST_TYPE]
|
||||
)
|
||||
insert_or_update_service_broadcast_settings(service_2, channel="severe")
|
||||
|
||||
template_2 = create_template(service_2, BROADCAST_TYPE)
|
||||
# newer message, should appear first in list
|
||||
broadcast_message_2 = create_broadcast_message(
|
||||
template_2,
|
||||
stubbed=False,
|
||||
status='broadcasting',
|
||||
starts_at=datetime(2021, 6, 20, 12, 0, 0),
|
||||
)
|
||||
|
||||
# broadcast_message_stubbed
|
||||
create_broadcast_message(
|
||||
template_2,
|
||||
stubbed=True,
|
||||
status='broadcasting',
|
||||
starts_at=datetime(2021, 6, 15, 12, 0, 0),
|
||||
)
|
||||
# broadcast_message_old
|
||||
create_broadcast_message(
|
||||
template_2,
|
||||
stubbed=False,
|
||||
status='completed',
|
||||
starts_at=datetime(2021, 5, 20, 12, 0, 0),
|
||||
)
|
||||
# broadcast_message_rejected
|
||||
create_broadcast_message(
|
||||
template_2,
|
||||
stubbed=False,
|
||||
status='rejected',
|
||||
starts_at=datetime(2021, 6, 15, 12, 0, 0),
|
||||
)
|
||||
|
||||
broadcast_messages = dao_get_all_broadcast_messages()
|
||||
assert len(broadcast_messages) == 2
|
||||
assert broadcast_messages == [
|
||||
(
|
||||
broadcast_message_2.id, None, 'severe', 'Dear Sir/Madam, Hello. Yours Truly, The Government.',
|
||||
{'areas': [], 'simple_polygons': []}, 'broadcasting', datetime(2021, 6, 20, 12, 0),
|
||||
None, None, None),
|
||||
(
|
||||
broadcast_message_1.id, None, 'severe', 'Dear Sir/Madam, Hello. Yours Truly, The Government.',
|
||||
{'areas': [], 'simple_polygons': []}, 'cancelled', datetime(2021, 6, 15, 12, 0),
|
||||
None, None, None)
|
||||
]
|
||||
|
||||
0
tests/app/v2/govuk_alerts/__init__.py
Normal file
0
tests/app/v2/govuk_alerts/__init__.py
Normal file
39
tests/app/v2/govuk_alerts/test_get_broadcasts.py
Normal file
39
tests/app/v2/govuk_alerts/test_get_broadcasts.py
Normal file
@@ -0,0 +1,39 @@
|
||||
from datetime import datetime
|
||||
|
||||
from flask import current_app, json
|
||||
|
||||
from app.models import BROADCAST_TYPE
|
||||
from tests import create_internal_authorization_header
|
||||
from tests.app.db import create_broadcast_message, create_template
|
||||
|
||||
|
||||
def test_get_all_broadcasts_returns_list_of_broadcasts_and_200(
|
||||
client, sample_broadcast_service
|
||||
):
|
||||
template_1 = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
|
||||
broadcast_message_1 = create_broadcast_message(
|
||||
template_1,
|
||||
starts_at=datetime(2021, 6, 15, 12, 0, 0),
|
||||
status='cancelled')
|
||||
|
||||
broadcast_message_2 = create_broadcast_message(
|
||||
template_1,
|
||||
starts_at=datetime(2021, 6, 22, 12, 0, 0),
|
||||
status='broadcasting')
|
||||
|
||||
jwt_client_id = current_app.config['GOVUK_ALERTS_CLIENT_ID']
|
||||
header = create_internal_authorization_header(jwt_client_id)
|
||||
|
||||
response = client.get('/v2/govuk-alerts', headers=[header])
|
||||
|
||||
json_response = json.loads(response.get_data(as_text=True))
|
||||
|
||||
assert response.status_code == 200
|
||||
assert len(json_response['alerts']) == 2
|
||||
|
||||
assert json_response['alerts'][0]['id'] == str(broadcast_message_2.id)
|
||||
assert json_response['alerts'][0]['starts_at'] == '2021-06-22T12:00:00.000000Z'
|
||||
assert json_response['alerts'][0]['finishes_at'] is None
|
||||
assert json_response['alerts'][1]['id'] == str(broadcast_message_1.id)
|
||||
assert json_response['alerts'][1]['starts_at'] == '2021-06-15T12:00:00.000000Z'
|
||||
Reference in New Issue
Block a user