From 56790e43ebd64a44a7f0beaa98fb80aafd46f4ed Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 19 May 2026 09:25:01 +0000 Subject: [PATCH] test(mcp): cover user_fields header template fallback for codecov Adds a regression test for the AttributeError fallback in resolve_user_field_headers when a corrupt JSONB row carries a non-string header_value_template. Bumps patch coverage past the codecov auto target. --- .../mcp_server/test_mcp_user_fields.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_user_fields.py b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_user_fields.py index 57ac58f649d..61da42c0089 100644 --- a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_user_fields.py +++ b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_user_fields.py @@ -330,6 +330,25 @@ def test_resolve_user_field_headers_does_not_evaluate_attribute_access(): assert headers == {"Authorization": "Bearer {value.__class__}"} +def test_resolve_user_field_headers_falls_back_on_non_string_template(): + """A corrupt JSONB row may carry a non-string ``header_value_template`` + (e.g. an int from an external write that bypassed the API). The resolver + must catch the resulting ``AttributeError`` from ``int.replace`` and fall + back to the raw user value rather than crashing the request path.""" + srv = _gmail_server( + user_fields=[ + { + "field_key": "TOKEN", + "header_name": "Authorization", + "header_value_template": 42, + "required": True, + } + ] + ) + headers = resolve_user_field_headers(srv, {"TOKEN": "raw-tok"}) + assert headers == {"Authorization": "raw-tok"} + + def test_resolve_user_field_headers_skips_entries_missing_header_name(): """Stdio-only fields (no header_name) must not produce empty-name headers.""" srv = MCPServer(