Ejemplo n.º 1
0
def test_simple_polygons(fake_uuid):
    broadcast_message = BroadcastMessage(
        broadcast_message_json(
            id_=fake_uuid,
            service_id=fake_uuid,
            template_id=fake_uuid,
            status='draft',
            created_by_id=fake_uuid,
            areas=[
                # Hackney Central
                'wd20-E05009372',
                # Hackney Wick
                'wd20-E05009374',
            ],
        ))

    assert [
        [
            len(polygon) for polygon in
            broadcast_message.polygons.as_coordinate_pairs_lat_long
        ],
        [
            len(polygon) for polygon in
            broadcast_message.simple_polygons.as_coordinate_pairs_lat_long
        ],
    ] == [
        # One polygon for each area
        [27, 31],
        # Because the areas are close to each other, the simplification
        # and unioning process results in a single polygon with fewer
        # total coordinates
        [55],
    ]
Ejemplo n.º 2
0
def test_cant_reject_broadcast_in_wrong_state(
    mocker,
    client_request,
    service_one,
    mock_get_broadcast_template,
    fake_uuid,
    mock_update_broadcast_message,
    mock_update_broadcast_message_status,
    initial_status,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status=initial_status,
        ),
    )
    service_one['permissions'] += ['broadcast']

    client_request.get('.reject_broadcast_message',
                       service_id=SERVICE_ONE_ID,
                       broadcast_message_id=fake_uuid,
                       _expected_redirect=url_for(
                           '.view_broadcast_message',
                           service_id=SERVICE_ONE_ID,
                           broadcast_message_id=fake_uuid,
                           _external=True,
                       ))

    assert mock_update_broadcast_message.called is False
    assert mock_update_broadcast_message_status.called is False
Ejemplo n.º 3
0
def test_content_comes_from_attribute_not_template(fake_uuid):
    broadcast_message = BroadcastMessage(broadcast_message_json(
        id_=fake_uuid,
        service_id=fake_uuid,
        template_id=fake_uuid,
        status='draft',
        created_by_id=fake_uuid,
    ))
    assert broadcast_message.content == 'This is a test'
Ejemplo n.º 4
0
def test_request_approval(
    mocker,
    client_request,
    service_one,
    mock_get_broadcast_template,
    fake_uuid,
    mock_update_broadcast_message,
    mock_update_broadcast_message_status,
    initial_status,
    expected_approval,
    trial_mode,
    expected_redirect,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status=initial_status,
        ),
    )
    service_one['restricted'] = trial_mode
    service_one['permissions'] += ['broadcast']

    client_request.post('.view_broadcast_message',
                        service_id=SERVICE_ONE_ID,
                        broadcast_message_id=fake_uuid,
                        _expected_redirect=expected_redirect(
                            service_id=SERVICE_ONE_ID,
                            _external=True,
                        ))

    if expected_approval:
        mock_update_broadcast_message.assert_called_once_with(
            service_id=SERVICE_ONE_ID,
            broadcast_message_id=fake_uuid,
            data={
                'starts_at': '2020-02-22T22:22:22',
                'finishes_at': '2020-02-23T22:21:22',
            },
        )
        mock_update_broadcast_message_status.assert_called_once_with(
            'broadcasting',
            service_id=SERVICE_ONE_ID,
            broadcast_message_id=fake_uuid,
        )
    else:
        assert mock_update_broadcast_message.called is False
        assert mock_update_broadcast_message_status.called is False
