示例#1
0
def test_send_broadcast_event_sends_data_correctly(sample_service):
    template = create_template(sample_service, BROADCAST_TYPE)
    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)
    event = create_broadcast_event(broadcast_message)

    with requests_mock.Mocker() as request_mock:
        request_mock.post("http://test-cbc-proxy/broadcasts/events/stub-1",
                          json={'valid': 'true'},
                          status_code=200)
        send_broadcast_event(broadcast_event_id=str(event.id))

    assert request_mock.call_count == 1
    assert request_mock.request_history[0].method == 'POST'
    assert request_mock.request_history[0].headers[
        "Content-type"] == "application/json"

    cbc_json = request_mock.request_history[0].json()
    assert cbc_json['id'] == str(event.id)
    assert cbc_json['broadcast_message_id'] == str(broadcast_message.id)
    assert cbc_json['sent_at'] == '2020-08-01T12:00:00.000000Z'
    assert cbc_json['transmitted_starts_at'] is None
    assert cbc_json['transmitted_areas'] == {
        "areas": ['london'],
        "simple_polygons": [[[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]]]
    }
def test_send_broadcast_event_queues_up_for_active_providers(
        mocker, notify_api, sample_service):
    template = create_template(sample_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template, status=BroadcastStatusType.BROADCASTING)
    event = create_broadcast_event(broadcast_message)

    mock_send_broadcast_provider_message = mocker.patch(
        'app.celery.broadcast_message_tasks.send_broadcast_provider_message', )

    with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']):
        send_broadcast_event(event.id)

    assert mock_send_broadcast_provider_message.apply_async.call_args_list == [
        call(kwargs={
            'broadcast_event_id': event.id,
            'provider': 'ee'
        },
             queue='notify-internal-tasks'),
        call(kwargs={
            'broadcast_event_id': event.id,
            'provider': 'vodafone'
        },
             queue='notify-internal-tasks')
    ]
示例#3
0
def test_send_broadcast_event_sends_references(sample_service):
    template = create_template(sample_service,
                               BROADCAST_TYPE,
                               content='content')
    broadcast_message = create_broadcast_message(
        template, areas=['london'], status=BroadcastStatusType.BROADCASTING)
    alert_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.ALERT)
    cancel_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.CANCEL)

    with requests_mock.Mocker() as request_mock:
        request_mock.post("http://test-cbc-proxy/broadcasts/events/stub-1",
                          json={'valid': 'true'},
                          status_code=200)
        send_broadcast_event(broadcast_event_id=str(cancel_event.id))

    assert request_mock.call_count == 1
    assert request_mock.request_history[0].method == 'POST'
    assert request_mock.request_history[0].headers[
        "Content-type"] == "application/json"

    cbc_json = request_mock.request_history[0].json()
    assert cbc_json['id'] == str(cancel_event.id)
    assert cbc_json['message_type'] == cancel_event.message_type
    assert cbc_json['previous_event_references'] == [alert_event.reference]
示例#4
0
def test_send_broadcast_event_creates_zendesk_p1(mocker, notify_api, sample_broadcast_service):
    template = create_template(sample_broadcast_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template,
        status=BroadcastStatusType.BROADCASTING,
        areas={'areas': ['wd20-S13002775', 'wd20-S13002773'], 'simple_polygons': []},
    )
    event = create_broadcast_event(broadcast_message)
    mock_create_ticket = mocker.patch("app.celery.broadcast_message_tasks.zendesk_client.create_ticket")

    mocker.patch('app.celery.broadcast_message_tasks.send_broadcast_provider_message')

    with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'):
        send_broadcast_event(event.id)

    assert mock_create_ticket.call_count == 1
    zendesk_args = mock_create_ticket.call_args[1]
    assert zendesk_args['p1'] is True
    assert zendesk_args['ticket_type'] == 'incident'

    assert str(broadcast_message.id) in zendesk_args['message']
    assert 'channel severe' in zendesk_args['message']
    assert "areas ['wd20-S13002775', 'wd20-S13002773']" in zendesk_args['message']
    # the start of the content from the broadcast template
    assert "Dear Sir/Madam" in zendesk_args['message']
def test_cancel_broadcast_event_sends_references(mocker, sample_service):
    template = create_template(sample_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)

    mock_cancel_broadcast = mocker.patch(
        'app.cbc_proxy_client.cancel_broadcast',
    )

    send_broadcast_event(broadcast_event_id=str(cancel_event.id))

    mock_cancel_broadcast.assert_called_once_with(
        identifier=str(cancel_event.id),
        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]],
        }],
        references=[alert_event.reference, update_event.reference],
        sent=cancel_event.sent_at_as_cap_datetime_string,
        expires=cancel_event.transmitted_finishes_at_as_cap_datetime_string,
    )
示例#6
0
def test_send_broadcast_event_doesnt_p1_when_cancelling(
        mocker, notify_api, sample_broadcast_service):
    template = create_template(sample_broadcast_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template,
        status=BroadcastStatusType.BROADCASTING,
        areas={
            'areas': ['wd20-S13002775', 'wd20-S13002773'],
            'simple_polygons': []
        },
    )
    create_broadcast_event(broadcast_message,
                           message_type=BroadcastEventMessageType.ALERT)
    cancel_event = create_broadcast_event(
        broadcast_message, message_type=BroadcastEventMessageType.CANCEL)
    mock_create_ticket = mocker.patch(
        "app.celery.broadcast_message_tasks.zendesk_client.create_ticket")

    mocker.patch(
        'app.celery.broadcast_message_tasks.send_broadcast_provider_message')

    with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'):
        send_broadcast_event(cancel_event.id)

    assert mock_create_ticket.called is False
