Skip to content

Commit 54196cd

Browse files
committed
PPHA-475: Ensure recall values for height and weight are re converted for display
1 parent bdb6d15 commit 54196cd

File tree

5 files changed

+66
-2
lines changed

5 files changed

+66
-2
lines changed

lung_cancer_screening/questions/forms/metric_height_form.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ class MetricHeightForm(forms.ModelForm):
99
def __init__(self, *args, **kwargs):
1010
super().__init__(*args, **kwargs)
1111

12+
# Convert mm to cm for display
13+
if self.instance and self.instance.height is not None:
14+
self.initial['height'] = self.instance.height / 10
15+
1216
self.fields["height"] = DecimalField(
1317
decimal_places=1,
1418
label="Centimetres",

lung_cancer_screening/questions/forms/metric_weight_form.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ class MetricWeightForm(forms.ModelForm):
99
def __init__(self, *args, **kwargs):
1010
super().__init__(*args, **kwargs)
1111

12+
# Convert hundreds of grams to kg for display
13+
if self.instance and self.instance.weight_metric is not None:
14+
self.initial['weight_metric'] = self.instance.weight_metric / 10
15+
1216
self.fields["weight_metric"] = DecimalField(
1317
decimal_places=1,
1418
label="Kilograms",
@@ -27,6 +31,9 @@ def __init__(self, *args, **kwargs):
2731
def clean_weight_metric(self):
2832
return self.cleaned_data['weight_metric'] * 10
2933

34+
def clean_weight_imperial(self):
35+
return None
36+
3037
class Meta:
3138
model = ResponseSet
32-
fields = ['weight_metric']
39+
fields = ['weight_metric', 'weight_imperial']

lung_cancer_screening/questions/tests/unit/forms/test_imperial_weight_form.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,15 @@ def test_is_invalid_when_stone_over_50(self):
154154
form.errors["weight_imperial"],
155155
["Weight must be between 4 stone and 50 stone"]
156156
)
157+
158+
def test_setting_imperial_weight_clears_metric_weight(self):
159+
self.response_set.weight_metric = 705
160+
form = ImperialWeightForm(
161+
instance=self.response_set,
162+
data={
163+
"weight_imperial_0": "5",
164+
"weight_imperial_1": "9"
165+
}
166+
)
167+
form.save()
168+
self.assertEqual(self.response_set.weight_metric, None)

lung_cancer_screening/questions/tests/unit/forms/test_metric_height_form.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def test_is_valid_with_valid_input(self):
2121
)
2222
self.assertTrue(form.is_valid())
2323

24-
def test_converts_cm_to_mm(self):
24+
def test_converts_cm_to_mm_before_saving(self):
2525
height = "170.4"
2626
form = MetricHeightForm(
2727
instance=self.response_set,
@@ -33,6 +33,15 @@ def test_converts_cm_to_mm(self):
3333
form.is_valid()
3434
self.assertEqual(form.cleaned_data["height"], 1704)
3535

36+
def test_converts_mm_to_cm_before_rendering(self):
37+
self.response_set.height = 1704
38+
form = MetricHeightForm(
39+
instance=self.response_set
40+
)
41+
42+
self.assertEqual(form["height"].value(), 170.4)
43+
44+
3645
def test_setting_height_clears_imperial_height(self):
3746
height = "170.4"
3847
form = MetricHeightForm(

lung_cancer_screening/questions/tests/unit/forms/test_metric_weight_form.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,26 @@ def test_is_valid_with_valid_input(self):
2020
)
2121
self.assertTrue(form.is_valid())
2222

23+
def test_converts_kg_to_hundreds_of_grams_before_saving(self):
24+
weight = "70.5"
25+
form = MetricWeightForm(
26+
instance=self.response_set,
27+
data={
28+
"weight_metric": weight
29+
}
30+
)
31+
32+
form.is_valid()
33+
self.assertEqual(form.cleaned_data["weight_metric"], 705)
34+
35+
def test_converts_hundreds_of_grams_to_kg_before_rendering(self):
36+
self.response_set.weight_metric = 705
37+
form = MetricWeightForm(
38+
instance=self.response_set
39+
)
40+
41+
self.assertEqual(form["weight_metric"].value(), 70.5)
42+
2343
def test_is_not_valid_with_invalid_input(self):
2444
weight = "a"
2545
form = MetricWeightForm(
@@ -107,3 +127,15 @@ def test_is_invalid_with_multiple_decimal_places(self):
107127
form.errors["weight_metric"],
108128
["Kilograms must be to 1 decimal place, for example 90.2kgs"]
109129
)
130+
131+
def test_setting_metric_weight_clears_imperial_weight(self):
132+
self.response_set.weight_imperial = "66"
133+
form = MetricWeightForm(
134+
instance=self.response_set,
135+
data={
136+
"weight_metric": "70.5"
137+
}
138+
)
139+
form.save()
140+
self.response_set.refresh_from_db()
141+
self.assertEqual(self.response_set.weight_imperial, None)

0 commit comments

Comments
 (0)