48 lines
1.5 KiB
Python
Raw Normal View History

from pytest_bdd import when, then, parsers
@when("I run the Pipeline", target_fixture="pipeline_result")
def run_pipeline(pipeline_data, spying_tracer):
"""
Attempts to run a pipeline with the given inputs.
`pipeline_data` is a tuple that must contain:
* A Pipeline instance
* The Pipeline inputs
* The expected outputs
Optionally it can contain:
* The expected order of execution
If successful returns a tuple of the run outputs and the expected outputs.
In case an exceptions is raised returns that.
"""
pipeline, inputs, expected_outputs = pipeline_data[0], pipeline_data[1], pipeline_data[2]
if len(pipeline_data) == 4:
expected_order = pipeline_data[3]
try:
res = pipeline.run(inputs)
run_order = [
span.tags["haystack.component.name"]
for span in spying_tracer.spans
if "haystack.component.name" in span.tags
]
return res, expected_outputs, run_order, expected_order
except Exception as e:
return e
@then("it should return the expected result")
def check_pipeline_result(pipeline_result):
assert pipeline_result[0] == pipeline_result[1]
@then("components ran in the expected order")
def check_pipeline_run_order(pipeline_result):
assert pipeline_result[2] == pipeline_result[3]
@then(parsers.parse("it must have raised {exception_class_name}"))
def check_pipeline_raised(pipeline_result, exception_class_name):
assert pipeline_result.__class__.__name__ == exception_class_name