示例#7
0
def test_send_broadcast_event_only_sends_to_one_provider_if_set_on_service(
        mocker, notify_db, notify_api, sample_service):
    settings = ServiceBroadcastSettings(service=sample_service,
                                        channel="test",
                                        provider="vodafone")
    notify_db.session.add(settings)

    template = create_template(sample_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template, status=BroadcastStatusType.BROADCASTING)
    event = create_broadcast_event(broadcast_message)

    mock_send_broadcast_provider_message = mocker.patch(
        'app.celery.broadcast_message_tasks.send_broadcast_provider_message', )

    with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']):
        send_broadcast_event(event.id)

    assert mock_send_broadcast_provider_message.apply_async.call_args_list == [
        call(kwargs={
            'broadcast_event_id': event.id,
            'provider': 'vodafone'
        },
             queue='broadcast-tasks')
    ]
def test_send_broadcast_event_does_nothing_if_cbc_proxy_disabled(mocker, notify_api):
    mock_send_broadcast_provider_message = mocker.patch(
        'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
    )

    event_id = uuid.uuid4()
    with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']), set_config(notify_api, 'CBC_PROXY_ENABLED', False):
        send_broadcast_event(event_id)

    assert mock_send_broadcast_provider_message.apply_async.called is False
示例#9
0
def test_send_broadcast_event_errors(sample_service):
    template = create_template(sample_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template, status=BroadcastStatusType.BROADCASTING)
    event = create_broadcast_event(broadcast_message)

    with requests_mock.Mocker() as request_mock:
        request_mock.post("http://test-cbc-proxy/broadcasts/events/stub-1",
                          text='503 bad gateway',
                          status_code=503)
        # we're not retrying or anything for the moment - but this'll ensure any exception gets logged
        with pytest.raises(RequestException) as ex:
            send_broadcast_event(broadcast_event_id=str(event.id))

    assert ex.value.response.status_code == 503
示例#10
0
def test_send_broadcast_event_doesnt_create_zendesk_on_staging(mocker, notify_api, sample_broadcast_service):
    template = create_template(sample_broadcast_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
    event = create_broadcast_event(broadcast_message)
    mock_create_ticket = mocker.patch("app.celery.broadcast_message_tasks.zendesk_client.create_ticket")

    mock_send_broadcast_provider_message = mocker.patch(
        'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
    )

    with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'staging'):
        send_broadcast_event(event.id)

    assert mock_send_broadcast_provider_message.apply_async.called is True
    assert mock_create_ticket.called is False
示例#11
0
def test_send_broadcast_event_does_nothing_if_provider_set_on_service_isnt_enabled_globally(
        mocker, notify_db, notify_api, sample_broadcast_service):
    sample_broadcast_service.allowed_broadcast_provider = "three"
    template = create_template(sample_broadcast_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template, status=BroadcastStatusType.BROADCASTING)
    event = create_broadcast_event(broadcast_message)

    mock_send_broadcast_provider_message = mocker.patch(
        'app.celery.broadcast_message_tasks.send_broadcast_provider_message', )

    with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']):
        send_broadcast_event(event.id)

    assert mock_send_broadcast_provider_message.apply_async.called is False
def test_send_broadcast_event_errors(mocker, sample_service):
    template = create_template(sample_service, BROADCAST_TYPE)

    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
    )

    event = create_broadcast_event(broadcast_message)

    mock_create_broadcast = mocker.patch(
        'app.cbc_proxy_client.create_and_send_broadcast',
        side_effect=Exception('oh no'),
    )

    with pytest.raises(Exception) as ex:
        send_broadcast_event(broadcast_event_id=str(event.id))

    assert ex.match('oh no')

    mock_create_broadcast.assert_called_once_with(
        identifier=str(event.id),
        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],
            ],
        }],
        sent=event.sent_at_as_cap_datetime_string,
        expires=event.transmitted_finishes_at_as_cap_datetime_string,
    )
def test_create_broadcast_event_sends_data_correctly(mocker, sample_service):
    template = create_template(sample_service, BROADCAST_TYPE)
    broadcast_message = create_broadcast_message(
        template,
        areas={
            'areas': ['london', 'glasgow'],
            'simple_polygons': [
                [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]],
                [[-4.53, 55.72], [-3.88, 55.72], [-3.88, 55.96], [-4.53, 55.96]],
            ],
        },
        status=BroadcastStatusType.BROADCASTING
    )
    event = create_broadcast_event(broadcast_message)

    mock_create_broadcast = mocker.patch(
        'app.cbc_proxy_client.create_and_send_broadcast',
    )

    send_broadcast_event(broadcast_event_id=str(event.id))

    mock_create_broadcast.assert_called_once_with(
        identifier=str(event.id),
        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],
            ],
        }, {
            'polygon': [
                [-4.53, 55.72], [-3.88, 55.72], [-3.88, 55.96], [-4.53, 55.96],
            ],
        }],
        sent=event.sent_at_as_cap_datetime_string,
        expires=event.transmitted_finishes_at_as_cap_datetime_string,
    )