Ejemplo n.º 5
0
def test_view_pending_broadcast(
    mocker,
    client_request,
    service_one,
    active_user_with_permissions,
    mock_get_broadcast_template,
    fake_uuid,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at=None,
            status='pending-approval',
        ),
    )
    mocker.patch(
        'app.user_api_client.get_user',
        side_effect=[
            active_user_with_permissions,  # Current user
            user_json(id_=uuid.uuid4()),  # User who created broadcast
        ])
    service_one['permissions'] += ['broadcast']

    page = client_request.get(
        '.view_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )

    assert (normalize_spaces(page.select_one('.banner').text)) == (
        'Test User wants to broadcast Example template '
        'Start broadcasting now Reject this alert')

    form = page.select_one('form.banner')
    assert form['method'] == 'post'
    assert 'action' not in form
    assert form.select_one('button[type=submit]')

    link = form.select_one('a.govuk-link.govuk-link--destructive')
    assert link.text == 'Reject this alert'
    assert link['href'] == url_for(
        '.reject_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )
Ejemplo n.º 6
0
def test_cant_approve_own_broadcast(
    mocker,
    client_request,
    service_one,
    active_user_with_permissions,
    mock_get_broadcast_template,
    fake_uuid,
):
    service_one['restricted'] = False
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status='pending-approval',
        ),
    )
    mocker.patch(
        'app.user_api_client.get_user',
        side_effect=[
            active_user_with_permissions,  # Current user
            active_user_with_permissions,  # User who created broadcast (the same)
        ])
    service_one['permissions'] += ['broadcast']

    page = client_request.get(
        '.view_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )

    assert (normalize_spaces(page.select_one('.banner h1').text)) == (
        'Example template is waiting for approval')
    assert (normalize_spaces(page.select_one('.banner p').text)) == (
        'You need another member of your team to approve your alert.')
    assert not page.select('form')

    link = page.select_one('.banner a.govuk-link.govuk-link--destructive')
    assert link.text == 'Withdraw this alert'
    assert link['href'] == url_for(
        '.reject_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )
Ejemplo n.º 7
0
def test_raises_for_missing_areas(fake_uuid):
    broadcast_message = BroadcastMessage(broadcast_message_json(
        id_=fake_uuid,
        service_id=fake_uuid,
        template_id=fake_uuid,
        status='draft',
        created_by_id=fake_uuid,
        areas=[
            'wd20-E05009372',
            'something else',
        ],
    ))

    with pytest.raises(RuntimeError) as exception:
        broadcast_message.areas

    assert str(exception.value) == (
        'BroadcastMessage has 2 areas but 1 found in the library'
    )
Ejemplo n.º 8
0
def test_view_pending_broadcast(
    mocker,
    client_request,
    service_one,
    mock_get_broadcast_template,
    fake_uuid,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status='pending-approval',
        ),
    )
    service_one['permissions'] += ['broadcast']

    page = client_request.get(
        '.view_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )

    assert (normalize_spaces(page.select_one('.banner').text)) == (
        'Test User wants to broadcast this message until tomorrow at 11:23pm. '
        'Start broadcasting now Reject this broadcast')

    form = page.select_one('form.banner')
    assert form['method'] == 'post'
    assert 'action' not in form
    assert form.select_one('button[type=submit]')

    link = form.select_one('a.govuk-link.govuk-link--destructive')
    assert link.text == 'Reject this broadcast'
    assert link['href'] == url_for(
        '.reject_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )
Ejemplo n.º 9
0
def test_view_only_user_cant_approve_broadcast(
    mocker,
    client_request,
    service_one,
    active_user_with_permissions,
    active_user_view_permissions,
    mock_get_broadcast_template,
    fake_uuid,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status='pending-approval',
        ),
    )
    mocker.patch(
        'app.user_api_client.get_user',
        side_effect=[
            active_user_view_permissions,  # Current user
            active_user_with_permissions,  # User who created broadcast
        ])
    service_one['permissions'] += ['broadcast']

    page = client_request.get(
        '.view_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )

    assert (normalize_spaces(page.select_one('.banner').text)) == (
        'This alert is waiting for approval '
        'You don’t have permission to approve alerts.')

    assert not page.select_one('form')
    assert not page.select_one('.banner a')
Ejemplo n.º 10
0
def test_view_broadcast_message_page(
    mocker,
    client_request,
    service_one,
    active_user_with_permissions,
    mock_get_broadcast_template,
    fake_uuid,
    extra_fields,
    expected_paragraphs,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            approved_by_id=fake_uuid,
            starts_at='2020-02-20T20:20:20.000000',
            **extra_fields),
    )
    mocker.patch('app.user_api_client.get_user',
                 side_effect=[
                     active_user_with_permissions,
                     user_json(name='Alice'),
                     user_json(name='Bob'),
                     user_json(name='Carol'),
                 ])
    service_one['permissions'] += ['broadcast']

    page = client_request.get(
        '.view_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )

    assert [
        normalize_spaces(p.text) for p in page.select('main p.govuk-body')
    ] == expected_paragraphs
Ejemplo n.º 11
0
def test_reject_broadcast(
    mocker,
    client_request,
    service_one,
    mock_get_broadcast_template,
    fake_uuid,
    mock_update_broadcast_message,
    mock_update_broadcast_message_status,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status='pending-approval',
        ),
    )
    service_one['permissions'] += ['broadcast']

    client_request.get('.reject_broadcast_message',
                       service_id=SERVICE_ONE_ID,
                       broadcast_message_id=fake_uuid,
                       _expected_redirect=url_for(
                           '.broadcast_dashboard',
                           service_id=SERVICE_ONE_ID,
                           _external=True,
                       ))

    assert mock_update_broadcast_message.called is False

    mock_update_broadcast_message_status.assert_called_once_with(
        'rejected',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )
Ejemplo n.º 12
0
def test_can_approve_own_broadcast_in_trial_mode(
    mocker,
    client_request,
    service_one,
    active_user_with_permissions,
    mock_get_broadcast_template,
    fake_uuid,
):
    mocker.patch(
        'app.broadcast_message_api_client.get_broadcast_message',
        return_value=broadcast_message_json(
            id_=fake_uuid,
            service_id=SERVICE_ONE_ID,
            template_id=fake_uuid,
            created_by_id=fake_uuid,
            finishes_at='2020-02-23T23:23:23.000000',
            status='pending-approval',
        ),
    )
    mocker.patch(
        'app.user_api_client.get_user',
        side_effect=[
            active_user_with_permissions,  # Current user
            active_user_with_permissions,  # User who created broadcast (the same)
        ])
    service_one['permissions'] += ['broadcast']

    page = client_request.get(
        '.view_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )

    assert (normalize_spaces(page.select_one('.banner h1').text)) == (
        'Example template is waiting for approval')
    assert (normalize_spaces(page.select_one('.banner p').text)) == (
        'When you use a live account you’ll need another member of '
        'your team to approve your alert.')
    assert (normalize_spaces(
        page.select_one('.banner details summary').text)) == (
            'Approve your own alert')
    assert (normalize_spaces(page.select_one('.banner details ').text)) == (
        'Approve your own alert '
        'Because you’re in training mode you can approve your own '
        'alerts, to see how it works. '
        'No real alerts will be broadcast to anyone’s phone. '
        'Start broadcasting now '
        'Cancel this alert')

    form = page.select_one('.banner details form')
    assert form['method'] == 'post'
    assert 'action' not in form
    assert normalize_spaces(form.select_one('button[type=submit]').text) == (
        'Start broadcasting now')

    link = page.select_one('.banner a.govuk-link.govuk-link--destructive')
    assert link.text == 'Cancel this alert'
    assert link['href'] == url_for(
        '.reject_broadcast_message',
        service_id=SERVICE_ONE_ID,
        broadcast_message_id=fake_uuid,
    )