from decimal import Decimal
from pydantic import BaseModel
from msmodelslim.utils.hash import calculate_md5
class _DecimalModel(BaseModel):
score: Decimal
name: str
def test_calculate_md5_return_32_length_hex_when_base_model_has_decimal_field():
"""
calculate_md5 内部会 model_dump 后 json.dumps;Decimal 在 Python 模式下不可被 JSON 序列化。
使用 mode='json' 后应能正常得到 32 位十六进制 MD5,且不因 Decimal 字段抛错。
"""
value = _DecimalModel(score=Decimal("0.95"), name="acc")
md5_value = calculate_md5(value)
assert isinstance(md5_value, str)
assert len(md5_value) == 32