From 681cea1d34eb86b43d6304bb4b3673de2d8e5fe8 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Tue, 13 Jun 2017 11:20:41 +0100 Subject: [PATCH] Make AJAX requests on activity page POST not GET MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See parent commit for the reason we’re doing this. Currently our AJAX requests only work as `GET` requests. So this commit does a bit of work to make them work as `POST` requests. This is optional behaviour, and will only happen when the element in the page that should be updated with AJAX has the `data-form` attribute set. It will take the form that has the corresponding `id`, serialise it, and use that data as the body of the post request. If not form is specified it will not do the serialisation, and submit as a `GET` request as before. --- app/assets/javascripts/updateContent.js | 11 ++++++++--- app/main/views/jobs.py | 2 +- app/templates/components/ajax-block.html | 3 ++- app/templates/views/notifications.html | 7 ++++--- tests/app/main/views/test_activity.py | 9 +-------- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/updateContent.js b/app/assets/javascripts/updateContent.js index 89c87c550..a8a6146d6 100644 --- a/app/assets/javascripts/updateContent.js +++ b/app/assets/javascripts/updateContent.js @@ -19,10 +19,14 @@ var clearQueue = queue => (queue.length = 0); - var poll = function(renderer, resource, queue, interval) { + var poll = function(renderer, resource, queue, interval, form) { if (queue.push(renderer) === 1) $.ajax( - resource + resource, + { + 'method': form ? 'post' : 'get', + 'data': form ? $('#' + form).serialize() : {} + } ).done( response => flushQueue(queue, response) ).fail( @@ -41,7 +45,8 @@ getRenderer($(component)), $(component).data('resource'), getQueue($(component).data('resource')), - ($(component).data('interval-seconds') || 1.5) * 1000 + ($(component).data('interval-seconds') || 1.5) * 1000, + $(component).data('form') ); }; diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index db7d9f7ea..d10028b35 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -205,7 +205,7 @@ def view_notifications(service_id, message_type): ) -@main.route('/services//notifications/.json') +@main.route('/services//notifications/.json', methods=['GET', 'POST']) @user_has_permissions('view_activity', admin_override=True) def get_notifications_as_json(service_id, message_type): return jsonify(get_notifications( diff --git a/app/templates/components/ajax-block.html b/app/templates/components/ajax-block.html index 4382bf700..4d40a25b3 100644 --- a/app/templates/components/ajax-block.html +++ b/app/templates/components/ajax-block.html @@ -1,10 +1,11 @@ -{% macro ajax_block(partials, url, key, interval=2, finished=False) %} +{% macro ajax_block(partials, url, key, interval=2, finished=False, form='') %} {% if not finished %}
{% endif %} diff --git a/app/templates/views/notifications.html b/app/templates/views/notifications.html index e3a55cca0..a323c9ae8 100644 --- a/app/templates/views/notifications.html +++ b/app/templates/views/notifications.html @@ -24,9 +24,9 @@ method="post" action="{{ url_for('.view_notifications', service_id=current_service.id, message_type=message_type) }}" class="grid-row" + id="search-form" >
- {{ textbox( search_form.to, width='1-1', @@ -41,8 +41,9 @@ {{ ajax_block( partials, - url_for('.get_notifications_as_json', service_id=current_service.id, message_type=message_type, status=status, page=page, to=to), - 'notifications' + url_for('.get_notifications_as_json', service_id=current_service.id, message_type=message_type, status=status, page=page), + 'notifications', + form='search-form' ) }} {% endblock %} diff --git a/tests/app/main/views/test_activity.py b/tests/app/main/views/test_activity.py index c625165aa..61c5cc873 100644 --- a/tests/app/main/views/test_activity.py +++ b/tests/app/main/views/test_activity.py @@ -110,8 +110,7 @@ def test_can_show_notifications( assert query_dict['status'] == [status_argument] if expected_page_argument: assert query_dict['page'] == [str(expected_page_argument)] - if to_argument: - assert query_dict['to'] == [to_argument] + assert 'to' not in query_dict mock_get_notifications.assert_called_with( limit_days=7, @@ -135,7 +134,6 @@ def test_can_show_notifications( @pytest.mark.parametrize(( 'initial_query_arguments,' 'form_post_data,' - 'expected_status_field_value,' 'expected_search_box_contents' ), [ ( @@ -143,7 +141,6 @@ def test_can_show_notifications( 'message_type': 'sms', }, {}, - 'sending,delivered,failed', '', ), ( @@ -153,7 +150,6 @@ def test_can_show_notifications( { 'to': '+33(0)5-12-34-56-78', }, - 'sending,delivered,failed', '+33(0)5-12-34-56-78', ), ( @@ -165,7 +161,6 @@ def test_can_show_notifications( { 'to': 'test@example.com', }, - 'failed', 'test@example.com', ), ]) @@ -175,7 +170,6 @@ def test_search_recipient_form( mock_get_detailed_service, initial_query_arguments, form_post_data, - expected_status_field_value, expected_search_box_contents, ): response = logged_in_client.post( @@ -199,7 +193,6 @@ def test_search_recipient_form( query_dict = parse_qs(url.query) assert query_dict == {} - assert page.find("input", {'name': 'status'})['value'] == expected_status_field_value assert page.find("input", {'name': 'to'})['value'] == expected_search_box_contents