64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
import logging
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from openapi_pydantic import Reference, schema_validate
|
|
from openapi_pydantic.compat import (
|
|
DEFS_KEY,
|
|
PYDANTIC_V2,
|
|
ConfigDict,
|
|
Extra,
|
|
models_json_schema,
|
|
v1_schema,
|
|
)
|
|
|
|
|
|
def test_schema() -> None:
|
|
schema = schema_validate(
|
|
{
|
|
"title": "reference list",
|
|
"description": "schema for list of reference type",
|
|
"allOf": [{"$ref": "#/definitions/TestType"}],
|
|
}
|
|
)
|
|
logging.debug(f"schema.allOf={schema.allOf}")
|
|
assert schema.allOf
|
|
assert isinstance(schema.allOf, list)
|
|
assert isinstance(schema.allOf[0], Reference)
|
|
assert schema.allOf[0].ref == "#/definitions/TestType"
|
|
|
|
|
|
def test_additional_properties_is_bool() -> None:
|
|
class TestModel(BaseModel):
|
|
test_field: str
|
|
|
|
if PYDANTIC_V2:
|
|
model_config = ConfigDict(
|
|
extra="forbid",
|
|
)
|
|
|
|
else:
|
|
|
|
class Config:
|
|
extra = Extra.forbid
|
|
|
|
if PYDANTIC_V2:
|
|
_key_map, schema_definition = models_json_schema([(TestModel, "validation")])
|
|
else:
|
|
schema_definition = v1_schema([TestModel])
|
|
|
|
assert schema_definition == {
|
|
DEFS_KEY: {
|
|
"TestModel": {
|
|
"title": "TestModel",
|
|
"type": "object",
|
|
"properties": {"test_field": {"title": "Test Field", "type": "string"}},
|
|
"required": ["test_field"],
|
|
"additionalProperties": False,
|
|
}
|
|
}
|
|
}
|
|
|
|
# allow "additionalProperties" to have boolean value
|
|
result = schema_validate(schema_definition[DEFS_KEY]["TestModel"])
|
|
assert result.additionalProperties is False
|