Files
eeshsaxena 80e09ad0f0 test: add unit tests for pydantic utils (none_to_omit, parse_pydantic_error) (#3784)
## Description

`composio/utils/pydantic.py` had no dedicated test module. This adds
`tests/test_pydantic_utils.py` covering:

- `none_to_omit` converting `None` to the `omit` sentinel while passing
through other values (including falsy `0`/`""`)
- `parse_pydantic_error` listing missing fields, reporting type errors
with the offending parameter, and handling both together

No source changes.

## Verification

`pytest tests/test_pydantic_utils.py` - 5 passed. `ruff check` / `ruff
format --check` clean.

Co-authored-by: Alberto Schiabel <jkomyno@users.noreply.github.com>
2026-07-28 13:05:51 +05:30

51 lines
1.5 KiB
Python

"""Tests for the pydantic utility module."""
import pydantic
import pytest
from composio_client import omit
from composio.utils.pydantic import none_to_omit, parse_pydantic_error
class _Model(pydantic.BaseModel):
name: str
age: int
def test_none_to_omit_converts_none():
assert none_to_omit(None) is omit
def test_none_to_omit_passes_values_through():
assert none_to_omit("hello") == "hello"
assert none_to_omit(42) == 42
# Falsy-but-not-None values are preserved (not converted to omit).
assert none_to_omit(0) == 0
assert none_to_omit("") == ""
def _validation_error(**kwargs) -> pydantic.ValidationError:
with pytest.raises(pydantic.ValidationError) as exc_info:
_Model(**kwargs)
return exc_info.value
def test_parse_pydantic_error_lists_missing_fields():
message = parse_pydantic_error(_validation_error(age=5))
assert "Invalid request data provided" in message
assert "missing" in message
assert "name" in message
def test_parse_pydantic_error_reports_type_errors_with_param():
message = parse_pydantic_error(_validation_error(name="a", age="not-an-int"))
# A non-missing error names the offending parameter.
assert "age" in message
assert "missing" not in message
def test_parse_pydantic_error_handles_missing_and_other_together():
message = parse_pydantic_error(_validation_error(age="not-an-int"))
assert "name" in message # missing
assert "age" in message # type error