Merge pull request #1012 from alphagov/keys-and-trial-mode

Make relationship between keys, whitelist, trial mode and team clearer
This commit is contained in:
Chris Hill-Scott
2016-11-04 15:11:19 +01:00
committed by GitHub
12 changed files with 96 additions and 49 deletions

View File

@@ -35,6 +35,10 @@
margin-bottom: $gutter-half;
}
.bottom-gutter-3-2 {
margin-bottom: $gutter * 3/2;
}
.bottom-gutter-2 {
margin-bottom: $gutter * 2;
}

View File

@@ -214,3 +214,12 @@ summary::-webkit-details-marker {
details .arrow {
font-size: 16px;
}
.block-label-hint {
@include core-16;
margin-top: 5px;
}
.block-label input[disabled] {
opacity: 0.5;
}

View File

@@ -391,8 +391,8 @@ class RequestToGoLiveForm(Form):
),
choices=[
('yes', 'Yes'),
('no', 'No well send you a copy'),
('dont know', 'I dont know well check for you')
('no', 'No'),
('dont know', 'I dont know')
],
validators=[DataRequired()]
)

View File

@@ -1,4 +1,4 @@
from flask import request, render_template, redirect, url_for, flash
from flask import request, render_template, redirect, url_for, flash, Markup, abort
from flask_login import login_required
from app.main import main
from app.main.forms import CreateKeyForm, Whitelist
@@ -68,13 +68,22 @@ def create_api_key(service_id):
key['name'] for key in api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
]
form = CreateKeyForm(key_names)
form.key_type.choices = filter(None, [
(KEY_TYPE_NORMAL, 'Send messages to anyone')
if not current_service['restricted'] else None,
(KEY_TYPE_TEST, 'Simulate sending messages to anyone'),
(KEY_TYPE_TEAM, 'Only send messages to your team or whitelist')
])
form.key_type.choices = [
(KEY_TYPE_NORMAL, 'Send messages to anyone'),
(KEY_TYPE_TEAM, 'Send messages to anyone on my whitelist'),
(KEY_TYPE_TEST, 'Pretend to send messages to anyone'),
]
if current_service['restricted']:
disabled_options = [KEY_TYPE_NORMAL]
option_hints = {KEY_TYPE_NORMAL: Markup(
'This option is not available because your service is in '
'<a href="{}">trial mode</a>'.format(url_for(".trial_mode"))
)}
else:
disabled_options, option_hints = [], {}
if form.validate_on_submit():
if form.key_type.data in disabled_options:
abort(400)
secret = api_key_api_client.create_api_key(
service_id=service_id,
key_name=form.key_name.data,
@@ -88,7 +97,9 @@ def create_api_key(service_id):
)
return render_template(
'views/api/keys/create.html',
form=form
form=form,
disabled_options=disabled_options,
option_hints=option_hints
)

View File

@@ -1,6 +1,8 @@
{% macro radios(
field,
hint=None
hint=None,
disable=[],
option_hints={}
) %}
<div class="form-group {% if field.errors %} error{% endif %}">
<fieldset>
@@ -14,8 +16,21 @@
</legend>
{% for option in field %}
<label class="block-label" for="{{ option.id }}">
{{ option }}
<input
id="{{ option.id }}" name="{{ option.name }}" type="radio" value="{{ option.data }}"
{% if option.data in disable %}
disabled
{% endif %}
{% if option.checked %}
checked
{% endif %}
>
{{ option.label.text }}
{% if option_hints[option.data] %}
<div class="block-label-hint">
{{ option_hints[option.data] }}
</div>
{% endif %}
</label>
{% endfor %}
</fieldset>

View File

@@ -13,15 +13,6 @@
API integration
</h1>
{% if current_service.restricted %}
{% call banner_wrapper(type='warning') %}
<h2 class="heading-medium">Your service is in trial mode</h2>
<p>
You can only send messages to people in your team or whitelist.
</p>
{% endcall %}
{% endif %}
<nav class="grid-row bottom-gutter-1-2">
<div class="column-one-third">
<a class="pill-separate-item" href="{{ url_for('.api_keys', service_id=current_service.id) }}">API keys</a>

