33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
"""Custom matcher that bundles multiple order assertions into one.
|
|
|
|
Participants: you do not need to understand how this works —
|
|
just recognize the pattern and use it as an example for the agent.
|
|
"""
|
|
|
|
from decimal import Decimal
|
|
|
|
from order_domain import Order
|
|
|
|
|
|
def assert_order_state(
|
|
order: Order, *, total: Decimal, line_values: list[Decimal]
|
|
) -> None:
|
|
actual_total = order.total
|
|
actual_line_values = [line.value for line in order.lines]
|
|
|
|
details: list[str] = []
|
|
if actual_total != total:
|
|
details.append(f"Total: expected {total}, but was {actual_total}")
|
|
if actual_line_values != line_values:
|
|
details.append(
|
|
f"Line values: expected [{', '.join(str(v) for v in line_values)}], "
|
|
f"but was [{', '.join(str(v) for v in actual_line_values)}]"
|
|
)
|
|
|
|
if details:
|
|
header = (
|
|
f"Expected order with total {total} and line values "
|
|
f"[{', '.join(str(v) for v in line_values)}] but was:"
|
|
)
|
|
raise AssertionError("\n".join([header, *details]))
|