test_schema_validator.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """SchemaValidator 工具层的单元测试"""
  2. from src.tools.schema_validator import SchemaValidator
  3. def _validator():
  4. return SchemaValidator()
  5. def _result(success=True, status_code=200, body=None, error=None):
  6. return {
  7. "success": success,
  8. "status_code": status_code,
  9. "body": body,
  10. "elapsed": 0.1,
  11. "error": error,
  12. }
  13. # --- 状态码校验 ---
  14. def test_status_code_match():
  15. ok, msg = _validator().validate_status_code(200, 200)
  16. assert ok is True and msg is None
  17. def test_status_code_mismatch():
  18. ok, msg = _validator().validate_status_code(200, 400)
  19. assert ok is False and "400" in msg
  20. # --- 响应体结构校验 ---
  21. def test_body_no_schema_skips():
  22. ok, msg = _validator().validate_body({"a": 1}, None)
  23. assert ok is True
  24. def test_body_matches_schema():
  25. schema = {"type": "object", "properties": {"id": {"type": "integer"}}, "required": ["id"]}
  26. ok, msg = _validator().validate_body({"id": 1}, schema)
  27. assert ok is True
  28. def test_body_mismatches_schema():
  29. schema = {"type": "object", "properties": {"id": {"type": "integer"}}, "required": ["id"]}
  30. ok, msg = _validator().validate_body({"name": "x"}, schema)
  31. assert ok is False and "id" in msg
  32. # --- 综合校验 ---
  33. def test_validate_request_failed():
  34. check = _validator().validate(_result(success=False, error="请求超时"), expected_status=200)
  35. assert check["success"] is False
  36. assert any("请求超时" in e for e in check["errors"])
  37. def test_validate_all_pass():
  38. check = _validator().validate(_result(status_code=200, body={"id": 1}), expected_status=200)
  39. assert check["success"] is True and check["errors"] == []
  40. def test_validate_status_and_schema_both_fail():
  41. schema = {"type": "object", "required": ["id"]}
  42. check = _validator().validate(
  43. _result(status_code=500, body={}), expected_status=200, expected_schema=schema
  44. )
  45. assert check["success"] is False and len(check["errors"]) == 2