View File

@@ -37,9 +37,9 @@
{% if item.key_type == 'normal' %}
<span class="visually-hidden">Normal</span>
{% elif item.key_type == 'team' %}
Only sends to team members or whitelist
Sends to anyone on your whitelist
{% elif item.key_type == 'test' %}
Simulates sending messages
Pretends to send messages
{% endif %}
</span>
</div>

View File

@@ -2,9 +2,10 @@
{% from "components/page-footer.html" import page_footer %}
{% from "components/textbox.html" import textbox %}
{% from "components/radios.html" import radios %}
{% from "components/banner.html" import banner_wrapper %}
{% block page_title %}
Add a new API key GOV.UK Notify
Create an API key GOV.UK Notify
{% endblock %}
{% block maincolumn_content %}
@@ -14,8 +15,8 @@
</h1>
<form method="post">
{{ radios(form.key_type) }}
{{ textbox(form.key_name, label='Name for this key') }}
{{ radios(form.key_type, disable=disabled_options, option_hints=option_hints) }}
{{ page_footer('Continue') }}
</form>

View File

@@ -14,6 +14,12 @@
Whitelist
</h1>
<p>
You and members of
<a href="{{ url_for('main.manage_users', service_id=current_service.id) }}">your team</a>
are included in the whitelist automatically.
</p>
<form method="post">
<div class="grid-row">

View File

@@ -11,24 +11,7 @@
<h1 class="heading-large">Settings</h1>
{% if current_service.restricted %}
{% call banner_wrapper(type='warning') %}
<h2 class="heading-medium">Your service is in trial mode</h2>
<ul class='list list-bullet'>
<li>you can only send messages to yourself</li>
<li>you can add people to your team, then you can send messages to them too</li>
<li>you can only send 50 messages per day</li>
</ul>
<p>
To remove these restrictions
<a href="{{ url_for('.service_request_to_go_live', service_id=current_service.id) }}">request to go live</a>.
</p>
{% endcall %}
{% endif %}
<div class="bottom-gutter-2">
<div class="bottom-gutter-3-2">
{% call mapping_table(
caption='Settings',
@@ -57,6 +40,34 @@
{% endcall %}
</div>
{% if current_service.restricted %}
<h2 class="heading-medium">Your service is in trial mode</h2>
<ul class='list list-bullet'>
<li>you can only send messages to yourself</li>
<li>you can add people to your team, then you can send messages to them too</li>
<li>you can only send 50 messages per day</li>
</ul>
<p>
To remove these restrictions
<a href="{{ url_for('.service_request_to_go_live', service_id=current_service.id) }}">request to go live</a>.
</p>
{% else %}
<h2 class="heading-medium">Your service is live</h2>
<p>
You can send up to
{{ "{:,}".format(current_service.message_limit) }} messages
per day.
</p>
<p>
Problems or comments?
<a href="{{ url_for('main.feedback') }}">Give feedback</a>.
</p>
{% endif %}
{% if current_user.has_permissions([], admin_override=True) %}
<h2 class="heading-medium">Platform admin settings</h2>

View File

@@ -33,7 +33,10 @@
<form method="post">
<div class="form-group">
<p>We need permission to process your data before we can make your service live.</p>
{{ radios(form.mou) }}
{{ radios(form.mou, option_hints={
'no': 'Well send you a copy',
'dont know': 'Well check for you',
}) }}
</div>
<div class="form-group">
{{ radios(form.channel) }}

View File

@@ -21,7 +21,6 @@ def test_should_show_api_page(
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.h1.string.strip() == 'API integration'
assert 'Your service is in trial mode' in page.find('div', {'class': 'banner-warning'}).text
rows = page.find_all('details')
assert len(rows) == 5
for index, row in enumerate(rows):
@@ -201,10 +200,7 @@ def test_cant_create_normal_api_key_in_trial_mode(
'key_type': 'normal'
}
)
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.find('span', {'class': 'error-message'}).text.strip() == 'Not a valid choice'
assert response.status_code == 400
mock_post.assert_not_called()