Skip to content

Commit 9cccfbe

Browse files
authored
validate params in bdd scenarios (#1176)
1 parent 8817b26 commit 9cccfbe

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

tests/conftest.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ def api_request(configuration, context, name):
406406
def request_body(context, data):
407407
"""Set request body."""
408408
tpl = Template(data).render(**context)
409-
context["api_request"]["kwargs"]["body"] = json.loads(tpl)
409+
context["api_request"]["kwargs"]["body"] = tpl
410410

411411

412412
@given(parsers.parse('body from file "{path}"'))
@@ -416,21 +416,20 @@ def request_body_from_file(context, path, package_name):
416416
with open(os.path.join(os.path.dirname(__file__), version, "features", path)) as f:
417417
data = f.read()
418418
tpl = Template(data).render(**context)
419-
context["api_request"]["kwargs"]["body"] = json.loads(tpl)
419+
context["api_request"]["kwargs"]["body"] = tpl
420420

421421

422422
@given(parsers.parse('request contains "{name}" parameter from "{path}"'))
423423
def request_parameter(context, name, path):
424424
"""Set request parameter."""
425-
426-
context["api_request"]["kwargs"][escape_reserved_keyword(snake_case(name))] = glom(context, path)
425+
context["api_request"]["kwargs"][escape_reserved_keyword(snake_case(name))] = json.dumps(glom(context, path))
427426

428427

429428
@given(parsers.parse('request contains "{name}" parameter with value {value}'))
430429
def request_parameter_with_value(context, name, value):
431430
"""Set request parameter."""
432431
tpl = Template(value).render(**context)
433-
context["api_request"]["kwargs"][escape_reserved_keyword(snake_case(name))] = json.loads(tpl)
432+
context["api_request"]["kwargs"][escape_reserved_keyword(snake_case(name))] = tpl
434433

435434

436435
def build_given(version, operation):
@@ -539,6 +538,10 @@ def execute_request(undo, context, client, api_version):
539538
"""Execute the prepared request."""
540539
api_request = context["api_request"]
541540

541+
params_map = getattr(api_request["api"], f'_{api_request["request"].__name__}_endpoint').params_map
542+
for k, v in api_request["kwargs"].items():
543+
api_request["kwargs"][k] = client.deserialize(v, params_map[k]['openapi_types'], True)
544+
542545
try:
543546
response = api_request["request"](*api_request["args"], **api_request["kwargs"])
544547
# Reserialise the response body to JSON to facilitate test assertions
@@ -569,6 +572,10 @@ def execute_request_with_pagination(undo, context, client, api_version):
569572
"""Execute the prepared paginated request."""
570573
api_request = context["api_request"]
571574

575+
params_map = getattr(api_request["api"], f'_{api_request["request"].__name__}_endpoint').params_map
576+
for k, v in api_request["kwargs"].items():
577+
api_request["kwargs"][k] = client.deserialize(v, params_map[k]['openapi_types'], True)
578+
572579
kwargs = api_request["kwargs"]
573580
client.configuration.return_http_data_only = True
574581
method = getattr(api_request["api"], f"{api_request['request'].__name__}_with_pagination")

0 commit comments

Comments
 (0)