Files
egutierrez 7913116a8e chore: auto-commit (129 archivos)
- .claude/agents/fn-analizador/SKILL.md
- .claude/agents/fn-constructor/SKILL.md
- .claude/agents/fn-executor/SKILL.md
- .claude/agents/fn-mejorador/SKILL.md
- .claude/agents/fn-orquestador/SKILL.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/commands/app.md
- .claude/commands/compile.md
- .claude/commands/cpp-app.md
- .claude/commands/create_functions.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 22:23:12 +02:00

78 lines
2.4 KiB
Python

"""Tests para http_post_json."""
import json
import sys
import os
import unittest
import urllib.error
from io import BytesIO
from unittest.mock import MagicMock, patch
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from infra.http_post_json import http_post_json
def _make_response(data: bytes, status: int = 200):
resp = MagicMock()
resp.read.return_value = data
resp.status = status
resp.__enter__ = lambda s: s
resp.__exit__ = MagicMock(return_value=False)
return resp
class TestHttpPostJson(unittest.TestCase):
def test_mock_post_body_serializado_correctamente(self):
captured = []
def fake_urlopen(req, timeout=None):
captured.append(req.data)
return _make_response(b'{"created": true}')
body = {"name": "test", "value": 99}
with patch("urllib.request.urlopen", side_effect=fake_urlopen):
http_post_json("http://example.com/api", body)
sent = json.loads(captured[0])
self.assertEqual(sent["name"], "test")
self.assertEqual(sent["value"], 99)
def test_mock_respuesta_201(self):
mock_resp = _make_response(b'{"id": 1}', status=201)
with patch("urllib.request.urlopen", return_value=mock_resp):
result = http_post_json("http://example.com/api", {"x": 1})
self.assertEqual(result, {"id": 1})
def test_mock_respuesta_500_error(self):
err = urllib.error.HTTPError(
url="http://example.com/api",
code=500,
msg="Internal Server Error",
hdrs=None, # type: ignore[arg-type]
fp=BytesIO(b"server error details"),
)
with patch("urllib.request.urlopen", side_effect=err):
with self.assertRaises(RuntimeError) as ctx:
http_post_json("http://example.com/api", {"x": 1})
self.assertIn("500", str(ctx.exception))
def test_body_con_unicode(self):
captured = []
def fake_urlopen(req, timeout=None):
captured.append(req.data)
return _make_response(b'{"ok": true}')
body = {"mensaje": "Hola mundo \u00e9\u00e0\u00fc \U0001f600"}
with patch("urllib.request.urlopen", side_effect=fake_urlopen):
http_post_json("http://example.com/api", body)
decoded = json.loads(captured[0].decode("utf-8"))
self.assertEqual(decoded["mensaje"], body["mensaje"])
if __name__ == "__main__":
unittest.main()