mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-09-07 04:26:45 +00:00
✨ Feature: 兼容 Pydantic v2 (#2544)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
56
tests/test_compat.py
Normal file
56
tests/test_compat.py
Normal file
@ -0,0 +1,56 @@
|
||||
from typing import Any
|
||||
from dataclasses import dataclass
|
||||
|
||||
import pytest
|
||||
|
||||
from nonebot.compat import (
|
||||
DEFAULT_CONFIG,
|
||||
Required,
|
||||
FieldInfo,
|
||||
PydanticUndefined,
|
||||
custom_validation,
|
||||
type_validate_python,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_default_config():
|
||||
assert DEFAULT_CONFIG.get("extra") == "allow"
|
||||
assert DEFAULT_CONFIG.get("arbitrary_types_allowed") is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_field_info():
|
||||
# required should be convert to PydanticUndefined
|
||||
assert FieldInfo(Required).default is PydanticUndefined
|
||||
|
||||
# field info should allow extra attributes
|
||||
assert FieldInfo(test="test").extra["test"] == "test"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_custom_validation():
|
||||
called = []
|
||||
|
||||
@custom_validation
|
||||
@dataclass
|
||||
class TestModel:
|
||||
test: int
|
||||
|
||||
@classmethod
|
||||
def __get_validators__(cls):
|
||||
yield cls._validate_1
|
||||
yield cls._validate_2
|
||||
|
||||
@classmethod
|
||||
def _validate_1(cls, v: Any) -> Any:
|
||||
called.append(1)
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def _validate_2(cls, v: Any) -> Any:
|
||||
called.append(2)
|
||||
return cls(test=v["test"])
|
||||
|
||||
assert type_validate_python(TestModel, {"test": 1}) == TestModel(test=1)
|
||||
assert called == [1, 2]
|
Reference in New Issue
Block a user