Files
ComfyUI-OpenClaw/tests/test_r61_api_errors.py

77 lines
2.5 KiB
Python

"""
Tests for R61 API Error Contract.
"""
import os
import sys
import unittest
from unittest.mock import MagicMock, patch
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from api.errors import APIError, ErrorCode, create_error_response, to_response
class TestR61APIErrors(unittest.TestCase):
def test_apierror_serialization(self):
err = APIError(
"Something went wrong",
code=ErrorCode.VALIDATION_ERROR.value,
status=400,
detail={"field": "prompt"},
)
data = err.to_dict()
self.assertFalse(data["ok"])
self.assertEqual(data["error"], "Something went wrong") # Legacy
self.assertEqual(data["message"], "Something went wrong")
self.assertEqual(data["code"], "validation_error")
self.assertEqual(data["detail"], {"field": "prompt"})
def test_default_values(self):
err = APIError("Basic error")
data = err.to_dict()
self.assertEqual(data["code"], "internal_error")
self.assertEqual(data["detail"], {})
self.assertEqual(err.status, 500)
@patch("api.errors.web")
def test_to_response_aiohttp(self, mock_web):
"""Test conversion to aiohttp response when safe."""
mock_response = MagicMock()
mock_web.json_response.return_value = mock_response
err = APIError("Test", status=418)
resp = to_response(err)
mock_web.json_response.assert_called_once()
args, kwargs = mock_web.json_response.call_args
self.assertEqual(kwargs["status"], 418)
self.assertEqual(args[0]["error"], "Test")
self.assertEqual(resp, mock_response)
@patch("api.errors.web", None)
def test_to_response_fallback(self):
"""Test fallback when aiohttp is missing."""
err = APIError("Fallback")
resp = to_response(err)
self.assertIsInstance(resp, dict)
self.assertEqual(resp["error"], "Fallback")
def test_create_error_response_helper(self):
# With active mock for web to return a distinct object
with patch("api.errors.web") as mock_web:
mock_web.json_response.return_value = "RESPONSE_OBJ"
resp = create_error_response("Helper test", status=404)
self.assertEqual(resp, "RESPONSE_OBJ")
args, kwargs = mock_web.json_response.call_args
self.assertEqual(kwargs["status"], 404)
self.assertEqual(args[0]["error"], "Helper test")
if __name__ == "__main__":
unittest.main()