"""车辆加油登记 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", } ) assert body.fuel_category == "shanxia_factory" 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)