When adding/changing tests, optimize for (1) clear intent, (2) stability against refactors, and (3) determinism.

Practical rules:

Example: readable, stable expectation

result = convert_to_openai_function(MyModel)
assert result == {
    "name": "MyModel",
    "parameters": {"type": "object", "properties": {}, "required": []},
    "strict": True,
}

Example: avoid brittle intermediate-step tests (assert the actual SDK call)

client = MagicMock()
# arrange llm to use mocked client
llm.invoke("hello", prompt_cache_key="k")
called_kwargs = client.create.call_args.kwargs
assert called_kwargs["prompt_cache_key"] == "k"

Example: fix nondeterministic ordering

items = list(set(items))          # flaky
items = sorted(set(items))        # deterministic