mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-09 17:45:32 -04:00
Merge pull request #3581 from alphagov/remove-end-time
Remove choice of ‘End time’ from broadcast journey
This commit is contained in:
@@ -1387,24 +1387,6 @@ class ChooseTimeForm(StripWhitespaceForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ChooseBroadcastDurationForm(StripWhitespaceForm):
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.finishes_at.choices = [
|
|
||||||
get_time_value_and_label(hour) for hour in get_next_hours_until(
|
|
||||||
get_furthest_possible_scheduled_time()
|
|
||||||
)
|
|
||||||
]
|
|
||||||
self.finishes_at.categories = get_next_days_until(
|
|
||||||
get_furthest_possible_scheduled_time()
|
|
||||||
)
|
|
||||||
|
|
||||||
finishes_at = RadioField(
|
|
||||||
'End time',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class CreateKeyForm(StripWhitespaceForm):
|
class CreateKeyForm(StripWhitespaceForm):
|
||||||
def __init__(self, existing_keys, *args, **kwargs):
|
def __init__(self, existing_keys, *args, **kwargs):
|
||||||
self.existing_key_names = [
|
self.existing_key_names = [
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ from app.main import main
|
|||||||
from app.main.forms import (
|
from app.main.forms import (
|
||||||
BroadcastAreaForm,
|
BroadcastAreaForm,
|
||||||
BroadcastAreaFormWithSelectAll,
|
BroadcastAreaFormWithSelectAll,
|
||||||
ChooseBroadcastDurationForm,
|
|
||||||
SearchByNameForm,
|
SearchByNameForm,
|
||||||
)
|
)
|
||||||
from app.models.broadcast_message import BroadcastMessage, BroadcastMessages
|
from app.models.broadcast_message import BroadcastMessage, BroadcastMessages
|
||||||
@@ -211,10 +210,8 @@ def preview_broadcast_message(service_id, broadcast_message_id):
|
|||||||
broadcast_message_id,
|
broadcast_message_id,
|
||||||
service_id=current_service.id,
|
service_id=current_service.id,
|
||||||
)
|
)
|
||||||
form = ChooseBroadcastDurationForm()
|
if request.method == 'POST':
|
||||||
|
broadcast_message.request_approval()
|
||||||
if form.validate_on_submit():
|
|
||||||
broadcast_message.request_approval(until=form.finishes_at.data)
|
|
||||||
return redirect(url_for(
|
return redirect(url_for(
|
||||||
'.view_broadcast_message',
|
'.view_broadcast_message',
|
||||||
service_id=current_service.id,
|
service_id=current_service.id,
|
||||||
@@ -224,7 +221,6 @@ def preview_broadcast_message(service_id, broadcast_message_id):
|
|||||||
return render_template(
|
return render_template(
|
||||||
'views/broadcast/preview-message.html',
|
'views/broadcast/preview-message.html',
|
||||||
broadcast_message=broadcast_message,
|
broadcast_message=broadcast_message,
|
||||||
form=form,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from notifications_utils.template import BroadcastPreviewTemplate
|
from notifications_utils.template import BroadcastPreviewTemplate
|
||||||
from orderedset import OrderedSet
|
from orderedset import OrderedSet
|
||||||
@@ -153,15 +153,15 @@ class BroadcastMessage(JSONModel):
|
|||||||
data=kwargs,
|
data=kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
def request_approval(self, until):
|
def request_approval(self):
|
||||||
self._update(
|
|
||||||
finishes_at=until,
|
|
||||||
)
|
|
||||||
self._set_status_to('pending-approval')
|
self._set_status_to('pending-approval')
|
||||||
|
|
||||||
def approve_broadcast(self):
|
def approve_broadcast(self):
|
||||||
self._update(
|
self._update(
|
||||||
starts_at=datetime.utcnow().isoformat(),
|
starts_at=datetime.utcnow().isoformat(),
|
||||||
|
finishes_at=(
|
||||||
|
datetime.utcnow() + timedelta(hours=23, minutes=59)
|
||||||
|
).isoformat(),
|
||||||
)
|
)
|
||||||
self._set_status_to('broadcasting')
|
self._set_status_to('broadcasting')
|
||||||
|
|
||||||
|
|||||||
@@ -29,17 +29,6 @@
|
|||||||
{{ broadcast_message.template|string }}
|
{{ broadcast_message.template|string }}
|
||||||
|
|
||||||
{% call form_wrapper() %}
|
{% call form_wrapper() %}
|
||||||
<h3 class="govuk-heading-s govuk-!-margin-top-6 govuk-!-margin-bottom-1">
|
|
||||||
Start time
|
|
||||||
</h3>
|
|
||||||
<p class="govuk-body govuk-!-margin-bottom-4">
|
|
||||||
Your broadcast will start when it’s approved by another member of your team.
|
|
||||||
</p>
|
|
||||||
{{ radio_select(
|
|
||||||
form.finishes_at,
|
|
||||||
show_now_as_default=False,
|
|
||||||
bold_legend=True
|
|
||||||
) }}
|
|
||||||
{{ page_footer('Submit for approval') }}
|
{{ page_footer('Submit for approval') }}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|
||||||
|
|||||||
@@ -532,29 +532,12 @@ def test_remove_broadcast_area_page(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('end_time', (
|
|
||||||
|
|
||||||
# Before now
|
|
||||||
pytest.param('2020-02-02T02:00:00', marks=pytest.mark.xfail),
|
|
||||||
|
|
||||||
# End of the current hour
|
|
||||||
pytest.param('2020-02-02T03:00:00'),
|
|
||||||
|
|
||||||
# Midnight 3 days ahead
|
|
||||||
pytest.param('2020-02-06T00:00:00'),
|
|
||||||
|
|
||||||
# 1am 4 days ahead
|
|
||||||
pytest.param('2020-02-06T01:00:00', marks=pytest.mark.xfail),
|
|
||||||
|
|
||||||
))
|
|
||||||
@freeze_time('2020-02-02 02:02:02')
|
|
||||||
def test_preview_broadcast_message_page(
|
def test_preview_broadcast_message_page(
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
mock_get_draft_broadcast_message,
|
mock_get_draft_broadcast_message,
|
||||||
mock_get_broadcast_template,
|
mock_get_broadcast_template,
|
||||||
fake_uuid,
|
fake_uuid,
|
||||||
end_time,
|
|
||||||
):
|
):
|
||||||
service_one['permissions'] += ['broadcast']
|
service_one['permissions'] += ['broadcast']
|
||||||
|
|
||||||
@@ -582,47 +565,21 @@ def test_preview_broadcast_message_page(
|
|||||||
assert form['method'] == 'post'
|
assert form['method'] == 'post'
|
||||||
assert 'action' not in form
|
assert 'action' not in form
|
||||||
|
|
||||||
radio_choices = [
|
|
||||||
choice['value'] for choice in form.select('input[type=radio][name=finishes_at]')
|
|
||||||
]
|
|
||||||
assert len(radio_choices) == 94
|
|
||||||
assert end_time in radio_choices
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('end_time', (
|
|
||||||
|
|
||||||
# Before now
|
|
||||||
pytest.param('2020-02-02T02:00:00', marks=pytest.mark.xfail),
|
|
||||||
|
|
||||||
# End of the current hour
|
|
||||||
pytest.param('2020-02-02T03:00:00'),
|
|
||||||
|
|
||||||
# Midnight 3 days ahead
|
|
||||||
pytest.param('2020-02-06T00:00:00'),
|
|
||||||
|
|
||||||
# 1am 4 days ahead
|
|
||||||
pytest.param('2020-02-06T01:00:00', marks=pytest.mark.xfail),
|
|
||||||
|
|
||||||
))
|
|
||||||
@freeze_time('2020-02-02 02:02:02')
|
@freeze_time('2020-02-02 02:02:02')
|
||||||
def test_start_broadcasting(
|
def test_start_broadcasting(
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
mock_get_draft_broadcast_message,
|
mock_get_draft_broadcast_message,
|
||||||
mock_get_broadcast_template,
|
mock_get_broadcast_template,
|
||||||
mock_update_broadcast_message,
|
|
||||||
mock_update_broadcast_message_status,
|
mock_update_broadcast_message_status,
|
||||||
fake_uuid,
|
fake_uuid,
|
||||||
end_time,
|
|
||||||
):
|
):
|
||||||
service_one['permissions'] += ['broadcast']
|
service_one['permissions'] += ['broadcast']
|
||||||
client_request.post(
|
client_request.post(
|
||||||
'.preview_broadcast_message',
|
'.preview_broadcast_message',
|
||||||
service_id=SERVICE_ONE_ID,
|
service_id=SERVICE_ONE_ID,
|
||||||
broadcast_message_id=fake_uuid,
|
broadcast_message_id=fake_uuid,
|
||||||
_data={
|
|
||||||
'finishes_at': end_time,
|
|
||||||
},
|
|
||||||
_expected_redirect=url_for(
|
_expected_redirect=url_for(
|
||||||
'main.view_broadcast_message',
|
'main.view_broadcast_message',
|
||||||
service_id=SERVICE_ONE_ID,
|
service_id=SERVICE_ONE_ID,
|
||||||
@@ -630,13 +587,6 @@ def test_start_broadcasting(
|
|||||||
_external=True,
|
_external=True,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
mock_update_broadcast_message.assert_called_once_with(
|
|
||||||
service_id=SERVICE_ONE_ID,
|
|
||||||
broadcast_message_id=fake_uuid,
|
|
||||||
data={
|
|
||||||
'finishes_at': end_time,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
mock_update_broadcast_message_status.assert_called_once_with(
|
mock_update_broadcast_message_status.assert_called_once_with(
|
||||||
'pending-approval',
|
'pending-approval',
|
||||||
service_id=SERVICE_ONE_ID,
|
service_id=SERVICE_ONE_ID,
|
||||||
@@ -644,32 +594,6 @@ def test_start_broadcasting(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_start_broadcasting_shows_validation_error(
|
|
||||||
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']
|
|
||||||
page = client_request.post(
|
|
||||||
'.preview_broadcast_message',
|
|
||||||
service_id=SERVICE_ONE_ID,
|
|
||||||
broadcast_message_id=fake_uuid,
|
|
||||||
_data={},
|
|
||||||
_expected_status=200,
|
|
||||||
)
|
|
||||||
assert mock_update_broadcast_message.called is False
|
|
||||||
assert mock_update_broadcast_message_status.called is False
|
|
||||||
assert normalize_spaces(
|
|
||||||
page.select_one('form fieldset legend .error-message').text
|
|
||||||
) == (
|
|
||||||
'Select an option'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('extra_fields, expected_paragraphs', (
|
@pytest.mark.parametrize('extra_fields, expected_paragraphs', (
|
||||||
({
|
({
|
||||||
'status': 'broadcasting',
|
'status': 'broadcasting',
|
||||||
@@ -945,6 +869,7 @@ def test_approve_broadcast(
|
|||||||
broadcast_message_id=fake_uuid,
|
broadcast_message_id=fake_uuid,
|
||||||
data={
|
data={
|
||||||
'starts_at': '2020-02-22T22:22:22',
|
'starts_at': '2020-02-22T22:22:22',
|
||||||
|
'finishes_at': '2020-02-23T22:21:22',
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
mock_update_broadcast_message_status.assert_called_once_with(
|
mock_update_broadcast_message_status.assert_called_once_with(
|
||||||
|
|||||||
Reference in New Issue
Block a user