Skip to content
This repository has been archived by the owner on Aug 25, 2021. It is now read-only.

Commit

Permalink
Merge pull request #597 from uktrade/revert/eu-transition-form-pr-x
Browse files Browse the repository at this point in the history
Revert "Merge pull request #595 from uktrade/GBAU-906-removing-transi…
  • Loading branch information
webbyfox committed Jan 20, 2021
2 parents 086cb94 + 0c80720 commit 0c47a16
Show file tree
Hide file tree
Showing 7 changed files with 238 additions and 2 deletions.
2 changes: 0 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

### Implemented enhancements

- GBAU - 906 Removed EU transition option from contact form

### Bugs fixed


Expand Down
6 changes: 6 additions & 0 deletions conf/tests/test_url_redirects.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,12 @@ def test_privacy_international_redirect(path, client):
'/transition/',
'/international/content/invest/how-to-setup-in-the-uk/transition-period/'
),
(
'/eu-exit-news/contact/', reverse('brexit-contact-form')
),
(
'/eu-exit-news/contact/success/', reverse('brexit-contact-form-success')
),
(
'/redarrows/',
'https://www.events.great.gov.uk/red-arrows-north-america-tour/'
Expand Down
16 changes: 16 additions & 0 deletions conf/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import casestudy.views
import contact.views
import core.views
import euexit.views
import finance.views
import marketaccess.views
import community.views
Expand Down Expand Up @@ -223,6 +224,20 @@
]


euexit_urls = [
url(
r'^transition-period/contact/$',
euexit.views.DomesticContactFormView.as_view(),
name='brexit-contact-form'
),
url(
r'^transition-period/contact/success/$',
euexit.views.DomesticContactSuccessView.as_view(),
name='brexit-contact-form-success'
),
]


