From effe24893e0e0a4a33bd2f225104c5ea6484f958 Mon Sep 17 00:00:00 2001
From: Chris Hill-Scott {{ library.get_examples() }}
{% endif %}
@@ -81,15 +84,15 @@
{{ govukButton({
"element": "a",
"text": "Add broadcast areas",
- "href": url_for('.choose_broadcast_library', service_id=current_service.id),
+ "href": url_for('.choose_broadcast_library', service_id=current_service.id, broadcast_message_id=broadcast_message.id),
"classes": "govuk-button--secondary"
}) }}
- {{ template|string }} -
- - {% call form_wrapper() %} - {{ sticky_page_footer('Start broadcast') }} - {% endcall %} - - {% endif %} + {{ broadcast_message.template|string }} + {% call form_wrapper() %} + {{ sticky_page_footer('Start broadcast') }} + {% endcall %} {% endblock %} diff --git a/app/templates/views/templates/_template.html b/app/templates/views/templates/_template.html index 8f3bbf321..ce7ed729b 100644 --- a/app/templates/views/templates/_template.html +++ b/app/templates/views/templates/_template.html @@ -31,7 +31,7 @@ {% elif template.template_type == 'broadcast' %} {% if current_user.has_permissions('send_messages') %} diff --git a/tests/app/main/views/test_broadcast.py b/tests/app/main/views/test_broadcast.py index 511d516dc..984a3fd6e 100644 --- a/tests/app/main/views/test_broadcast.py +++ b/tests/app/main/views/test_broadcast.py @@ -1,17 +1,21 @@ import pytest from flask import url_for +from freezegun import freeze_time +from tests import sample_uuid from tests.conftest import SERVICE_ONE_ID, normalize_spaces +sample_uuid = sample_uuid() + @pytest.mark.parametrize('endpoint, extra_args', ( ('.broadcast_dashboard', {}), - ('.broadcast', {}), - ('.preview_broadcast_areas', {}), - ('.choose_broadcast_library', {}), - ('.choose_broadcast_area', {'library_slug': 'countries'}), - ('.remove_broadcast_area', {'area_slug': 'england'}), - ('.preview_broadcast_message', {}), + ('.broadcast', {'template_id': sample_uuid}), + ('.preview_broadcast_areas', {'broadcast_message_id': sample_uuid}), + ('.choose_broadcast_library', {'broadcast_message_id': sample_uuid}), + ('.choose_broadcast_area', {'broadcast_message_id': sample_uuid, 'library_slug': 'countries'}), + ('.remove_broadcast_area', {'broadcast_message_id': sample_uuid, 'area_slug': 'england'}), + ('.preview_broadcast_message', {'broadcast_message_id': sample_uuid}), )) def test_broadcast_pages_403_without_permission( client_request, @@ -56,14 +60,18 @@ def test_broadcast_dashboard( def test_broadcast_page( client_request, service_one, + fake_uuid, + mock_create_broadcast_message, ): service_one['permissions'] += ['broadcast'] client_request.get( '.broadcast', service_id=SERVICE_ONE_ID, + template_id=fake_uuid, _expected_redirect=url_for( '.preview_broadcast_areas', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, _external=True, ), ), @@ -72,22 +80,28 @@ def test_broadcast_page( def test_preview_broadcast_areas_page( client_request, service_one, + fake_uuid, + mock_get_draft_broadcast_message, ): service_one['permissions'] += ['broadcast'] client_request.get( '.preview_broadcast_areas', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, ) def test_choose_broadcast_library_page( client_request, service_one, + mock_get_draft_broadcast_message, + fake_uuid, ): service_one['permissions'] += ['broadcast'] page = client_request.get( '.choose_broadcast_library', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, ) assert [ (normalize_spaces(title.text), normalize_spaces(hint.text)) @@ -111,6 +125,7 @@ def test_choose_broadcast_library_page( assert page.select_one('a.file-list-filename-large.govuk-link')['href'] == url_for( '.choose_broadcast_area', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, library_slug='counties-and-unitary-authorities-in-england-and-wales', ) @@ -118,38 +133,114 @@ def test_choose_broadcast_library_page( def test_choose_broadcast_area_page( client_request, service_one, + mock_get_draft_broadcast_message, + fake_uuid, ): service_one['permissions'] += ['broadcast'] client_request.get( '.choose_broadcast_area', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, library_slug='countries', ) +def test_add_broadcast_area( + client_request, + service_one, + mock_get_draft_broadcast_message, + mock_update_broadcast_message, + fake_uuid, +): + service_one['permissions'] += ['broadcast'] + client_request.post( + '.choose_broadcast_area', + service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, + library_slug='countries', + _data={ + 'areas': ['england', 'wales'] + } + ) + mock_update_broadcast_message.assert_called_once_with( + service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, + data={ + 'areas': ['england', 'scotland', 'wales'] + }, + ) + + def test_remove_broadcast_area_page( client_request, service_one, + mock_get_draft_broadcast_message, + mock_update_broadcast_message, + fake_uuid, ): service_one['permissions'] += ['broadcast'] client_request.get( '.remove_broadcast_area', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, area_slug='england', _expected_redirect=url_for( '.preview_broadcast_areas', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, _external=True, ), - ), + ) + mock_update_broadcast_message.assert_called_once_with( + service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, + data={ + 'areas': ['scotland'] + }, + ) def test_preview_broadcast_message_page( client_request, service_one, + mock_get_draft_broadcast_message, + mock_get_broadcast_template, + fake_uuid, ): service_one['permissions'] += ['broadcast'] client_request.get( '.preview_broadcast_message', service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, ), + + +@freeze_time('2020-02-02 02:02:02.222222') +def test_start_broadcasting( + client_request, + service_one, + mock_get_draft_broadcast_message, + mock_get_broadcast_template, + mock_update_broadcast_message, + mock_update_broadcast_message_status, + fake_uuid, +): + service_one['permissions'] += ['broadcast'] + client_request.post( + '.preview_broadcast_message', + service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, + ), + mock_update_broadcast_message.assert_called_once_with( + service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, + data={ + 'starts_at': '2020-02-02T02:02:02.222222', + 'finishes_at': '2020-02-05T02:02:02.222222', + }, + ) + mock_update_broadcast_message_status.assert_called_once_with( + 'broadcasting', + service_id=SERVICE_ONE_ID, + broadcast_message_id=fake_uuid, + ) diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index 5afea8600..4a8c8bb72 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -696,6 +696,7 @@ def test_view_broadcast_template( ('Prepare broadcast', url_for( '.broadcast', service_id=SERVICE_ONE_ID, + template_id=fake_uuid, )), ('Edit', url_for( '.edit_service_template', diff --git a/tests/conftest.py b/tests/conftest.py index 13bdcb397..81f54d481 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4146,3 +4146,97 @@ def create_template( redact_personalisation=redact_personalisation, postage=postage, ) + + +@pytest.fixture(scope='function') +def mock_create_broadcast_message( + mocker, + fake_uuid, +): + def _create( + service_id, + template_id, + ): + return { + 'id': fake_uuid, + } + + return mocker.patch( + 'app.broadcast_message_api_client.create_broadcast_message', + side_effect=_create, + ) + + +@pytest.fixture(scope='function') +def mock_get_draft_broadcast_message( + mocker, + fake_uuid, +): + def _get( + *, service_id, broadcast_message_id + ): + return { + 'id': broadcast_message_id, + + 'service_id': service_id, + + 'template_id': fake_uuid, + 'template_version': 123, + 'template_name': 'Example template', + + 'personalisation': {}, + 'areas': [ + 'england', 'scotland', + ], + + 'status': 'draft', + + 'starts_at': None, + 'finishes_at': None, + + 'created_at': None, + 'approved_at': None, + 'cancelled_at': None, + 'updated_at': None, + + 'created_by_id': fake_uuid, + 'approved_by_id': None, + 'cancelled_by_id': None, + } + + return mocker.patch( + 'app.broadcast_message_api_client.get_broadcast_message', + side_effect=_get, + ) + + +@pytest.fixture(scope='function') +def mock_update_broadcast_message( + mocker, + fake_uuid, +): + def _update( + *, service_id, broadcast_message_id, data + ): + pass + + return mocker.patch( + 'app.broadcast_message_api_client.update_broadcast_message', + side_effect=_update, + ) + + +@pytest.fixture(scope='function') +def mock_update_broadcast_message_status( + mocker, + fake_uuid, +): + def _update( + status, *, service_id, broadcast_message_id + ): + pass + + return mocker.patch( + 'app.broadcast_message_api_client.update_broadcast_message_status', + side_effect=_update, + )