Add 'Uploads' hub and navigation

The uploads hub is just a page with text for now - there are no actions
available on the page. It is linked to from a new 'Uploads' menu item on
the left of the page which is only visible if your service has the
`letter` and `upload_letters` permissions and if the current user has
permissions to send messages.
This commit is contained in:
Katie Smith
2019-08-09 08:44:11 +01:00
parent 3d9aac4ac6
commit 8a453890e6
7 changed files with 68 additions and 0 deletions

View File

@@ -33,6 +33,7 @@ from app.main.views import ( # noqa isort:skip
styleguide,
templates,
two_factor,
uploads,
user_profile,
verify,
)

10
app/main/views/uploads.py Normal file
View File

@@ -0,0 +1,10 @@
from flask import render_template
from app.main import main
from app.utils import user_has_permissions
@main.route("/services/<service_id>/uploads")
@user_has_permissions('send_messages')
def uploads(service_id):
return render_template('views/uploads/index.html')

View File

@@ -300,6 +300,7 @@ class HeaderNavigation(Navigation):
'template_history',
'template_usage',
'trial_mode',
'uploads',
'usage',
'view_job',
'view_job_csv',
@@ -359,6 +360,9 @@ class MainNavigation(Navigation):
'view_template_version',
'view_template_versions',
},
'uploads': {
'uploads',
},
'team-members': {
'confirm_edit_user_email',
'confirm_edit_user_mobile_number',
@@ -844,6 +848,7 @@ class CaseworkNavigation(Navigation):
'two_factor_email_sent',
'update_email_branding',
'update_letter_branding',
'uploads',
'usage',
'user_information',
'user_profile',
@@ -1118,6 +1123,7 @@ class OrgNavigation(Navigation):
'two_factor_email_sent',
'update_email_branding',
'update_letter_branding',
'uploads',
'usage',
'user_information',
'user_profile',

View File

@@ -14,6 +14,9 @@
<li><a href="{{ url_for('.view_jobs', service_id=current_service.id) }}" {{ casework_navigation.is_selected('uploaded-files') }}>Uploaded files</a></li>
{% endif %}
{% endif %}
{% endif %}
{% if current_user.has_permissions('send_messages') and current_service.has_permission('letter') and current_service.has_permission('upload_letters') %}
<li><a href="{{ url_for('main.uploads', service_id=current_service.id) }}" {{ main_navigation.is_selected('uploads') }}>Uploads</a></li>
{% endif %}
<li><a href="{{ url_for('.manage_users', service_id=current_service.id) }}" {{ main_navigation.is_selected('team-members') }}>Team members</a></li>
{% if current_user.has_permissions('manage_service', allow_org_user=True) %}

View File

@@ -0,0 +1,16 @@
{% extends "withnav_template.html" %}
{% from "components/page-header.html" import page_header %}
{% block service_page_title %}
Uploads
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-two-thirds">
{{ page_header('Uploads') }}
<p>Upload a letter and Notify will print, pack and post it for you.</p>
</div>
</div>
{% endblock %}

View File

@@ -960,6 +960,8 @@ def test_menu_send_messages(
mock_get_inbound_sms_summary,
mock_get_free_sms_fragment_limit,
):
service_one['permissions'] = ['email', 'sms', 'letter', 'upload_letters']
with app_.test_request_context():
resp = _test_dashboard_menu(
mocker,
@@ -972,6 +974,7 @@ def test_menu_send_messages(
'main.choose_template',
service_id=service_one['id'],
) in page
assert url_for('main.uploads', service_id=service_one['id']) in page
assert url_for('main.manage_users', service_id=service_one['id']) in page
assert url_for('main.service_settings', service_id=service_one['id']) not in page
@@ -979,6 +982,30 @@ def test_menu_send_messages(
assert url_for('main.view_providers') not in page
def test_menu_send_messages_when_service_does_not_have_upload_letters_permission(
mocker,
app_,
api_user_active,
service_one,
mock_get_service_templates,
mock_get_jobs,
mock_get_template_statistics,
mock_get_service_statistics,
mock_get_usage,
mock_get_inbound_sms_summary,
mock_get_free_sms_fragment_limit,
):
with app_.test_request_context():
resp = _test_dashboard_menu(
mocker,
app_,
api_user_active,
service_one,
['view_activity', 'send_messages'])
page = resp.get_data(as_text=True)
assert url_for('main.uploads', service_id=service_one['id']) not in page
def test_menu_manage_service(
mocker,
app_,

View File

@@ -0,0 +1,5 @@
from tests.conftest import SERVICE_ONE_ID
def test_get_upload_hub_page(client_request):
client_request.get('main.uploads', service_id=SERVICE_ONE_ID)