Beispiel #1
0
def test_check_provider_message_should_send_raises_if_older_event_hasnt_started_sending_yet(sample_template):
    broadcast_message = create_broadcast_message(sample_template)
    # event approved at midnight
    past_succesful_event = create_broadcast_event(
        broadcast_message,
        message_type='alert',
        sent_at=datetime(2021, 1, 1, 0, 0),
    )
    # event updated at 5am
    past_still_sending_event = create_broadcast_event(
        broadcast_message,
        message_type='update',
        sent_at=datetime(2021, 1, 1, 5, 0),
    )
    # event updated at 7am
    current_event = create_broadcast_event(
        broadcast_message,
        message_type='update',
        sent_at=datetime(2021, 1, 1, 7, 0),
    )

    # no provider message for past_still_sending_event
    create_broadcast_provider_message(past_succesful_event, provider='ee', status=BroadcastProviderMessageStatus.ACK)

    # we shouldn't send the update now, because a previous event is still stuck in sending
    with pytest.raises(CBCProxyFatalException) as exc:
        check_provider_message_should_send(current_event, 'ee')

    assert f'Previous event {past_still_sending_event.id} (type update) has no provider_message for provider ee' in str(exc.value)  # noqa
Beispiel #2
0
def test_check_provider_message_should_send_raises_if_older_event_still_sending(sample_template):
    broadcast_message = create_broadcast_message(sample_template)
    # event approved at midnight
    past_succesful_event = create_broadcast_event(
        broadcast_message,
        message_type='alert',
        sent_at=datetime(2021, 1, 1, 0, 0),
    )
    # event updated at 5am (this event is still sending)
    past_still_sending_event = create_broadcast_event(
        broadcast_message,
        message_type='update',
        sent_at=datetime(2021, 1, 1, 5, 0),
    )
    # event updated again at 7am
    current_event = create_broadcast_event(
        broadcast_message,
        message_type='update',
        sent_at=datetime(2021, 1, 1, 7, 0),
    )

    create_broadcast_provider_message(past_succesful_event, provider='ee', status=BroadcastProviderMessageStatus.ACK)
    create_broadcast_provider_message(past_still_sending_event, provider='ee', status=BroadcastProviderMessageStatus.SENDING)  # noqa

    # we havent sent the previous update yet - it's still in sending - so don't try and send this one.
    with pytest.raises(CBCProxyFatalException) as exc:
        check_provider_message_should_send(current_event, 'ee')

    assert f'Previous event {past_still_sending_event.id} (type update) has not finished sending to provider ee' in str(exc.value)  # noqa
Beispiel #3
0
def test_check_provider_message_should_send_raises_if_current_event_already_has_provider_message_not_in_sending(
    sample_template,
    existing_message_status
):
    broadcast_message = create_broadcast_message(sample_template)
    current_event = create_broadcast_event(broadcast_message, message_type='alert')

    create_broadcast_provider_message(current_event, provider='ee', status=existing_message_status)

    check_provider_message_should_send(current_event, 'ee')
Beispiel #4
0
def test_send_broadcast_provider_message_sends_cancel_with_references(
        mocker, sample_broadcast_service, provider, provider_capitalised):
    template = create_template(sample_broadcast_service,
                               BROADCAST_TYPE,
                               content='content')

    broadcast_message = create_broadcast_message(
        template,
        areas={
            'areas': ['london'],
            'simple_polygons': [
                [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]],
            ],
        },
        status=BroadcastStatusType.BROADCASTING)

    alert_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.ALERT)
    update_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.UPDATE)
    cancel_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.CANCEL)

    create_broadcast_provider_message(
        alert_event, provider, status=BroadcastProviderMessageStatus.ACK)
    create_broadcast_provider_message(
        update_event, provider, status=BroadcastProviderMessageStatus.ACK)

    mock_cancel_broadcast = mocker.patch(
        f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.cancel_broadcast',
    )

    send_broadcast_provider_message(provider=provider,
                                    broadcast_event_id=str(cancel_event.id))

    broadcast_provider_message = cancel_event.get_provider_message(provider)
    assert broadcast_provider_message.status == BroadcastProviderMessageStatus.ACK

    mock_cancel_broadcast.assert_called_once_with(
        identifier=str(broadcast_provider_message.id),
        message_number=mocker.ANY,
        previous_provider_messages=[
            alert_event.get_provider_message(provider),
            update_event.get_provider_message(provider)
        ],
        sent=cancel_event.sent_at_as_cap_datetime_string,
    )
Beispiel #5
0
def test_send_broadcast_provider_message_sends_update_with_references(
        mocker, sample_broadcast_service, provider, provider_capitalised):
    template = create_template(sample_broadcast_service,
                               BROADCAST_TYPE,
                               content='content')

    broadcast_message = create_broadcast_message(
        template,
        areas={
            'areas': ['london'],
            'simple_polygons': [
                [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]],
            ],
        },
        status=BroadcastStatusType.BROADCASTING)

    alert_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.ALERT)
    create_broadcast_provider_message(
        alert_event, provider, status=BroadcastProviderMessageStatus.ACK)
    update_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.UPDATE)

    mock_update_broadcast = mocker.patch(
        f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.update_and_send_broadcast',
    )

    send_broadcast_provider_message(provider=provider,
                                    broadcast_event_id=str(update_event.id))

    broadcast_provider_message = update_event.get_provider_message(provider)
    assert broadcast_provider_message.status == BroadcastProviderMessageStatus.ACK

    mock_update_broadcast.assert_called_once_with(
        identifier=str(broadcast_provider_message.id),
        message_number=mocker.ANY,
        headline="GOV.UK Notify Broadcast",
        description='this is an emergency broadcast message',
        areas=[{
            "polygon": [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]],
        }],
        previous_provider_messages=[
            alert_event.get_provider_message(provider)
        ],
        sent=update_event.sent_at_as_cap_datetime_string,
        expires=update_event.transmitted_finishes_at_as_cap_datetime_string,
        channel="severe")
Beispiel #6
0
def test_send_broadcast_provider_message_works_if_we_retried_previously(
        mocker, sample_broadcast_service):
    template = create_template(sample_broadcast_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template,
        areas={
            'areas': [],
            'simple_polygons': [],
        },
        status=BroadcastStatusType.BROADCASTING)
    event = create_broadcast_event(broadcast_message)

    # an existing provider message already exists, and previously failed
    create_broadcast_provider_message(
        broadcast_event=event,
        provider='ee',
        status=BroadcastProviderMessageStatus.SENDING)

    mock_create_broadcast = mocker.patch(
        'app.clients.cbc_proxy.CBCProxyEE.create_and_send_broadcast', )

    send_broadcast_provider_message(provider='ee',
                                    broadcast_event_id=str(event.id))

    # make sure we haven't completed a duplicate event - we shouldn't record the failure
    assert len(event.provider_messages) == 1

    broadcast_provider_message = event.get_provider_message('ee')

    assert broadcast_provider_message.status == BroadcastProviderMessageStatus.ACK
    assert broadcast_provider_message.updated_at is not None

    mock_create_broadcast.assert_called_once_with(
        identifier=str(broadcast_provider_message.id),
        message_number=mocker.ANY,
        headline='GOV.UK Notify Broadcast',
        description='this is an emergency broadcast message',
        areas=[],
        sent=event.sent_at_as_cap_datetime_string,
        expires=event.transmitted_finishes_at_as_cap_datetime_string,
        channel='severe',
    )