Create a letter branding request flow to match email branding request

Test if service settings links to branding request page for letters

Parametrize all branding tests so they also work for letter branding
This commit is contained in:
Pea Tyczynska
2020-01-17 17:03:07 +00:00
parent 861a29ddd3
commit 02cb6c9c38
6 changed files with 123 additions and 52 deletions

View File

@@ -1392,35 +1392,43 @@ class LinkOrganisationsForm(StripWhitespaceForm):
)
class BrandingOptionsEmail(StripWhitespaceForm):
class BrandingOptions(StripWhitespaceForm):
FALLBACK_OPTION_VALUE = 'something_else'
FALLBACK_OPTION = (FALLBACK_OPTION_VALUE, 'Something else')
options = RadioField('Choose your new email branding')
options = RadioField('Choose your new branding')
something_else = TextAreaField('Describe the branding you want')
def __init__(self, service, *args, **kwargs):
def __init__(self, service, *args, branding_type="email", **kwargs):
super().__init__(*args, **kwargs)
self.options.choices = tuple(self.get_available_choices(service))
self.options.choices = tuple(self.get_available_choices(service, branding_type))
if self.something_else_is_only_option:
self.options.data = self.FALLBACK_OPTION_VALUE
@staticmethod
def get_available_choices(service):
def get_available_choices(service, branding_type):
if branding_type == "email":
organisation_branding_id = service.organisation.email_branding_id if service.organisation else None
service_branding_id = service.email_branding_id
service_branding_name = service.email_branding_name
elif branding_type == "letter":
organisation_branding_id = service.organisation.letter_branding_id if service.organisation else None
service_branding_id = service.letter_branding_id
service_branding_name = service.letter_branding_name
if (
service.organisation_type == Organisation.TYPE_CENTRAL and
service.organisation.email_branding_id is None and
service.email_branding_id is not None
organisation_branding_id is None and
service_branding_id is not None
):
yield ('govuk', 'GOV.UK')
if (
service.organisation_type == Organisation.TYPE_CENTRAL and
service.organisation and
service.organisation.email_branding_id is None and
service.email_branding_name.lower() != 'GOV.UK and {}'.format(service.organisation.name).lower()
organisation_branding_id is None and
service_branding_name.lower() != 'GOV.UK and {}'.format(service.organisation.name).lower()
):
yield ('govuk_and_org', 'GOV.UK and {}'.format(service.organisation.name))
@@ -1429,7 +1437,7 @@ class BrandingOptionsEmail(StripWhitespaceForm):
Organisation.TYPE_NHS_CENTRAL,
Organisation.TYPE_NHS_LOCAL,
Organisation.TYPE_NHS_GP,
} and service.email_branding_name != 'NHS'
} and service_branding_name != 'NHS'
):
yield ('nhs', 'NHS')
@@ -1440,13 +1448,13 @@ class BrandingOptionsEmail(StripWhitespaceForm):
Organisation.TYPE_NHS_CENTRAL,
Organisation.TYPE_NHS_GP,
} and (
service.email_branding_id is None or
service.email_branding_id != service.organisation.email_branding_id
service_branding_id is None or
service_branding_id != organisation_branding_id
)
):
yield ('organisation', service.organisation.name)
yield BrandingOptionsEmail.FALLBACK_OPTION
yield BrandingOptions.FALLBACK_OPTION
@property
def something_else_is_only_option(self):

View File

@@ -30,7 +30,7 @@ from app import (
from app.extensions import zendesk_client
from app.main import main
from app.main.forms import (
BrandingOptionsEmail,
BrandingOptions,
ConfirmPasswordForm,
EstimateUsageForm,
FreeSMSAllowance,
@@ -1038,15 +1038,18 @@ def link_service_to_organisation(service_id):
)
@main.route("/services/<uuid:service_id>/branding-request/email", methods=['GET', 'POST'])
@main.route("/services/<uuid:service_id>/branding-request/<branding_type>", methods=['GET', 'POST'])
@user_has_permissions('manage_service')
def branding_request(service_id):
form = BrandingOptionsEmail(current_service)
def branding_request(service_id, branding_type):
form = BrandingOptions(current_service, branding_type=branding_type)
if branding_type == "email":
branding_name = current_service.email_branding_name
elif branding_type == "letter":
branding_name = current_service.letter_branding_name
if form.validate_on_submit():
zendesk_client.create_ticket(
subject='Email branding request - {}'.format(current_service.name),
subject='{} branding request - {}'.format(branding_type.capitalize(), current_service.name),
message=(
'Organisation: {organisation}\n'
'Service: {service_name}\n'
@@ -1061,7 +1064,7 @@ def branding_request(service_id):
organisation=current_service.organisation.as_info_for_branding_request(current_user.email_domain),
service_name=current_service.name,
dashboard_url=url_for('main.service_dashboard', service_id=current_service.id, _external=True),
current_branding=current_service.email_branding_name,
current_branding=branding_name,
branding_requested=dict(form.options.choices)[form.options.data],
new_paragraph='\n\n' if form.something_else.data else '',
detail=form.something_else.data or ''
@@ -1079,8 +1082,10 @@ def branding_request(service_id):
return redirect(url_for('.service_settings', service_id=service_id))
return render_template(
'views/service-settings/branding/email-options.html',
'views/service-settings/branding/branding-options.html',
form=form,
branding_type=branding_type,
branding_name=branding_name
)

View File

@@ -417,6 +417,12 @@ class Service(JSONModel):
return 'GOV.UK'
return self.email_branding['name']
@cached_property
def letter_branding_name(self):
if self.letter_branding is None:
return 'no'
return self.letter_branding['name']
@property
def needs_to_change_email_branding(self):
return self.email_branding_id is None and self.organisation_type != Organisation.TYPE_CENTRAL

View File

@@ -105,7 +105,7 @@
{{ text_field(current_service.email_branding_name) }}
{{ edit_field(
'Change',
url_for('.branding_request', service_id=current_service.id),
url_for('.branding_request', service_id=current_service.id, branding_type="email"),
permissions=['manage_service'],
)}}
{% endcall %}
@@ -241,7 +241,7 @@
{{ optional_text_field(current_service.letter_branding.name) }}
{{ edit_field(
'Change',
url_for('.request_letter_branding', service_id=current_service.id),
url_for('.branding_request', service_id=current_service.id, branding_type="letter"),
permissions=['manage_service']
)}}
{% endcall %}

View File

@@ -7,21 +7,21 @@
{% from "components/form.html" import form_wrapper %}
{% block service_page_title %}
Change email branding
Change {{ branding_type }} branding
{% endblock %}
{% block maincolumn_content %}
{{ page_header(
'Change email branding',
'Change {} branding'.format(branding_type),
back_link=url_for('main.service_settings', service_id=current_service.id)
) }}
<p>
Your emails currently have {{ current_service.email_branding_name }} branding.
Your {{ branding_type }}s currently have {{ branding_name }} branding.
</p>
{% if current_service.needs_to_change_email_branding %}
{% if current_service.needs_to_change_email_branding and branding_type == "email" %}
<p>
You should be using your own branding instead. We can help you to set this up.
</p>