Files
shanxia2.0/backend/tests/test_vehicle_fuel_schema.py
T
wuzilongandCursor af8d4d90fa feat(pl): 调整加油登记列表排序、必填项和顶部汇总区。
按登记日期倒序列表并增加列统计,期初公里数改为必填,车辆统计卡片改为待开发。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-07 17:51:57 +08:00

118 lines
3.4 KiB
Python

"""车辆加油登记 Schema 单测"""
from datetime import date
from decimal import Decimal
import pytest
from pydantic import ValidationError
from app.schemas.pl.vehicle_fuel import VehicleFuelRegisterCreate
def test_create_accepts_bailian():
body = VehicleFuelRegisterCreate.model_validate(
{
"fuelCategory": "bailian",
"registerDate": "2026-09-12",
"licensePlate": "皖A12345",
"fuelLiters": "50.5",
"odometerKm": "12000.0",
}
)
assert body.fuel_category == "bailian"
assert body.fuel_liters == Decimal("50.5")
assert body.register_date == date(2026, 9, 12)
def test_create_rejects_invalid_category():
with pytest.raises(ValidationError):
VehicleFuelRegisterCreate.model_validate(
{
"fuelCategory": "etc",
"registerDate": "2026-09-12",
"licensePlate": "皖A12345",
"fuelLiters": "10",
}
)
def test_create_rejects_non_positive_liters():
with pytest.raises(ValidationError):
VehicleFuelRegisterCreate.model_validate(
{
"fuelCategory": "gas_station",
"registerDate": "2026-09-12",
"licensePlate": "皖A12345",
"fuelLiters": "0",
}
)
def test_create_accepts_shanxia_factory():
body = VehicleFuelRegisterCreate.model_validate(
{
"fuelCategory": "shanxia_factory",
"registerDate": "2026-09-12",
"licensePlate": "皖A12345",
"fuelLiters": "1176",
"odometerKm": "0",
}
)
assert body.fuel_category == "shanxia_factory"
assert body.odometer_km == Decimal("0")
def test_create_rejects_missing_odometer():
with pytest.raises(ValidationError):
VehicleFuelRegisterCreate.model_validate(
{
"fuelCategory": "bailian",
"registerDate": "2026-09-12",
"licensePlate": "皖A12345",
"fuelLiters": "10",
}
)
def test_create_rejects_negative_odometer():
with pytest.raises(ValidationError):
VehicleFuelRegisterCreate.model_validate(
{
"fuelCategory": "bailian",
"registerDate": "2026-09-12",
"licensePlate": "皖A12345",
"fuelLiters": "10",
"odometerKm": "-1",
}
)
def test_calc_fuel_tons():
from app.schemas.pl.vehicle_fuel import calc_fuel_tons
assert calc_fuel_tons(Decimal("1176")) == Decimal("1.000")
assert calc_fuel_tons(Decimal("310")) == Decimal("0.264")
def test_read_requires_seq_no_and_aliases():
from datetime import datetime
from app.schemas.pl.vehicle_fuel import VehicleFuelRegisterRead
row = VehicleFuelRegisterRead.model_validate(
{
"id": "abc",
"seqNo": 7,
"registerNo": "SXJY20260917000001",
"fuelCategory": "bailian",
"registerDate": "2026-09-17",
"registrantId": "u1",
"licensePlate": "皖A12345",
"fuelLiters": "50",
"status": "normal",
"createTime": "2026-09-17T10:00:00",
}
)
dumped = row.model_dump(by_alias=True)
assert dumped["seqNo"] == 7
assert dumped["registerNo"] == "SXJY20260917000001"
assert isinstance(row.create_time, datetime)