mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-08 16:43:11 -04:00
Work in progress, all tests passing and implemented mocks for services_dao.
This commit is contained in:
@@ -8,11 +8,11 @@ from app.main.forms import AddServiceForm
|
|||||||
@main.route("/add-service", methods=['GET', 'POST'])
|
@main.route("/add-service", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def add_service():
|
def add_service():
|
||||||
# TODO fix up this
|
# TODO fix up this
|
||||||
form = AddServiceForm(services_dao.find_all_service_names)
|
form = AddServiceForm(services_dao.find_all_service_names)
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
user = users_dao.get_user_by_id(session['user_id'])
|
user = users_dao.get_user_by_id(session['user_id'])
|
||||||
services_dao.insert_new_service(form.service_name.data, user)
|
service_id = services_dao.insert_new_service(form.service_name.data, user)
|
||||||
return redirect(url_for('.dashboard', service_id=123))
|
return redirect(url_for('main.service_dashboard', service_id=service_id))
|
||||||
else:
|
else:
|
||||||
return render_template('views/add-service.html', form=form)
|
return render_template('views/add-service.html', form=form)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from ._jobs import jobs
|
|||||||
|
|
||||||
@main.route("/services/<int:service_id>/dashboard")
|
@main.route("/services/<int:service_id>/dashboard")
|
||||||
@login_required
|
@login_required
|
||||||
def dashboard(service_id):
|
def service_dashboard(service_id):
|
||||||
try:
|
try:
|
||||||
service = get_service_by_id(service_id)
|
service = get_service_by_id(service_id)
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
@@ -17,7 +17,7 @@ def dashboard(service_id):
|
|||||||
else:
|
else:
|
||||||
raise e
|
raise e
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/dashboard.html',
|
'views/service_dashboard.html',
|
||||||
jobs=jobs,
|
jobs=jobs,
|
||||||
free_text_messages_remaining=560,
|
free_text_messages_remaining=560,
|
||||||
spent_this_month='0.00',
|
spent_this_month='0.00',
|
||||||
|
|||||||
@@ -10,31 +10,31 @@ def index():
|
|||||||
|
|
||||||
@main.route("/register-from-invite")
|
@main.route("/register-from-invite")
|
||||||
@login_required
|
@login_required
|
||||||
def registerfrominvite():
|
def register_from_invite():
|
||||||
return render_template('views/register-from-invite.html')
|
return render_template('views/register-from-invite.html')
|
||||||
|
|
||||||
|
|
||||||
@main.route("/verify-mobile")
|
@main.route("/verify-mobile")
|
||||||
@login_required
|
@login_required
|
||||||
def verifymobile():
|
def verify_mobile():
|
||||||
return render_template('views/verify-mobile.html')
|
return render_template('views/verify-mobile.html')
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<int:service_id>/send-email")
|
@main.route("/services/<int:service_id>/send-email")
|
||||||
@login_required
|
@login_required
|
||||||
def sendemail(service_id):
|
def send_email(service_id):
|
||||||
return render_template('views/send-email.html')
|
return render_template('views/send-email.html')
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<int:service_id>/check-email")
|
@main.route("/services/<int:service_id>/check-email")
|
||||||
@login_required
|
@login_required
|
||||||
def checkemail(service_id):
|
def check_email(service_id):
|
||||||
return render_template('views/check-email.html')
|
return render_template('views/check-email.html')
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<int:service_id>/manage-users")
|
@main.route("/services/<int:service_id>/manage-users")
|
||||||
@login_required
|
@login_required
|
||||||
def manageusers(service_id):
|
def manage_users(service_id):
|
||||||
return render_template('views/manage-users.html', service_id=service_id)
|
return render_template('views/manage-users.html', service_id=service_id)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ messages = [
|
|||||||
|
|
||||||
@main.route("/services/<int:service_id>/jobs")
|
@main.route("/services/<int:service_id>/jobs")
|
||||||
@login_required
|
@login_required
|
||||||
def showjobs(service_id):
|
def view_jobs(service_id):
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/jobs.html',
|
'views/jobs.html',
|
||||||
jobs=jobs,
|
jobs=jobs,
|
||||||
@@ -57,7 +57,7 @@ def showjobs(service_id):
|
|||||||
|
|
||||||
@main.route("/services/<int:service_id>/jobs/<job_id>")
|
@main.route("/services/<int:service_id>/jobs/<job_id>")
|
||||||
@login_required
|
@login_required
|
||||||
def showjob(service_id, job_id):
|
def view_job(service_id, job_id):
|
||||||
|
|
||||||
# TODO the uploaded file name could be part of job definition
|
# TODO the uploaded file name could be part of job definition
|
||||||
# so won't need to be passed on from last view via session
|
# so won't need to be passed on from last view via session
|
||||||
@@ -86,7 +86,7 @@ def showjob(service_id, job_id):
|
|||||||
|
|
||||||
@main.route("/services/<int:service_id>/jobs/<job_id>/notification/<string:notification_id>")
|
@main.route("/services/<int:service_id>/jobs/<job_id>/notification/<string:notification_id>")
|
||||||
@login_required
|
@login_required
|
||||||
def shownotification(service_id, job_id, notification_id):
|
def view_notification(service_id, job_id, notification_id):
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/notification.html',
|
'views/notification.html',
|
||||||
message=[
|
message=[
|
||||||
|
|||||||
@@ -128,4 +128,4 @@ def confirm_delete(service_id):
|
|||||||
service_id=service_id
|
service_id=service_id
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.dashboard', service_id=service_id))
|
return redirect(url_for('.service_dashboard', service_id=service_id))
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ message_templates = [
|
|||||||
|
|
||||||
@main.route("/services/<int:service_id>/sms/send", methods=['GET', 'POST'])
|
@main.route("/services/<int:service_id>/sms/send", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def sendsms(service_id):
|
def send_sms(service_id):
|
||||||
form = CsvUploadForm()
|
form = CsvUploadForm()
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
try:
|
try:
|
||||||
@@ -53,7 +53,7 @@ def sendsms(service_id):
|
|||||||
filename)
|
filename)
|
||||||
csv_file.save(filepath)
|
csv_file.save(filepath)
|
||||||
_check_file(csv_file.filename, filepath)
|
_check_file(csv_file.filename, filepath)
|
||||||
return redirect(url_for('.checksms',
|
return redirect(url_for('.check_sms',
|
||||||
service_id=service_id,
|
service_id=service_id,
|
||||||
recipients=filename))
|
recipients=filename))
|
||||||
except (IOError, ValueError) as e:
|
except (IOError, ValueError) as e:
|
||||||
@@ -63,7 +63,7 @@ def sendsms(service_id):
|
|||||||
if isinstance(e, ValueError):
|
if isinstance(e, ValueError):
|
||||||
flash(str(e))
|
flash(str(e))
|
||||||
os.remove(filepath)
|
os.remove(filepath)
|
||||||
return redirect(url_for('.sendsms', service_id=service_id))
|
return redirect(url_for('.send_sms', service_id=service_id))
|
||||||
|
|
||||||
return render_template('views/send-sms.html',
|
return render_template('views/send-sms.html',
|
||||||
message_templates=message_templates,
|
message_templates=message_templates,
|
||||||
@@ -73,7 +73,7 @@ def sendsms(service_id):
|
|||||||
|
|
||||||
@main.route("/services/<int:service_id>/sms/check", methods=['GET', 'POST'])
|
@main.route("/services/<int:service_id>/sms/check", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def checksms(service_id):
|
def check_sms(service_id):
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
filename = request.args.get('recipients')
|
filename = request.args.get('recipients')
|
||||||
if not filename:
|
if not filename:
|
||||||
@@ -100,10 +100,10 @@ def checksms(service_id):
|
|||||||
# TODO when job is created record filename in job itself
|
# TODO when job is created record filename in job itself
|
||||||
# so downstream pages can get the original filename that way
|
# so downstream pages can get the original filename that way
|
||||||
session[upload_id] = filename
|
session[upload_id] = filename
|
||||||
return redirect(url_for('main.showjob', service_id=service_id, job_id=upload_id))
|
return redirect(url_for('main.view_job', service_id=service_id, job_id=upload_id))
|
||||||
except:
|
except:
|
||||||
flash('There as a problem saving the file')
|
flash('There as a problem saving the file')
|
||||||
return redirect(url_for('.checksms', recipients=filename))
|
return redirect(url_for('.check_sms', recipients=filename))
|
||||||
|
|
||||||
|
|
||||||
def _check_file(filename, filepath):
|
def _check_file(filename, filepath):
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ from app.main.forms import (
|
|||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile")
|
@main.route("/user-profile")
|
||||||
def userprofile():
|
def user_profile():
|
||||||
return render_template('views/user-profile.html')
|
return render_template('views/user-profile.html')
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/name", methods=['GET', 'POST'])
|
@main.route("/user-profile/name", methods=['GET', 'POST'])
|
||||||
def userprofile_name():
|
def user_profile_name():
|
||||||
|
|
||||||
form = ChangeNameForm()
|
form = ChangeNameForm()
|
||||||
|
|
||||||
@@ -26,11 +26,11 @@ def userprofile_name():
|
|||||||
form_field=form.new_name
|
form_field=form.new_name
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile'))
|
return redirect(url_for('.user_profile'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/email", methods=['GET', 'POST'])
|
@main.route("/user-profile/email", methods=['GET', 'POST'])
|
||||||
def userprofile_email():
|
def user_profile_email():
|
||||||
|
|
||||||
form = ChangeEmailForm()
|
form = ChangeEmailForm()
|
||||||
|
|
||||||
@@ -43,11 +43,11 @@ def userprofile_email():
|
|||||||
form_field=form.email_address
|
form_field=form.email_address
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile_email_authenticate'))
|
return redirect(url_for('.user_profile_email_authenticate'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/email/authenticate", methods=['GET', 'POST'])
|
@main.route("/user-profile/email/authenticate", methods=['GET', 'POST'])
|
||||||
def userprofile_email_authenticate():
|
def user_profile_email_authenticate():
|
||||||
|
|
||||||
form = ConfirmPasswordForm()
|
form = ConfirmPasswordForm()
|
||||||
|
|
||||||
@@ -56,14 +56,14 @@ def userprofile_email_authenticate():
|
|||||||
'views/user-profile/authenticate.html',
|
'views/user-profile/authenticate.html',
|
||||||
thing='email address',
|
thing='email address',
|
||||||
form=form,
|
form=form,
|
||||||
back_link=url_for('.userprofile_email')
|
back_link=url_for('.user_profile_email')
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile_email_confirm'))
|
return redirect(url_for('.user_profile_email_confirm'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/email/confirm", methods=['GET', 'POST'])
|
@main.route("/user-profile/email/confirm", methods=['GET', 'POST'])
|
||||||
def userprofile_email_confirm():
|
def user_profile_email_confirm():
|
||||||
|
|
||||||
form = ConfirmEmailForm()
|
form = ConfirmEmailForm()
|
||||||
|
|
||||||
@@ -74,11 +74,11 @@ def userprofile_email_confirm():
|
|||||||
thing='email address'
|
thing='email address'
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile'))
|
return redirect(url_for('.user_profile'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/mobile-number", methods=['GET', 'POST'])
|
@main.route("/user-profile/mobile-number", methods=['GET', 'POST'])
|
||||||
def userprofile_mobile_number():
|
def user_profile_mobile_number():
|
||||||
|
|
||||||
form = ChangeMobileNumberForm()
|
form = ChangeMobileNumberForm()
|
||||||
|
|
||||||
@@ -91,11 +91,11 @@ def userprofile_mobile_number():
|
|||||||
form_field=form.mobile_number
|
form_field=form.mobile_number
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile_mobile_number_authenticate'))
|
return redirect(url_for('.user_profile_mobile_number_authenticate'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/mobile-number/authenticate", methods=['GET', 'POST'])
|
@main.route("/user-profile/mobile-number/authenticate", methods=['GET', 'POST'])
|
||||||
def userprofile_mobile_number_authenticate():
|
def user_profile_mobile_number_authenticate():
|
||||||
|
|
||||||
form = ConfirmPasswordForm()
|
form = ConfirmPasswordForm()
|
||||||
|
|
||||||
@@ -104,14 +104,14 @@ def userprofile_mobile_number_authenticate():
|
|||||||
'views/user-profile/authenticate.html',
|
'views/user-profile/authenticate.html',
|
||||||
thing='mobile number',
|
thing='mobile number',
|
||||||
form=form,
|
form=form,
|
||||||
back_link=url_for('.userprofile_mobile_number_confirm')
|
back_link=url_for('.user_profile_mobile_number_confirm')
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile_mobile_number_confirm'))
|
return redirect(url_for('.user_profile_mobile_number_confirm'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/mobile-number/confirm", methods=['GET', 'POST'])
|
@main.route("/user-profile/mobile-number/confirm", methods=['GET', 'POST'])
|
||||||
def userprofile_mobile_number_confirm():
|
def user_profile_mobile_number_confirm():
|
||||||
|
|
||||||
form = ConfirmMobileNumberForm()
|
form = ConfirmMobileNumberForm()
|
||||||
|
|
||||||
@@ -122,11 +122,11 @@ def userprofile_mobile_number_confirm():
|
|||||||
thing='mobile number'
|
thing='mobile number'
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile'))
|
return redirect(url_for('.user_profile'))
|
||||||
|
|
||||||
|
|
||||||
@main.route("/user-profile/password", methods=['GET', 'POST'])
|
@main.route("/user-profile/password", methods=['GET', 'POST'])
|
||||||
def userprofile_password():
|
def user_profile_password():
|
||||||
|
|
||||||
form = ChangePasswordForm()
|
form = ChangePasswordForm()
|
||||||
|
|
||||||
@@ -136,4 +136,4 @@ def userprofile_password():
|
|||||||
form=form
|
form=form
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.userprofile'))
|
return redirect(url_for('.user_profile'))
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
{% if not current_user.is_authenticated() %}
|
{% if not current_user.is_authenticated() %}
|
||||||
{% set homepage_url = url_for('main.index') %}
|
{% set homepage_url = url_for('main.index') %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% set homepage_url = url_for('main.dashboard', service_id=123) %}
|
{% set homepage_url = url_for('main.choose_service') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="column-half management-navigation-account">
|
<div class="column-half management-navigation-account">
|
||||||
<a href="{{ url_for('main.userprofile') }}">{{ current_user.name }}</a>
|
<a href="{{ url_for('main.user_profile') }}">{{ current_user.name }}</a>
|
||||||
<a href="{{ url_for('main.sign_out')}}">Sign out</a>
|
<a href="{{ url_for('main.sign_out')}}">Sign out</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
<nav class="navigation">
|
<nav class="navigation">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.dashboard', service_id=123) }}">Dashboard</a></li>
|
<li><a href="{{ url_for('.service_dashboard', service_id=123) }}">Dashboard</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.sendsms', service_id=123) }}">Send text messages</a></li>
|
<li><a href="{{ url_for('.send_sms', service_id=123) }}">Send text messages</a></li>
|
||||||
<li><a href="{{ url_for('.sendemail', service_id=123) }}">Send emails</a></li>
|
<li><a href="{{ url_for('.send_email', service_id=123) }}">Send emails</a></li>
|
||||||
<li><a href="{{ url_for('.showjobs', service_id=123) }}">Activity</a></li>
|
<li><a href="{{ url_for('.view_jobs', service_id=123) }}">Activity</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.apikeys', service_id=123) }}">API keys and documentation</a></li>
|
<li><a href="{{ url_for('.apikeys', service_id=123) }}">API keys and documentation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.manageusers', service_id=123) }}">Manage users</a></li>
|
<li><a href="{{ url_for('.manage_users', service_id=123) }}">Manage users</a></li>
|
||||||
<li><a href="{{ url_for('.service_settings', service_id=123) }}">Service settings</a></li>
|
<li><a href="{{ url_for('.service_settings', service_id=123) }}">Service settings</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ GOV.UK Notify | API keys and documentation
|
|||||||
<p>Here's where developers can access information about the API and access keys</p>
|
<p>Here's where developers can access information about the API and access keys</p>
|
||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
back_link=url_for('.dashboard', service_id=service_id),
|
back_link=url_for('.service_dashboard', service_id=service_id),
|
||||||
back_link_text='Back to dashboard'
|
back_link_text='Back to dashboard'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
{% for rejected in upload_result.rejects %}
|
{% for rejected in upload_result.rejects %}
|
||||||
<p>Line {{rejected.line_number}}: {{rejected.phone }}</a>
|
<p>Line {{rejected.line_number}}: {{rejected.phone }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<p><a href="{{url_for('.sendsms', service_id=service_id)}}" class="button">Go back and resolve errors</a></p>
|
<p><a href="{{url_for('.send_sms', service_id=service_id)}}" class="button">Go back and resolve errors</a></p>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
button_text = "Send {} text messages".format(upload_result.valid|count),
|
button_text = "Send {} text messages".format(upload_result.valid|count),
|
||||||
back_link = url_for(".sendsms", service_id=service_id)
|
back_link = url_for(".send_sms", service_id=service_id)
|
||||||
)}}
|
)}}
|
||||||
|
|
||||||
{% if upload_result.valid | count > 6 %}
|
{% if upload_result.valid | count > 6 %}
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
button_text = "Send {} text messages".format(upload_result.valid|count),
|
button_text = "Send {} text messages".format(upload_result.valid|count),
|
||||||
back_link = url_for(".sendsms", service_id=service_id)
|
back_link = url_for(".send_sms", service_id=service_id)
|
||||||
)}}
|
)}}
|
||||||
|
|
||||||
<input type='hidden' name='recipients' value='{{filename}}'>
|
<input type='hidden' name='recipients' value='{{filename}}'>
|
||||||
|
|||||||
@@ -14,11 +14,11 @@
|
|||||||
{{ browse_list([
|
{{ browse_list([
|
||||||
{
|
{
|
||||||
'title': 'MOT Reminders',
|
'title': 'MOT Reminders',
|
||||||
'link': url_for('.dashboard', service_id=123)
|
'link': url_for('.service_dashboard', service_id=123)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'title': 'Vehicle Tax',
|
'title': 'Vehicle Tax',
|
||||||
'link': url_for('.dashboard', service_id=123)
|
'link': url_for('.service_dashboard', service_id=123)
|
||||||
},
|
},
|
||||||
]) }}
|
]) }}
|
||||||
{{ browse_list([
|
{{ browse_list([
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ GOV.UK Notify | Edit template
|
|||||||
{{ textbox(form.template_body, highlight_tags=True) }}
|
{{ textbox(form.template_body, highlight_tags=True) }}
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Save and continue',
|
'Save and continue',
|
||||||
back_link=url_for('.dashboard', service_id=service_id),
|
back_link=url_for('.service_dashboard', service_id=service_id),
|
||||||
back_link_text='Back to manage templates'
|
back_link_text='Back to manage templates'
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -52,10 +52,10 @@ GOV.UK Notify | Notifications activity
|
|||||||
]
|
]
|
||||||
) %}
|
) %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.shownotification', service_id=service_id, job_id=456, notification_id=item.id) }}">{{item.phone}}</a>
|
<a href="{{ url_for('.view_notification', service_id=service_id, job_id=456, notification_id=item.id) }}">{{item.phone}}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.shownotification', service_id=service_id, job_id=456, notification_id=item.id) }}">{{item.message[:50]}}…</a>
|
<a href="{{ url_for('.view_notification', service_id=service_id, job_id=456, notification_id=item.id) }}">{{item.message[:50]}}…</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field(
|
{% call field(
|
||||||
align='right',
|
align='right',
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ GOV.UK Notify | Notifications activity
|
|||||||
field_headings=['Job', 'File', 'Time', 'Status']
|
field_headings=['Job', 'File', 'Time', 'Status']
|
||||||
) %}
|
) %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.showjob', service_id=service_id, job_id=456) }}">{{ item.file }}</a>
|
<a href="{{ url_for('.view_job', service_id=service_id, job_id=456) }}">{{ item.file }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.showjob', service_id=service_id, job_id=456) }}">{{ item.job }}</a>
|
<a href="{{ url_for('.view_job', service_id=service_id, job_id=456) }}">{{ item.job }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
{{ item.time }}
|
{{ item.time }}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ GOV.UK Notify | Manage users
|
|||||||
<p>Here's where you can add or remove users of a service.</p>
|
<p>Here's where you can add or remove users of a service.</p>
|
||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
back_link = url_for('.dashboard', service_id=service_id),
|
back_link = url_for('.service_dashboard', service_id=service_id),
|
||||||
back_link_text = 'Back to dashboard'
|
back_link_text = 'Back to dashboard'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ GOV.UK Notify | Notifications activity
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
back_link = url_for('.showjob', service_id=service_id, job_id=job_id),
|
back_link = url_for('.view_job', service_id=service_id, job_id=job_id),
|
||||||
back_link_text = 'View other messages in this job'
|
back_link_text = 'View other messages in this job'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
|
|||||||
@@ -30,10 +30,10 @@
|
|||||||
field_headings=['Job', 'File', 'Time', 'Status']
|
field_headings=['Job', 'File', 'Time', 'Status']
|
||||||
) %}
|
) %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.showjob', service_id=service_id, job_id=456) }}">{{ item.file }}</a>
|
<a href="{{ url_for('.view_job', service_id=service_id, job_id=456) }}">{{ item.file }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.showjob', service_id=service_id, job_id=456) }}">{{ item.job }}</a>
|
<a href="{{ url_for('.view_job', service_id=service_id, job_id=456) }}">{{ item.job }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
{{ item.time }}
|
{{ item.time }}
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
<p>
|
<p>
|
||||||
<a href={{ url_for('.showjobs', service_id=service_id) }}>See all notifications activity</a>
|
<a href={{ url_for('.view_jobs', service_id=service_id) }}>See all notifications activity</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
@@ -11,10 +11,10 @@
|
|||||||
|
|
||||||
{% call(item) list_table(
|
{% call(item) list_table(
|
||||||
[
|
[
|
||||||
{'label': 'Name', 'value': current_user.name, 'url': url_for('.userprofile_name')},
|
{'label': 'Name', 'value': current_user.name, 'url': url_for('.user_profile_name')},
|
||||||
{'label': 'Email address', 'value': current_user.email_address, 'url': url_for('.userprofile_email')},
|
{'label': 'Email address', 'value': current_user.email_address, 'url': url_for('.user_profile_email')},
|
||||||
{'label': 'Mobile number', 'value': current_user.mobile_number, 'url': url_for('.userprofile_mobile_number')},
|
{'label': 'Mobile number', 'value': current_user.mobile_number, 'url': url_for('.user_profile_mobile_number')},
|
||||||
{'label': 'Password', 'value': 'Last changed 1 January 2016, 10:00AM', 'url': url_for('.userprofile_password')},
|
{'label': 'Password', 'value': 'Last changed 1 January 2016, 10:00AM', 'url': url_for('.user_profile_password')},
|
||||||
],
|
],
|
||||||
caption='Account settings',
|
caption='Account settings',
|
||||||
field_headings=['Setting', 'Value', 'Link to change'],
|
field_headings=['Setting', 'Value', 'Link to change'],
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ GOV.UK Notify | Service settings
|
|||||||
{{ textbox(form.new_password) }}
|
{{ textbox(form.new_password) }}
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Save',
|
'Save',
|
||||||
back_link=url_for('.userprofile'),
|
back_link=url_for('.user_profile'),
|
||||||
back_link_text="Back to your profile"
|
back_link_text="Back to your profile"
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ GOV.UK Notify | Service settings
|
|||||||
{{ textbox(form_field) }}
|
{{ textbox(form_field) }}
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Save',
|
'Save',
|
||||||
back_link=url_for('.userprofile'),
|
back_link=url_for('.user_profile'),
|
||||||
back_link_text="Back to your profile"
|
back_link_text="Back to your profile"
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ GOV.UK Notify | Service settings
|
|||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Confirm',
|
'Confirm',
|
||||||
destructive=destructive,
|
destructive=destructive,
|
||||||
back_link=url_for('.userprofile')
|
back_link=url_for('.user_profile')
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ from werkzeug.datastructures import MultiDict
|
|||||||
def test_form_should_have_errors_when_duplicate_service_is_added(app_,
|
def test_form_should_have_errors_when_duplicate_service_is_added(app_,
|
||||||
db_,
|
db_,
|
||||||
db_session):
|
db_session):
|
||||||
|
def _get_form_names():
|
||||||
|
return ['some service', 'more names']
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
form = AddServiceForm(['some service', 'more names'],
|
form = AddServiceForm(_get_form_names,
|
||||||
formdata=MultiDict([('service_name', 'some service')]))
|
formdata=MultiDict([('service_name', 'some service')]))
|
||||||
form.validate()
|
form.validate()
|
||||||
assert {'service_name': ['Service name already exists']} == form.errors
|
assert {'service_name': ['Service name already exists']} == form.errors
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ from datetime import datetime, timedelta
|
|||||||
|
|
||||||
from app.main.dao import verify_codes_dao
|
from app.main.dao import verify_codes_dao
|
||||||
from app.main.forms import TwoFactorForm
|
from app.main.forms import TwoFactorForm
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_form_is_valid_returns_no_errors(app_, db_, db_session):
|
def test_form_is_valid_returns_no_errors(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '12345'}) as req:
|
data={'sms_code': '12345'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = TwoFactorForm(codes)
|
form = TwoFactorForm(codes)
|
||||||
@@ -17,7 +17,7 @@ def test_form_is_valid_returns_no_errors(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_returns_errors_when_code_is_too_short(app_, db_, db_session):
|
def test_returns_errors_when_code_is_too_short(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '145'}) as req:
|
data={'sms_code': '145'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = TwoFactorForm(codes)
|
form = TwoFactorForm(codes)
|
||||||
@@ -28,7 +28,7 @@ def test_returns_errors_when_code_is_too_short(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_returns_errors_when_code_is_missing(app_, db_, db_session):
|
def test_returns_errors_when_code_is_missing(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={}) as req:
|
data={}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = TwoFactorForm(codes)
|
form = TwoFactorForm(codes)
|
||||||
@@ -39,7 +39,7 @@ def test_returns_errors_when_code_is_missing(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_returns_errors_when_code_contains_letters(app_, db_, db_session):
|
def test_returns_errors_when_code_contains_letters(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': 'asdfg'}) as req:
|
data={'sms_code': 'asdfg'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = TwoFactorForm(codes)
|
form = TwoFactorForm(codes)
|
||||||
@@ -50,7 +50,7 @@ def test_returns_errors_when_code_contains_letters(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_should_return_errors_when_code_is_expired(app_, db_, db_session):
|
def test_should_return_errors_when_code_is_expired(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '23456'}) as req:
|
data={'sms_code': '23456'}) as req:
|
||||||
user = create_test_user('active')
|
user = create_test_user('active')
|
||||||
verify_codes_dao.add_code_with_expiry(user_id=user.id,
|
verify_codes_dao.add_code_with_expiry(user_id=user.id,
|
||||||
code='23456',
|
code='23456',
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from app.main.dao import verify_codes_dao
|
from app.main.dao import verify_codes_dao
|
||||||
from app.main.forms import VerifyForm
|
from app.main.forms import VerifyForm
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_form_should_have_error_when_code_is_not_valid(app_, db_, db_session):
|
def test_form_should_have_error_when_code_is_not_valid(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '12345aa', 'email_code': 'abcde'}) as req:
|
data={'sms_code': '12345aa', 'email_code': 'abcde'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = VerifyForm(codes)
|
form = VerifyForm(codes)
|
||||||
@@ -21,7 +21,7 @@ def test_form_should_have_error_when_code_is_not_valid(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_should_return_errors_when_code_missing(app_, db_, db_session):
|
def test_should_return_errors_when_code_missing(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={}) as req:
|
data={}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = VerifyForm(codes)
|
form = VerifyForm(codes)
|
||||||
@@ -35,7 +35,7 @@ def test_should_return_errors_when_code_missing(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_should_return_errors_when_code_is_too_short(app_, db_, db_session):
|
def test_should_return_errors_when_code_is_too_short(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '123', 'email_code': '123'}) as req:
|
data={'sms_code': '123', 'email_code': '123'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = VerifyForm(codes)
|
form = VerifyForm(codes)
|
||||||
@@ -49,7 +49,7 @@ def test_should_return_errors_when_code_is_too_short(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_should_return_errors_when_code_does_not_match(app_, db_, db_session):
|
def test_should_return_errors_when_code_does_not_match(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '34567', 'email_code': '34567'}) as req:
|
data={'sms_code': '34567', 'email_code': '34567'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
codes = verify_codes_dao.get_codes(user.id)
|
codes = verify_codes_dao.get_codes(user.id)
|
||||||
form = VerifyForm(codes)
|
form = VerifyForm(codes)
|
||||||
@@ -63,8 +63,8 @@ def test_should_return_errors_when_code_does_not_match(app_, db_, db_session):
|
|||||||
|
|
||||||
def test_should_return_errors_when_code_is_expired(app_, db_, db_session):
|
def test_should_return_errors_when_code_is_expired(app_, db_, db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '23456',
|
data={'sms_code': '23456',
|
||||||
'email_code': '23456'}) as req:
|
'email_code': '23456'}) as req:
|
||||||
user = create_test_user('pending')
|
user = create_test_user('pending')
|
||||||
verify_codes_dao.add_code_with_expiry(user_id=user.id,
|
verify_codes_dao.add_code_with_expiry(user_id=user.id,
|
||||||
code='23456',
|
code='23456',
|
||||||
@@ -89,8 +89,8 @@ def test_should_return_valid_form_when_many_codes_exist(app_,
|
|||||||
db_,
|
db_,
|
||||||
db_session):
|
db_session):
|
||||||
with app_.test_request_context(method='POST',
|
with app_.test_request_context(method='POST',
|
||||||
data={'sms_code': '23456',
|
data={'sms_code': '23456',
|
||||||
'email_code': '23456'}) as req:
|
'email_code': '23456'}) as req:
|
||||||
user = set_up_test_data()
|
user = set_up_test_data()
|
||||||
verify_codes_dao.add_code(user_id=user.id, code='23456', code_type='email')
|
verify_codes_dao.add_code(user_id=user.id, code='23456', code_type='email')
|
||||||
verify_codes_dao.add_code(user_id=user.id, code='23456', code_type='sms')
|
verify_codes_dao.add_code(user_id=user.id, code='23456', code_type='sms')
|
||||||
|
|||||||
@@ -4,14 +4,12 @@ from tests import create_test_user
|
|||||||
from app.models import User
|
from app.models import User
|
||||||
|
|
||||||
|
|
||||||
def test_get_should_render_add_service_template(app_, db_, db_session):
|
def test_get_should_render_add_service_template(app_, db_, db_session, mock_get_service):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = create_test_user('active')
|
user = create_test_user('active')
|
||||||
client.login(user)
|
client.login(user)
|
||||||
verify_codes_dao.add_code(user_id=user.id, code='12345', code_type='sms')
|
response = client.get(url_for('main.add_service'))
|
||||||
client.post(url_for('main.two_factor'), data={'sms_code': '12345'})
|
|
||||||
response = client.get('/add-service')
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Set up notifications for your service' in response.get_data(as_text=True)
|
assert 'Set up notifications for your service' in response.get_data(as_text=True)
|
||||||
|
|
||||||
@@ -29,7 +27,7 @@ def test_should_add_service_and_redirect_to_next_page(app_,
|
|||||||
url_for('main.add_service'),
|
url_for('main.add_service'),
|
||||||
data={'service_name': 'testing the post'})
|
data={'service_name': 'testing the post'})
|
||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
assert response.location == url_for('main.dashboard', service_id=123, _external=True)
|
assert response.location == url_for('main.service_dashboard', service_id=101, _external=True)
|
||||||
assert mock_create_service.called
|
assert mock_create_service.called
|
||||||
assert mock_get_services.called
|
assert mock_get_services.called
|
||||||
|
|
||||||
@@ -37,11 +35,12 @@ def test_should_add_service_and_redirect_to_next_page(app_,
|
|||||||
def test_should_return_form_errors_when_service_name_is_empty(app_,
|
def test_should_return_form_errors_when_service_name_is_empty(app_,
|
||||||
db_,
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
active_user):
|
active_user,
|
||||||
|
mock_get_service):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
client.login(active_user)
|
client.login(active_user)
|
||||||
response = client.post('/add-service', data={})
|
response = client.post(url_for('main.add_service'), data={})
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Service name can not be empty' in response.get_data(as_text=True)
|
assert 'Service name can not be empty' in response.get_data(as_text=True)
|
||||||
|
|
||||||
@@ -54,7 +53,8 @@ def test_should_return_form_errors_with_duplicate_service_name(app_,
|
|||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = User.query.first()
|
user = User.query.first()
|
||||||
client.login(user)
|
client.login(user)
|
||||||
response = client.post('/add-service', data={'service_name': 'service_one'})
|
response = client.post(
|
||||||
|
url_for('main.add_service'), data={'service_name': 'service_one'})
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Service name already exists' in response.get_data(as_text=True)
|
assert 'Service name already exists' in response.get_data(as_text=True)
|
||||||
assert mock_get_services.called
|
assert mock_get_services.called
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_choose_services_page(app_,
|
def test_should_show_choose_services_page(app_,
|
||||||
db_,
|
db_,
|
||||||
db_session):
|
db_session,
|
||||||
|
active_user):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = create_test_user('active')
|
client.login(active_user)
|
||||||
client.login(user)
|
response = client.get(url_for('main.choose_service'))
|
||||||
response = client.get('/services')
|
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Choose service' in response.get_data(as_text=True)
|
assert 'Choose service' in response.get_data(as_text=True)
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
from app.main.dao import verify_codes_dao, users_dao
|
from app.main.dao import verify_codes_dao, users_dao
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_email_code_not_received_template_and_populate_email_address(db_,
|
def test_should_render_email_code_not_received_template_and_populate_email_address(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -19,7 +20,8 @@ def test_should_render_email_code_not_received_template_and_populate_email_addre
|
|||||||
assert 'value="test@user.gov.uk"' in response.get_data(as_text=True)
|
assert 'value="test@user.gov.uk"' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_check_and_resend_email_code_redirect_to_verify(db_,
|
def test_should_check_and_resend_email_code_redirect_to_verify(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -35,14 +37,14 @@ def test_should_check_and_resend_email_code_redirect_to_verify(db_,
|
|||||||
assert response.location == url_for('main.verify', _external=True)
|
assert response.location == url_for('main.verify', _external=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_text_code_not_received_template(db_,
|
def test_should_render_text_code_not_received_template(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
with client.session_transaction() as session:
|
with client.session_transaction() as session:
|
||||||
_set_up_mocker(mocker)
|
|
||||||
user = create_test_user('pending')
|
user = create_test_user('pending')
|
||||||
session['user_email'] = user.email_address
|
session['user_email'] = user.email_address
|
||||||
verify_codes_dao.add_code(user.id, code='12345', code_type='sms')
|
verify_codes_dao.add_code(user.id, code='12345', code_type='sms')
|
||||||
@@ -53,7 +55,8 @@ def test_should_render_text_code_not_received_template(db_,
|
|||||||
assert 'value="+441234123412"'
|
assert 'value="+441234123412"'
|
||||||
|
|
||||||
|
|
||||||
def test_should_check_and_redirect_to_verify(db_,
|
def test_should_check_and_redirect_to_verify(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -69,7 +72,8 @@ def test_should_check_and_redirect_to_verify(db_,
|
|||||||
assert response.location == url_for('main.verify', _external=True)
|
assert response.location == url_for('main.verify', _external=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_email_address_resend_code(db_,
|
def test_should_update_email_address_resend_code(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -87,7 +91,8 @@ def test_should_update_email_address_resend_code(db_,
|
|||||||
assert updated_user.email_address == 'new@address.gov.uk'
|
assert updated_user.email_address == 'new@address.gov.uk'
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_mobile_number_resend_code(db_,
|
def test_should_update_mobile_number_resend_code(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -105,13 +110,14 @@ def test_should_update_mobile_number_resend_code(db_,
|
|||||||
assert updated_user.mobile_number == '+44 7700 900 460'
|
assert updated_user.mobile_number == '+44 7700 900 460'
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_verification_code_not_received(db_,
|
def test_should_render_verification_code_not_received(app_,
|
||||||
db_session):
|
db_,
|
||||||
|
db_session,
|
||||||
|
active_user):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
with client.session_transaction() as session:
|
with client.session_transaction() as session:
|
||||||
user = create_test_user('active')
|
session['user_email'] = active_user.email_address
|
||||||
session['user_email'] = user.email_address
|
|
||||||
response = client.get(url_for('main.verification_code_not_received'))
|
response = client.get(url_for('main.verification_code_not_received'))
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Resend verification code' in response.get_data(as_text=True)
|
assert 'Resend verification code' in response.get_data(as_text=True)
|
||||||
@@ -119,34 +125,36 @@ def test_should_render_verification_code_not_received(db_,
|
|||||||
'speak to your service manager to reset the number.' in response.get_data(as_text=True)
|
'speak to your service manager to reset the number.' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_check_and_redirect_to_two_factor(db_,
|
def test_check_and_redirect_to_two_factor(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
|
active_user,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
with client.session_transaction() as session:
|
with client.session_transaction() as session:
|
||||||
user = create_test_user('active')
|
session['user_email'] = active_user.email_address
|
||||||
session['user_email'] = user.email_address
|
|
||||||
response = client.get(url_for('main.check_and_resend_verification_code'))
|
response = client.get(url_for('main.check_and_resend_verification_code'))
|
||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
assert response.location == url_for('main.two_factor', _external=True)
|
assert response.location == url_for('main.two_factor', _external=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_create_new_code_for_user(db_,
|
def test_should_create_new_code_for_user(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
|
active_user,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
with client.session_transaction() as session:
|
with client.session_transaction() as session:
|
||||||
user = create_test_user('active')
|
session['user_email'] = active_user.email_address
|
||||||
session['user_email'] = user.email_address
|
verify_codes_dao.add_code(user_id=active_user.id, code='12345', code_type='sms')
|
||||||
verify_codes_dao.add_code(user_id=user.id, code='12345', code_type='sms')
|
|
||||||
response = client.get(url_for('main.check_and_resend_verification_code'))
|
response = client.get(url_for('main.check_and_resend_verification_code'))
|
||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
assert response.location == url_for('main.two_factor', _external=True)
|
assert response.location == url_for('main.two_factor', _external=True)
|
||||||
codes = verify_codes_dao.get_codes(user_id=user.id, code_type='sms')
|
codes = verify_codes_dao.get_codes(user_id=active_user.id, code_type='sms')
|
||||||
assert len(codes) == 2
|
assert len(codes) == 2
|
||||||
for x in ([used.code_used for used in codes]):
|
for x in ([used.code_used for used in codes]):
|
||||||
assert x is False
|
assert x is False
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
from tests.app.main import create_test_user
|
from app.models import User
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_recent_jobs_on_dashboard(app_,
|
def test_should_show_recent_jobs_on_dashboard(app_,
|
||||||
db_,
|
db_,
|
||||||
db_session):
|
db_session,
|
||||||
|
active_user,
|
||||||
|
mock_get_service):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = create_test_user('active')
|
client.login(active_user)
|
||||||
client.login(user)
|
response = client.get(url_for('main.service_dashboard', service_id=123))
|
||||||
response = client.get('/services/123/dashboard')
|
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Test message 1' in response.get_data(as_text=True)
|
assert 'Test message 1' in response.get_data(as_text=True)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from flask import url_for
|
from flask import url_for
|
||||||
from app.main.dao import users_dao
|
from app.main.dao import users_dao
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_forgot_password(app_, db_, db_session):
|
def test_should_render_forgot_password(app_, db_, db_session):
|
||||||
|
|||||||
@@ -1,39 +1,45 @@
|
|||||||
from tests.app.main import create_test_user
|
from flask import url_for
|
||||||
|
from app.models import User
|
||||||
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_list_of_all_jobs(app_, db_, db_session):
|
def test_should_return_list_of_all_jobs(app_, db_, db_session, service_one):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = create_test_user('active')
|
user = User.query.first()
|
||||||
client.login(user)
|
client.login(user)
|
||||||
response = client.get('/services/123/jobs')
|
response = client.get(url_for('main.view_jobs', service_id=101))
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Test message 1' in response.get_data(as_text=True)
|
assert 'Test message 1' in response.get_data(as_text=True)
|
||||||
assert 'Final reminder' in response.get_data(as_text=True)
|
assert 'Final reminder' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_page_for_one_job(app_, db_, db_session):
|
def test_should_show_page_for_one_job(app_, db_, db_session, service_one):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
# TODO filename will be part of job metadata not in session
|
# TODO filename will be part of job metadata not in session
|
||||||
with client.session_transaction() as s:
|
with client.session_transaction() as s:
|
||||||
s[456] = 'dispatch_20151114.csv'
|
s[456] = 'dispatch_20151114.csv'
|
||||||
user = create_test_user('active')
|
user = User.query.first()
|
||||||
client.login(user)
|
client.login(user)
|
||||||
response = client.get('/services/123/jobs/456')
|
response = client.get(url_for('main.view_job', service_id=123, job_id=456))
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'dispatch_20151114.csv' in response.get_data(as_text=True)
|
assert 'dispatch_20151114.csv' in response.get_data(as_text=True)
|
||||||
assert 'Test message 1' in response.get_data(as_text=True)
|
assert 'Test message 1' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_page_for_one_notification(app_, db_, db_session):
|
def test_should_show_page_for_one_notification(app_, db_, db_session, service_one):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = create_test_user('active')
|
user = User.query.first()
|
||||||
client.login(user)
|
client.login(user)
|
||||||
response = client.get('/services/123/jobs/456/notification/3')
|
response = client.get(url_for(
|
||||||
|
'main.view_notification',
|
||||||
|
service_id=101,
|
||||||
|
job_id=123,
|
||||||
|
notification_id=3))
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Text message' in response.get_data(as_text=True)
|
assert 'Text message' in response.get_data(as_text=True)
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ from flask import url_for
|
|||||||
from app.main.dao import users_dao
|
from app.main.dao import users_dao
|
||||||
from app.main.encryption import check_hash
|
from app.main.encryption import check_hash
|
||||||
from app.notify_client.sender import generate_token
|
from app.notify_client.sender import generate_token
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_new_password_template(db_, db_session):
|
def test_should_render_new_password_template(app_, db_, db_session):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
user = create_test_user('request_password_reset')
|
user = create_test_user('request_password_reset')
|
||||||
@@ -16,7 +16,7 @@ def test_should_render_new_password_template(db_, db_session):
|
|||||||
assert ' You can now create a new password for your account.' in response.get_data(as_text=True)
|
assert ' You can now create a new password for your account.' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_new_password_template_with_message_of_bad_token(db_, db_session):
|
def test_should_render_new_password_template_with_message_of_bad_token(app_, db_, db_session):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
create_test_user('request_password_reset')
|
create_test_user('request_password_reset')
|
||||||
@@ -27,7 +27,8 @@ def test_should_render_new_password_template_with_message_of_bad_token(db_, db_s
|
|||||||
response.get_data(as_text=True)
|
response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_redirect_to_two_factor_when_password_reset_is_successful(db_,
|
def test_should_redirect_to_two_factor_when_password_reset_is_successful(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms):
|
mock_send_sms):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
@@ -42,7 +43,8 @@ def test_should_redirect_to_two_factor_when_password_reset_is_successful(db_,
|
|||||||
assert saved_user.state == 'active'
|
assert saved_user.state == 'active'
|
||||||
|
|
||||||
|
|
||||||
def test_should_redirect_to_forgot_password_with_flash_message_when_token_is_expired(db_,
|
def test_should_redirect_to_forgot_password_with_flash_message_when_token_is_expired(app_,
|
||||||
|
db_,
|
||||||
db_session):
|
db_session):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -55,7 +57,8 @@ def test_should_redirect_to_forgot_password_with_flash_message_when_token_is_exp
|
|||||||
app_.config['TOKEN_MAX_AGE_SECONDS'] = 3600
|
app_.config['TOKEN_MAX_AGE_SECONDS'] = 3600
|
||||||
|
|
||||||
|
|
||||||
def test_should_redirect_to_forgot_password_when_user_is_active_should_be_request_password_reset(db_,
|
def test_should_redirect_to_forgot_password_when_user_is_active_should_be_request_password_reset(app_,
|
||||||
|
db_,
|
||||||
db_session):
|
db_session):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
|
|||||||
@@ -1,26 +1,30 @@
|
|||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
|
||||||
def test_render_register_returns_template_with_form(db_, db_session):
|
|
||||||
|
def test_render_register_returns_template_with_form(app_, db_, db_session):
|
||||||
response = app_.test_client().get('/register')
|
response = app_.test_client().get('/register')
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'Create an account' in response.get_data(as_text=True)
|
assert 'Create an account' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_process_register_creates_new_user(db_,
|
def test_process_register_creates_new_user(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
response = app_.test_client().post('/register',
|
with app_.test_request_context():
|
||||||
data={'name': 'Some One Valid',
|
response = app_.test_client().post('/register',
|
||||||
'email_address': 'someone@example.gov.uk',
|
data={'name': 'Some One Valid',
|
||||||
'mobile_number': '+4407700900460',
|
'email_address': 'someone@example.gov.uk',
|
||||||
'password': 'validPassword!'})
|
'mobile_number': '+4407700900460',
|
||||||
assert response.status_code == 302
|
'password': 'validPassword!'})
|
||||||
assert response.location == url_for('main.verify', _external=True)
|
assert response.status_code == 302
|
||||||
|
assert response.location == url_for('main.verify', _external=True)
|
||||||
|
|
||||||
|
|
||||||
def test_process_register_returns_400_when_mobile_number_is_invalid(db_,
|
def test_process_register_returns_400_when_mobile_number_is_invalid(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -34,7 +38,8 @@ def test_process_register_returns_400_when_mobile_number_is_invalid(db_,
|
|||||||
assert 'Must be a UK mobile number (eg 07700 900460)' in response.get_data(as_text=True)
|
assert 'Must be a UK mobile number (eg 07700 900460)' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_400_when_email_is_not_gov_uk(db_,
|
def test_should_return_400_when_email_is_not_gov_uk(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -48,7 +53,8 @@ def test_should_return_400_when_email_is_not_gov_uk(db_,
|
|||||||
assert 'Enter a gov.uk email address' in response.get_data(as_text=True)
|
assert 'Enter a gov.uk email address' in response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
def test_should_add_verify_codes_on_session(db_,
|
def test_should_add_verify_codes_on_session(app_,
|
||||||
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email):
|
||||||
@@ -62,7 +68,7 @@ def test_should_add_verify_codes_on_session(db_,
|
|||||||
assert 'notify_admin_session' in response.headers.get('Set-Cookie')
|
assert 'notify_admin_session' in response.headers.get('Set-Cookie')
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_400_if_password_is_blacklisted(db_, db_session):
|
def test_should_return_400_if_password_is_blacklisted(app_, db_, db_session):
|
||||||
response = app_.test_client().post('/register',
|
response = app_.test_client().post('/register',
|
||||||
data={'name': 'Bad Mobile',
|
data={'name': 'Bad Mobile',
|
||||||
'email_address': 'bad_mobile@example.not.right',
|
'email_address': 'bad_mobile@example.not.right',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_overview(app_, db_, db_session):
|
def test_should_show_overview(app_, db_, db_session):
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ from flask import url_for
|
|||||||
from app.main.dao import users_dao
|
from app.main.dao import users_dao
|
||||||
from app.models import User
|
from app.models import User
|
||||||
|
|
||||||
from .test_sign_in import _set_up_mocker
|
|
||||||
|
|
||||||
|
|
||||||
def test_render_sign_out_redirects_to_sign_in(app_):
|
def test_render_sign_out_redirects_to_sign_in(app_):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
@@ -19,7 +17,8 @@ def test_sign_out_user(app_,
|
|||||||
db_,
|
db_,
|
||||||
db_session,
|
db_session,
|
||||||
mock_send_sms,
|
mock_send_sms,
|
||||||
mock_send_email):
|
mock_send_email,
|
||||||
|
mock_get_service):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
email = 'valid@example.gov.uk'
|
email = 'valid@example.gov.uk'
|
||||||
password = 'val1dPassw0rd!'
|
password = 'val1dPassw0rd!'
|
||||||
@@ -34,7 +33,8 @@ def test_sign_out_user(app_,
|
|||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
client.login(user)
|
client.login(user)
|
||||||
# Check we are logged in
|
# Check we are logged in
|
||||||
response = client.get('/services/123/dashboard')
|
response = client.get(
|
||||||
|
url_for('main.service_dashboard', service_id="123"))
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
response = client.get(url_for('main.sign_out'))
|
response = client.get(url_for('main.sign_out'))
|
||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from io import BytesIO
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
from unittest.mock import mock_open
|
from unittest.mock import mock_open
|
||||||
|
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_upload_empty_csvfile_returns_to_upload_page(
|
def test_upload_empty_csvfile_returns_to_upload_page(
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_list_of_all_templates(app_, db_, db_session):
|
def test_should_return_list_of_all_templates(app_, db_, db_session):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from flask import json, url_for
|
from flask import json, url_for
|
||||||
|
|
||||||
from app.main.dao import verify_codes_dao
|
from app.main.dao import verify_codes_dao
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_two_factor_page(app_, db_, db_session):
|
def test_should_render_two_factor_page(app_, db_, db_session):
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from flask import json, url_for
|
from flask import json, url_for
|
||||||
from app.main.dao import users_dao, verify_codes_dao
|
from app.main.dao import users_dao, verify_codes_dao
|
||||||
from tests.app.main import create_test_user
|
from tests import create_test_user
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_verify_template(app_, db_, db_session):
|
def test_should_return_verify_template(app_, db_, db_session):
|
||||||
|
|||||||
@@ -125,4 +125,3 @@ def mock_get_services(mocker, active_user):
|
|||||||
mock_class = mocker.patch(
|
mock_class = mocker.patch(
|
||||||
'app.notifications_api_client.get_services', side_effect=_create)
|
'app.notifications_api_client.get_services', side_effect=_create)
|
||||||
return mock_class
|
return mock_class
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user