Skip to content

Commit d625bc7

Browse files
test(generators/rest): add regression tests for non-string response coercion
Adds two tests to validate that _get_response() coerces non-string values (int, float, bool) to str before wrapping in Message objects: - test_json_rest_non_string_response_coerced_to_str: parametrized scalar cases - test_json_rest_non_string_list_coerced_to_str: multi-value list from JSONPath
1 parent 3ef3280 commit d625bc7

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

tests/generators/test_rest.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,3 +500,42 @@ def test_rest_mtls_pickle_roundtrip(real_mtls_cert_files):
500500
assert isinstance(
501501
adapter, _MtlsAdapter
502502
), "Reconstructed session must have an _MtlsAdapter mounted on 'https://'"
503+
504+
505+
@pytest.mark.usefixtures("set_rest_config")
506+
@pytest.mark.parametrize(
507+
"value,expected_text",
508+
[
509+
(42, "42"),
510+
(3.14, "3.14"),
511+
(True, "True"),
512+
],
513+
)
514+
def test_json_rest_non_string_response_coerced_to_str(requests_mock, value, expected_text):
515+
# regression: non-string values from response_json_field must be str()-coerced
516+
# before being wrapped in Message (Message.text is typed str | None)
517+
requests_mock.post(
518+
DEFAULT_URI,
519+
text=json.dumps({"result": value}, ensure_ascii=False),
520+
)
521+
_config.plugins.generators["rest"]["RestGenerator"]["response_json"] = True
522+
_config.plugins.generators["rest"]["RestGenerator"]["response_json_field"] = "result"
523+
generator = RestGenerator()
524+
conv = Conversation([Turn("user", Message("test prompt"))])
525+
output = generator._call_model(conv)
526+
assert output == [Message(expected_text)]
527+
528+
529+
@pytest.mark.usefixtures("set_rest_config")
530+
def test_json_rest_non_string_list_coerced_to_str(requests_mock):
531+
# regression: each element in a multi-value response list must be str()-coerced
532+
requests_mock.post(
533+
DEFAULT_URI,
534+
text=json.dumps({"scores": [1, 2, 3]}, ensure_ascii=False),
535+
)
536+
_config.plugins.generators["rest"]["RestGenerator"]["response_json"] = True
537+
_config.plugins.generators["rest"]["RestGenerator"]["response_json_field"] = "$.scores[*]"
538+
generator = RestGenerator()
539+
conv = Conversation([Turn("user", Message("test prompt"))])
540+
output = generator._call_model(conv)
541+
assert output == [Message("1"), Message("2"), Message("3")]

0 commit comments

Comments
 (0)