article_urls = [
url(
r"^tagged/(?P<slug>[\w-]+)/$",
Expand Down Expand Up @@ -612,6 +627,7 @@


urlpatterns += legacy_urls
urlpatterns += euexit_urls
urlpatterns += redirects
urlpatterns += article_urls
urlpatterns += contact_urls
Expand Down
18 changes: 18 additions & 0 deletions contact/forms.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from datetime import datetime
import re

from captcha.fields import ReCaptchaField
Expand All @@ -9,7 +10,9 @@

from django.conf import settings
from django.forms import Textarea, TextInput, TypedChoiceField, ValidationError
from django.utils import timezone
from django.utils.html import mark_safe
from django.utils.functional import LazyObject

from core.forms import ConsentFieldMixin, TERMS_LABEL
from core.validators import is_valid_postcode
Expand All @@ -21,6 +24,19 @@
PHONE_NUMBER_REGEX = re.compile(r'^(\+\d{1,3}[- ]?)?\d{8,16}$')


class LazyEUExitLabel(LazyObject):
POST_BREXIT = 'The transition period (now that the UK has left the EU)'
PRE_BREXIT = 'The UK leaving the EU and transition period'

@property
def _wrapped(self):
if timezone.now() > timezone.make_aware(datetime(2020, 1, 31, 23)):
return self.POST_BREXIT
return self.PRE_BREXIT


EU_EXIT_LABEL = LazyEUExitLabel()

LIMITED = 'LIMITED'

COMPANY_TYPE_CHOICES = (
Expand Down Expand Up @@ -81,6 +97,7 @@ class DomesticRoutingForm(forms.Form):
'great.gov.uk account and services support'
),
(constants.FINANCE, 'UK Export Finance (UKEF)'),
(constants.EUEXIT, EU_EXIT_LABEL),
(constants.EVENTS, 'Events'),
(constants.DSO, 'Defence and Security Organisation (DSO)'),
(constants.OTHER, 'Other'),
Expand Down Expand Up @@ -169,6 +186,7 @@ def international_choices():
(constants.CAPITAL_INVEST, 'Capital investment in the UK'),
(constants.EXPORTING_TO_UK, 'Exporting to the UK'),
(constants.BUYING, 'Find a UK business partner'),
(constants.EUEXIT, EU_EXIT_LABEL),
(constants.OTHER, 'Other'),
)

Expand Down
13 changes: 13 additions & 0 deletions contact/tests/test_forms.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from directory_api_client.exporting import url_lookup_by_postcode
from freezegun import freeze_time
import pytest
import requests
import requests_mock
Expand Down Expand Up @@ -41,6 +42,7 @@ def test_domestic_form_routing():
constants.TRADE_OFFICE,
constants.EXPORT_ADVICE,
constants.FINANCE,
constants.EUEXIT,
constants.EVENTS,
constants.DSO,
constants.OTHER,
Expand Down Expand Up @@ -294,6 +296,17 @@ def test_routing_forms_feature_flag_for_int_routing_form(value_one, value_two, f
assert any(value == constants.EXPORTING_TO_UK for value, label in choices) is value_two


@pytest.mark.parametrize('current_date,expected', (
['2020-01-30 22:59:00', forms.LazyEUExitLabel.PRE_BREXIT],
['2020-01-31 23:00:00', forms.LazyEUExitLabel.PRE_BREXIT],
['2020-02-01 23:00:01', forms.LazyEUExitLabel.POST_BREXIT],
))
def test_routing_forms_euexit(current_date, expected):
with freeze_time(current_date):
assert forms.DomesticRoutingForm().fields['choice'].choices[4][1] == expected
assert forms.InternationalRoutingForm().fields['choice'].choices[4][1] == expected


def test_marketing_form_validations(valid_request_export_support_form_data):
form = forms.ExportSupportForm(data=valid_request_export_support_form_data)
assert form.is_valid()
Expand Down
5 changes: 5 additions & 0 deletions contact/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ def domestic_form_data(captcha_stub):
kwargs={'step': 'contact'},
)
),
(
constants.DOMESTIC,
constants.EUEXIT,
reverse('brexit-contact-form'),
),
(
constants.DOMESTIC,
constants.EVENTS,
Expand Down
180 changes: 180 additions & 0 deletions euexit/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
from unittest import mock

from django.urls import reverse

from core.constants import CONSENT_EMAIL
from core.tests.helpers import create_response
from euexit import views


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_form_success_page(mock_lookup_by_slug, settings, client):
url = reverse('brexit-contact-form-success')
template_name = views.DomesticContactSuccessView.template_name

mock_lookup_by_slug.return_value = create_response({
'body_text': 'what next',
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
})
settings.FEATURE_FLAGS['HIGH_POTENTIAL_OPPORTUNITIES_ON'] = True
response = client.get(url)

assert response.status_code == 200
assert response.template_name == [template_name]
assert response.context_data['page'] == {
'body_text': 'what next',
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
}
assert response.context_data['hide_language_selector'] is True


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_domestic_form(mock_lookup_by_slug, client):
mock_lookup_by_slug.return_value = create_response({
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
})

response = client.get(reverse('brexit-contact-form'))

assert response.status_code == 200
assert response.template_name == [
views.DomesticContactFormView.template_name
]
assert response.context_data['hide_language_selector'] is True


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_domestic_form_not_found(mock_lookup_by_slug, client):
mock_lookup_by_slug.return_value = create_response(status_code=404)

url = reverse('brexit-contact-form')
response = client.get(url)

assert response.status_code == 404


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_domestic_form_cms_retrieval_ok(mock_lookup_by_slug, settings, client):
settings.FEATURE_FLAGS['HIGH_POTENTIAL_OPPORTUNITIES_ON'] = True
mock_lookup_by_slug.return_value = create_response({
'first_name': {
'label': 'Given name'
},
'last_name': {
'label': 'Family name'
},
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
})

url = reverse('brexit-contact-form')

response = client.get(url)

assert response.status_code == 200
form = response.context_data['form']
assert form.fields['first_name'].label == 'Given name'
assert form.fields['last_name'].label == 'Family name'
assert response.context_data['hide_language_selector'] is True


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
@mock.patch.object(views.DomesticContactFormView.form_class, 'save')
def test_domestic_form_submit(
mock_save, mock_lookup_by_slug, settings, client, captcha_stub
):
settings.FEATURE_FLAGS['HIGH_POTENTIAL_OPPORTUNITIES_ON'] = True
settings.EU_EXIT_ZENDESK_SUBDOMAIN = 'brexit-subdomain'
mock_lookup_by_slug.return_value = create_response({
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
})

url = reverse('brexit-contact-form')

# sets referrer in the session
client.get(url, {}, HTTP_REFERER='http://www.google.com')
response = client.post(url, {
'first_name': 'test',
'last_name': 'example',
'email': 'test@example.com',
'organisation_type': 'COMPANY',
'company_name': 'thing',
'comment': 'hello',
'contact_consent': [CONSENT_EMAIL],
'g-recaptcha-response': captcha_stub,
})

assert response.status_code == 302
assert response.url == reverse(
'brexit-contact-form-success'
)
assert mock_save.call_count == 1
assert mock_save.call_args == mock.call(
subject='Brexit contact form',
full_name='test example',
email_address='test@example.com',
service_name='eu_exit',
subdomain=settings.EU_EXIT_ZENDESK_SUBDOMAIN,
form_url=url,
sender={'email_address': 'test@example.com',
'country_code': None,
'ip_address': None}
)


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_form_urls(mock_lookup_by_slug, client, settings):
url = reverse('brexit-contact-form')
settings.FEATURE_FLAGS['HIGH_POTENTIAL_OPPORTUNITIES_ON'] = True
mock_lookup_by_slug.return_value = create_response({
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example',
})

response = client.get(url, {}, HTTP_REFERER='http://www.google.com')

assert response.status_code == 200
form = response.context_data['form']
assert form.ingress_url == 'http://www.google.com'
assert response.context_data['hide_language_selector'] is True


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_form_url_no_referer(mock_lookup_by_slug, settings, client):
url = reverse('brexit-contact-form')
settings.FEATURE_FLAGS['HIGH_POTENTIAL_OPPORTUNITIES_ON'] = True
mock_lookup_by_slug.return_value = create_response({
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
})

response = client.get(url, {})

assert response.status_code == 200
form = response.context_data['form']
assert form.ingress_url is None
assert response.context_data['hide_language_selector'] is True


@mock.patch('directory_cms_client.client.cms_api_client.lookup_by_slug')
def test_domestic_prepopulate(mock_lookup_by_slug, client, user):
mock_lookup_by_slug.return_value = create_response({
'disclaimer': 'disclaim',
'breadcrumbs_label': 'Example page',
})
url = reverse('brexit-contact-form')
response = client.get(url)

assert response.status_code == 200
assert response.context_data['form'].initial == {
'email': user.email,
'company_name': 'Example corp',
'postcode': 'Foo Bar',
'first_name': 'Jim',
'last_name': 'Cross',
'organisation_type': 'COMPANY',
}

0 comments on commit 0c47a16

Please sign in to comment.