mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 15:13:55 +08:00
38 lines
1.7 KiB
Python
38 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import warnings
|
|
|
|
from fastapi._compat import get_model_fields
|
|
|
|
from app.schemas.correctword import CorrectWordFileBody
|
|
from app.schemas.device import DeviceReportRequest, DeviceUpdateRequest
|
|
from app.schemas.model import ModelProviderBody
|
|
|
|
|
|
def test_fastapi_can_rebuild_all_alias_fields_without_ineffective_metadata_warnings() -> None:
|
|
# FastAPI reconstructs each body model field through TypeAdapter on first
|
|
# request. Keep this explicit regression because an unconstrained future
|
|
# Pydantic upgrade emitted warnings for every aliased field on that path.
|
|
with warnings.catch_warnings():
|
|
warnings.simplefilter("error")
|
|
for model in (DeviceUpdateRequest, ModelProviderBody, DeviceReportRequest, CorrectWordFileBody):
|
|
assert get_model_fields(model)
|
|
|
|
|
|
def test_representative_java_aliases_bind_and_serialize_in_both_supported_input_forms() -> None:
|
|
update = DeviceUpdateRequest.model_validate({"autoUpdate": 1})
|
|
assert update.auto_update == 1
|
|
assert update.model_dump(by_alias=True)["autoUpdate"] == 1
|
|
|
|
provider = ModelProviderBody.model_validate({"modelType": "LLM", "providerCode": "mock"})
|
|
assert (provider.model_type, provider.provider_code) == ("LLM", "mock")
|
|
|
|
camel_report = DeviceReportRequest.model_validate({"flashSize": 8, "chipModelName": "esp32"})
|
|
snake_report = DeviceReportRequest.model_validate({"flash_size": 8, "chip_model_name": "esp32"})
|
|
assert camel_report.flash_size == snake_report.flash_size == 8
|
|
assert camel_report.chip_model_name == snake_report.chip_model_name == "esp32"
|
|
|
|
words = CorrectWordFileBody.model_validate({"fileName": "words.txt", "fileSize": 12})
|
|
assert words.file_name == "words.txt"
|
|
assert words.file_size == 12
|