From dcff23a25f30db6fc589ae2194df39b1a9bc606b Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Sat, 9 May 2026 13:07:28 -0700 Subject: [PATCH] test(xai-image): regression-guard literal '1k'/'2k' resolution payload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The xAI image-gen provider was DOA from PR #14765 onward — every request 422'd because the resolution param was being mapped to '1024'/'2048' but xAI's API expects the literal strings '1k'/'2k'. PR #18678 fixed the mapping; this test asserts the wire payload carries the literal so the regression cannot recur silently. --- tests/plugins/image_gen/test_xai_provider.py | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/plugins/image_gen/test_xai_provider.py b/tests/plugins/image_gen/test_xai_provider.py index 0da46d43ec9..b5cfdf16a9b 100644 --- a/tests/plugins/image_gen/test_xai_provider.py +++ b/tests/plugins/image_gen/test_xai_provider.py @@ -239,6 +239,28 @@ class TestGenerate: assert "Bearer test-key-12345" in headers["Authorization"] assert "Hermes-Agent" in headers["User-Agent"] + def test_payload_resolution_is_literal_1k_or_2k(self): + """Regression: xAI API rejects numeric resolutions ("1024"/"2048") with 422. + + The endpoint expects the literal strings "1k" or "2k". Ensure the wire + payload carries that literal — not a numeric mapping. See PR #18678. + """ + from plugins.image_gen.xai import XAIImageGenProvider + + mock_resp = MagicMock() + mock_resp.status_code = 200 + mock_resp.raise_for_status = MagicMock() + mock_resp.json.return_value = {"data": [{"url": "https://xai.image/test.png"}]} + + with patch("plugins.image_gen.xai.requests.post", return_value=mock_resp) as mock_post: + provider = XAIImageGenProvider() + provider.generate(prompt="test") + + payload = mock_post.call_args.kwargs.get("json") or mock_post.call_args[1].get("json") + assert payload["resolution"] in {"1k", "2k"}, ( + f"resolution must be the literal '1k' or '2k', got {payload['resolution']!r}" + ) + # --------------------------------------------------------------------------- # Registration test