Verify that decode(encode(x)) preserves all fields in the original payload. Messages are compared semantically (key order and None values are normalized). All other keys are compared by exact equality.
(codec, payload)
| 187 | |
| 188 | |
| 189 | def assert_round_trip(codec, payload): |
| 190 | """Verify that decode(encode(x)) preserves all fields in the original payload. |
| 191 | |
| 192 | Messages are compared semantically (key order and None values are normalized). |
| 193 | All other keys are compared by exact equality. |
| 194 | """ |
| 195 | original = LLMRequest({}, cast(JsonObject, payload)) |
| 196 | annotated = codec.decode(original) |
| 197 | result = codec.encode(annotated, original) |
| 198 | for k, v in payload.items(): |
| 199 | if k == "messages": |
| 200 | # Semantic comparison: normalize both sides |
| 201 | orig_msgs = [_normalize_message(m) for m in v] |
| 202 | result_msgs = [_normalize_message(m) for m in result.content[k]] |
| 203 | assert result_msgs == orig_msgs, f"Messages differ:\n orig: {orig_msgs}\n got: {result_msgs}" |
| 204 | else: |
| 205 | assert result.content[k] == v, f"Key {k!r} changed: {v!r} -> {result.content.get(k)!r}" |
| 206 | |
| 207 | |
| 208 | # --------------------------------------------------------------------------- |
no test coverage detected