Skip to content

Commit 03e2d3d

Browse files
authored
VED-934: Search Error Message (#1009)
* fix search error message bug * write unittest
1 parent 32bd591 commit 03e2d3d

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

lambdas/backend/src/controller/parameter_parser.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ def process_optional_params(
107107
"""Parse optional params (date.from, date.to, _include).
108108
Raises ParameterExceptionError for any validation error.
109109
"""
110+
errors = []
110111
include = None
111112
date_from = None
112113
date_to = None
@@ -117,36 +118,31 @@ def process_optional_params(
117118

118119
if date_froms:
119120
if len(date_froms) != 1:
120-
raise ParameterExceptionError(
121-
f"Search parameter {ImmunizationSearchParameterName.DATE_FROM} may have one value at most."
122-
)
121+
errors.append(f"Search parameter {ImmunizationSearchParameterName.DATE_FROM} may have one value at most.")
123122
try:
124123
date_from = datetime.datetime.strptime(date_froms[0], "%Y-%m-%d").date()
125124
except ValueError:
126-
raise ParameterExceptionError(
127-
f"Search parameter {ImmunizationSearchParameterName.DATE_FROM} must be in format: YYYY-MM-DD"
128-
)
125+
errors.append(f"Search parameter {ImmunizationSearchParameterName.DATE_FROM} must be in format: YYYY-MM-DD")
129126

130127
if date_tos:
131128
if len(date_tos) != 1:
132-
raise ParameterExceptionError(
133-
f"Search parameter {ImmunizationSearchParameterName.DATE_TO} may have one value at most."
134-
)
129+
errors.append(f"Search parameter {ImmunizationSearchParameterName.DATE_TO} may have one value at most.")
135130
try:
136131
date_to = datetime.datetime.strptime(date_tos[0], "%Y-%m-%d").date()
137132
except ValueError:
138-
raise ParameterExceptionError(
139-
f"Search parameter {ImmunizationSearchParameterName.DATE_TO} must be in format: YYYY-MM-DD"
140-
)
133+
errors.append(f"Search parameter {ImmunizationSearchParameterName.DATE_TO} must be in format: YYYY-MM-DD")
141134

142135
if includes:
143136
if includes[0].lower() != "immunization:patient":
144-
raise ParameterExceptionError(
137+
errors.append(
145138
f"Search parameter {ImmunizationSearchParameterName.INCLUDE} may only be "
146139
f"'Immunization:patient' if provided."
147140
)
148141
include = includes[0]
149142

143+
if errors:
144+
raise ParameterExceptionError("; ".join(errors))
145+
150146
return date_from, date_to, include
151147

152148

lambdas/backend/tests/controller/test_parameter_parser.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,10 @@ def test_process_search_params_raises_date_errors(self):
178178
self.date_to_key: ["invalid-date"], # invalid format
179179
}
180180
)
181-
182-
expected = f"Search parameter {self.date_from_key} may have one value at most."
181+
expected = (
182+
f"Search parameter {self.date_from_key} may have one value at most.; "
183+
f"Search parameter {self.date_to_key} must be in format: YYYY-MM-DD"
184+
)
183185
self.assertEqual(str(e.exception), expected)
184186

185187
def test_process_search_params_invalid_nhs_number_is_rejected(self):

0 commit comments

Comments
 (0)