create broadcast_provider_message and use id from that instead

(instead of using the id from broadcast_event)

we need every XML blob we send to have a different ID. if we're sending
different XML blobs for each provider, then each one should have a
different identifier. So, instead of taking the identifier from the
broadcast_event, take it from the broadcast_provider_message instead.

Note: We're still going to the broadcast_event for most fields, to
ensure they stay consistent between different providers. The last thing
we want is for different phone networks to get different content
This commit is contained in:
Leo Hemsted
2020-11-16 18:48:00 +00:00
parent 7cc83e04eb
commit f12c949ae9
5 changed files with 71 additions and 16 deletions

View File

@@ -1,10 +1,10 @@
import uuid
from unittest.mock import call
from unittest.mock import call, ANY
from freezegun import freeze_time
import pytest
from app.models import BROADCAST_TYPE, BroadcastStatusType, BroadcastEventMessageType
from app.models import BROADCAST_TYPE, BroadcastStatusType, BroadcastEventMessageType, BroadcastProviderMessageStatus
from app.celery.broadcast_message_tasks import send_broadcast_event, send_broadcast_provider_message, trigger_link_test
from tests.app.db import create_template, create_broadcast_message, create_broadcast_event
@@ -46,10 +46,15 @@ def test_send_broadcast_provider_message_sends_data_correctly(mocker, sample_ser
'app.cbc_proxy_client.create_and_send_broadcast',
)
assert event.get_provider_message('ee') is None
send_broadcast_provider_message(provider='ee', broadcast_event_id=str(event.id))
broadcast_provider_message = event.get_provider_message('ee')
assert broadcast_provider_message.status == BroadcastProviderMessageStatus.SENDING
mock_create_broadcast.assert_called_once_with(
identifier=str(event.id),
identifier=str(broadcast_provider_message.id),
headline='GOV.UK Notify Broadcast',
description='this is an emergency broadcast message',
areas=[{
@@ -89,8 +94,11 @@ def test_send_broadcast_provider_message_sends_update_with_references(mocker, sa
send_broadcast_provider_message(provider='ee', broadcast_event_id=str(update_event.id))
broadcast_provider_message = update_event.get_provider_message('ee')
assert broadcast_provider_message.state == BroadcastProviderMessageStatus.SENDING
mock_update_broadcast.assert_called_once_with(
identifier=str(update_event.id),
identifier=str(broadcast_provider_message.id),
headline="GOV.UK Notify Broadcast",
description='this is an emergency broadcast message',
areas=[{
@@ -126,8 +134,11 @@ def test_send_broadcast_provider_message_sends_cancel_with_references(mocker, sa
send_broadcast_provider_message(provider='ee', broadcast_event_id=str(cancel_event.id))
broadcast_provider_message = cancel_event.get_provider_message('ee')
assert broadcast_provider_message.state == BroadcastProviderMessageStatus.SENDING
mock_cancel_broadcast.assert_called_once_with(
identifier=str(cancel_event.id),
identifier=str(broadcast_provider_message.id),
headline="GOV.UK Notify Broadcast",
description='this is an emergency broadcast message',
areas=[{
@@ -166,7 +177,7 @@ def test_send_broadcast_provider_message_errors(mocker, sample_service):
assert ex.match('oh no')
mock_create_broadcast.assert_called_once_with(
identifier=str(event.id),
identifier=ANY,
headline="GOV.UK Notify Broadcast",
description='this is an emergency broadcast message',
areas=[{

View File

@@ -1,11 +1,12 @@
from datetime import datetime
from app.models import BROADCAST_TYPE
from app.models import BroadcastEventMessageType
from app.dao.broadcast_message_dao import get_earlier_events_for_broadcast_event
from freezegun import freeze_time
from app.models import BROADCAST_TYPE, BroadcastStatusType, BroadcastEventMessageType
from app.dao.broadcast_message_dao import get_earlier_events_for_broadcast_event, create_broadcast_provider_message
from tests.app.db import create_broadcast_message, create_template, create_broadcast_event
def test_get_earlier_events_for_broadcast_event(sample_service):
t = create_template(sample_service, BROADCAST_TYPE)
bm = create_broadcast_message(t)
@@ -41,3 +42,21 @@ def test_get_earlier_events_for_broadcast_event(sample_service):
# only fetches earlier events, and they're in time order
earlier_events = get_earlier_events_for_broadcast_event(events[2].id)
assert earlier_events == [events[0], events[1]]
@freeze_time('2020-02-03 04:05:06')
def test_create_broadcast_provider_message_creates_in_correct_state(sample_broadcast_service):
t = create_template(sample_broadcast_service, BROADCAST_TYPE)
broadcast_message = create_broadcast_message(t, status=BroadcastStatusType.APPROVED)
broadcast_event = create_broadcast_event(
broadcast_message,
sent_at=datetime(2020, 1, 1, 12, 0, 0),
message_type=BroadcastEventMessageType.ALERT,
transmitted_content={'body': 'Initial content'}
)
broadcast_provider_message = create_broadcast_provider_message(broadcast_event, 'fake-provider')
assert broadcast_provider_message.status == 'sending'
assert broadcast_provider_message.broadcast_event_id == broadcast_event.id
assert broadcast_provider_message.created_at == datetime.utcnow()