mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-08 00:38:24 -04:00
Merge pull request #2571 from alphagov/valid-feedback-email
Use email fields for feedback form
This commit is contained in:
@@ -110,15 +110,18 @@ class MultiCheckboxField(SelectMultipleField):
|
|||||||
option_widget = CheckboxInput()
|
option_widget = CheckboxInput()
|
||||||
|
|
||||||
|
|
||||||
def email_address(label='Email address', gov_user=True):
|
def email_address(label='Email address', gov_user=True, required=True):
|
||||||
|
|
||||||
validators = [
|
validators = [
|
||||||
Length(min=5, max=255),
|
ValidEmail(),
|
||||||
DataRequired(message='Can’t be empty'),
|
|
||||||
ValidEmail()
|
|
||||||
]
|
]
|
||||||
|
|
||||||
if gov_user:
|
if gov_user:
|
||||||
validators.append(ValidGovEmail())
|
validators.append(ValidGovEmail())
|
||||||
|
|
||||||
|
if required:
|
||||||
|
validators.append(DataRequired(message='Can’t be empty'))
|
||||||
|
|
||||||
return EmailField(label, validators)
|
return EmailField(label, validators)
|
||||||
|
|
||||||
|
|
||||||
@@ -561,7 +564,7 @@ class SupportType(StripWhitespaceForm):
|
|||||||
|
|
||||||
class Feedback(StripWhitespaceForm):
|
class Feedback(StripWhitespaceForm):
|
||||||
name = StringField('Name')
|
name = StringField('Name')
|
||||||
email_address = StringField('Email address')
|
email_address = email_address(label='Email address', gov_user=False, required=False)
|
||||||
feedback = TextAreaField('Your message', validators=[DataRequired(message="Can’t be empty")])
|
feedback = TextAreaField('Your message', validators=[DataRequired(message="Can’t be empty")])
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ class CsvFileValidator:
|
|||||||
class ValidGovEmail:
|
class ValidGovEmail:
|
||||||
|
|
||||||
def __call__(self, form, field):
|
def __call__(self, form, field):
|
||||||
|
|
||||||
|
if field.data == '':
|
||||||
|
return
|
||||||
|
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
message = (
|
message = (
|
||||||
'Enter a government email address.'
|
'Enter a government email address.'
|
||||||
@@ -53,10 +57,15 @@ class ValidEmail(Email):
|
|||||||
super().__init__('Enter a valid email address')
|
super().__init__('Enter a valid email address')
|
||||||
|
|
||||||
def __call__(self, form, field):
|
def __call__(self, form, field):
|
||||||
|
|
||||||
|
if field.data == '':
|
||||||
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
validate_email_address(field.data)
|
validate_email_address(field.data)
|
||||||
except InvalidEmailError:
|
except InvalidEmailError:
|
||||||
raise ValidationError(self.message)
|
raise ValidationError(self.message)
|
||||||
|
|
||||||
return super().__call__(form, field)
|
return super().__call__(form, field)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from tests.conftest import (
|
|||||||
mock_get_services,
|
mock_get_services,
|
||||||
mock_get_services_with_no_services,
|
mock_get_services_with_no_services,
|
||||||
mock_get_services_with_one_service,
|
mock_get_services_with_one_service,
|
||||||
|
normalize_spaces,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -224,6 +225,30 @@ def test_email_address_required_for_problems(
|
|||||||
assert isinstance(page.find('span', {'class': 'error-message'}), expected_error)
|
assert isinstance(page.find('span', {'class': 'error-message'}), expected_error)
|
||||||
|
|
||||||
|
|
||||||
|
@freeze_time('2016-12-12 12:00:00.000000')
|
||||||
|
@pytest.mark.parametrize('ticket_type', (
|
||||||
|
PROBLEM_TICKET_TYPE, QUESTION_TICKET_TYPE
|
||||||
|
))
|
||||||
|
def test_email_address_must_be_valid_if_provided_to_support_form(
|
||||||
|
client,
|
||||||
|
mocker,
|
||||||
|
ticket_type,
|
||||||
|
):
|
||||||
|
response = client.post(
|
||||||
|
url_for('main.feedback', ticket_type=ticket_type),
|
||||||
|
data={
|
||||||
|
'feedback': 'blah',
|
||||||
|
'email_address': 'not valid',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||||
|
|
||||||
|
assert normalize_spaces(page.select_one('span.error-message').text) == (
|
||||||
|
'Enter a valid email address'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('ticket_type, severe, is_in_business_hours, is_urgent, is_p1', [
|
@pytest.mark.parametrize('ticket_type, severe, is_in_business_hours, is_urgent, is_p1', [
|
||||||
|
|
||||||
# business hours, always urgent, never p1
|
# business hours, always urgent, never p1
|
||||||
|
|||||||
Reference in New Issue
Block a user