diff --git a/lung_cancer_screening/core/jinja2/layout.jinja b/lung_cancer_screening/core/jinja2/layout.jinja index 8db401db..2982402e 100644 --- a/lung_cancer_screening/core/jinja2/layout.jinja +++ b/lung_cancer_screening/core/jinja2/layout.jinja @@ -9,6 +9,20 @@ {% block pageTitle %}Lung Cancer Screening - NHS{% endblock %} +{% block beforeContent %} + {% if back_link_url %} + + {% endif %} +{% endblock beforeContent %} + + {% block content %} {% block page_content %} {% endblock page_content %} diff --git a/lung_cancer_screening/nhsuk_forms/decimal_field.py b/lung_cancer_screening/nhsuk_forms/decimal_field.py index 0a7520d3..2029c26e 100644 --- a/lung_cancer_screening/nhsuk_forms/decimal_field.py +++ b/lung_cancer_screening/nhsuk_forms/decimal_field.py @@ -11,6 +11,7 @@ def __init__( ): kwargs["template_name"] = "input.jinja" + self.suffix = kwargs.pop("suffix", None) self.hint = hint self.classes = classes self.label_classes = label_classes diff --git a/lung_cancer_screening/nhsuk_forms/imperial_height_form.py b/lung_cancer_screening/nhsuk_forms/imperial_height_field.py similarity index 81% rename from lung_cancer_screening/nhsuk_forms/imperial_height_form.py rename to lung_cancer_screening/nhsuk_forms/imperial_height_field.py index 92506138..db50275e 100644 --- a/lung_cancer_screening/nhsuk_forms/imperial_height_form.py +++ b/lung_cancer_screening/nhsuk_forms/imperial_height_field.py @@ -45,18 +45,34 @@ class ImperialHeightField(forms.MultiValueField): def __init__(self, *args, **kwargs): error_messages = kwargs.get("error_messages", {}) + between_feet="Feet must be between 4 and 8" + feet_kwargs = { + "min_value": 4, + "max_value": 8, "error_messages": { - 'invalid': 'Feet must be in whole numbers', **error_messages, + 'invalid': 'Feet must be in whole numbers', + 'min_value': between_feet, + 'max_value': between_feet, + 'incomplete': between_feet, }, } + + between_inches = "Inches must be between 0 and 11" + inches_kwargs = { + "min_value": 0, + "max_value": 11, "error_messages": { - 'invalid': 'Inches must be in whole numbers', **error_messages, + 'invalid': 'Inches must be in whole numbers', + 'min_value': between_inches, + 'max_value': between_inches, + 'incomplete': between_inches, }, } + fields = ( IntegerField(**feet_kwargs), IntegerField(**inches_kwargs), diff --git a/lung_cancer_screening/nhsuk_forms/integer_field.py b/lung_cancer_screening/nhsuk_forms/integer_field.py index 8e513dd2..d11c3178 100644 --- a/lung_cancer_screening/nhsuk_forms/integer_field.py +++ b/lung_cancer_screening/nhsuk_forms/integer_field.py @@ -12,6 +12,7 @@ def __init__( ): kwargs["template_name"] = "input.jinja" + self.suffix = kwargs.pop("suffix", None) self.hint = hint self.classes = classes self.label_classes = label_classes diff --git a/lung_cancer_screening/nhsuk_forms/jinja2/imperial-height-input.jinja b/lung_cancer_screening/nhsuk_forms/jinja2/imperial-height-input.jinja index 76b983dd..da0ecd8a 100644 --- a/lung_cancer_screening/nhsuk_forms/jinja2/imperial-height-input.jinja +++ b/lung_cancer_screening/nhsuk_forms/jinja2/imperial-height-input.jinja @@ -21,7 +21,6 @@ {{ input({ "label": { "text": "Feet", - "classes": "nhsuk-fieldset__legend--m", "isPageHeading": false }, "hint": { @@ -30,8 +29,9 @@ "id": field.auto_id + "_0", "name": field.html_name + "_0", "value": field.subwidgets.0.data.value, - "classes": "nhsuk-input--width-2" + field_error_classes, - "type": "number" + "classes": "nhsuk-input--width-4" + field_error_classes, + "type": "number", + "suffix": "ft" }) }} @@ -39,14 +39,14 @@ {{ input({ "label": { "text": "Inches", - "classes": "nhsuk-fieldset__legend--m", "isPageHeading": false }, "id": field.auto_id + "_1", "name": field.html_name + "_1", "value": field.subwidgets.1.data.value, - "classes": "nhsuk-input--width-2" + field_error_classes, - "type": "number" + "classes": "nhsuk-input--width-4" + field_error_classes, + "type": "number", + "suffix": "in" }) }} diff --git a/lung_cancer_screening/nhsuk_forms/jinja2/input.jinja b/lung_cancer_screening/nhsuk_forms/jinja2/input.jinja index b1f8e9fc..13aba3a5 100644 --- a/lung_cancer_screening/nhsuk_forms/jinja2/input.jinja +++ b/lung_cancer_screening/nhsuk_forms/jinja2/input.jinja @@ -15,6 +15,7 @@ "hint": { "text": unbound_field.hint } if unbound_field.hint, + "suffix": unbound_field.suffix if unbound_field.suffix, "id": field.auto_id, "name": field.html_name, "value": field.value() or "", diff --git a/lung_cancer_screening/nhsuk_forms/tests/unit/test_decimal_field.py b/lung_cancer_screening/nhsuk_forms/tests/unit/test_decimal_field.py new file mode 100644 index 00000000..6cff1c43 --- /dev/null +++ b/lung_cancer_screening/nhsuk_forms/tests/unit/test_decimal_field.py @@ -0,0 +1,38 @@ +from django.test import TestCase +from django.forms import Form +from ...decimal_field import DecimalField + + +class TestDecimalField(TestCase): + def test_renders_nhs_input(self): + class TestForm(Form): + field = DecimalField(label="Abc", initial=1, max_value=10) + self.assertHTMLEqual( + TestForm()["field"].as_field_group(), + """ +
+ +
+ """, + ) + + def test_renders_nhs_input_with_suffix(self): + class TestForm(Form): + field = DecimalField(label="Abc", initial=1, max_value=10, suffix="cm") + self.assertHTMLEqual( + TestForm()["field"].as_field_group(), + """ +
+ +
+ + +
+ + """, + ) + diff --git a/lung_cancer_screening/nhsuk_forms/tests/unit/test_integer_field.py b/lung_cancer_screening/nhsuk_forms/tests/unit/test_integer_field.py index 795f4a7f..31b4a75a 100644 --- a/lung_cancer_screening/nhsuk_forms/tests/unit/test_integer_field.py +++ b/lung_cancer_screening/nhsuk_forms/tests/unit/test_integer_field.py @@ -3,11 +3,10 @@ from ...integer_field import IntegerField -class TestForm(Form): - field = IntegerField(label="Abc", initial=1, max_value=10) - class TestIntegerField(TestCase): def test_renders_nhs_input(self): + class TestForm(Form): + field = IntegerField(label="Abc", initial=1, max_value=10) self.assertHTMLEqual( TestForm()["field"].as_field_group(), """ @@ -19,3 +18,20 @@ def test_renders_nhs_input(self): """, ) + def test_renders_nhs_input_with_suffix(self): + class TestForm(Form): + field = IntegerField(label="Abc", initial=1, max_value=10, suffix="suffix") + self.assertHTMLEqual( + TestForm()["field"].as_field_group(), + """ +
+ +
+ + +
+
+ """, + ) diff --git a/lung_cancer_screening/questions/forms/imperial_height_form.py b/lung_cancer_screening/questions/forms/imperial_height_form.py index 4946bb55..39da3552 100644 --- a/lung_cancer_screening/questions/forms/imperial_height_form.py +++ b/lung_cancer_screening/questions/forms/imperial_height_form.py @@ -1,6 +1,6 @@ from django import forms -from ...nhsuk_forms.imperial_height_form import ImperialHeightField +from ...nhsuk_forms.imperial_height_field import ImperialHeightField from ..models.response_set import ResponseSet class ImperialHeightForm(forms.ModelForm): @@ -16,7 +16,6 @@ def __init__(self, *args, **kwargs): require_all_fields=False, error_messages={ 'required': 'Enter your height', - 'incomplete': 'Enter your height' } ) diff --git a/lung_cancer_screening/questions/forms/metric_height_form.py b/lung_cancer_screening/questions/forms/metric_height_form.py index a3faf455..2f251ef0 100644 --- a/lung_cancer_screening/questions/forms/metric_height_form.py +++ b/lung_cancer_screening/questions/forms/metric_height_form.py @@ -11,11 +11,14 @@ def __init__(self, *args, **kwargs): self.instance.participant = self.participant self.fields["height"] = DecimalField( + decimal_places=1, label="Centimetres", classes="nhsuk-input--width-4", error_messages={ 'required': 'Enter your height', - } + "max_decimal_places": "Centimetres must be to 1 decimal place, for example 185.5cm", + }, + suffix="cm" ) def clean_height(self): diff --git a/lung_cancer_screening/questions/jinja2/height.jinja b/lung_cancer_screening/questions/jinja2/height.jinja index 62774b19..46353a98 100644 --- a/lung_cancer_screening/questions/jinja2/height.jinja +++ b/lung_cancer_screening/questions/jinja2/height.jinja @@ -3,6 +3,11 @@ {% from 'nhsuk/components/back-link/macro.jinja' import backLink %} {% from 'nhsuk/components/fieldset/macro.jinja' import fieldset %} +{% set HEIGHT_UNIT = { + 'imperial': 'feet and inches', + 'metric': 'centimetres' +} %} + {% block beforeContent %}