From 542ecc63e70b1941e11c0fa5f1d655a585e14199 Mon Sep 17 00:00:00 2001 From: wuzilong <704541015@qq.com> Date: Sat, 12 Sep 2026 08:43:49 +0800 Subject: [PATCH] fix(pl): allow only etc recharge type in vehicle recharge schemas Reject fuel writes so the shared module can be narrowed to ETC-only. Co-authored-by: Cursor --- backend/app/schemas/pl/vehicle_recharge.py | 6 +-- .../tests/test_vehicle_recharge_etc_only.py | 49 +++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 backend/tests/test_vehicle_recharge_etc_only.py diff --git a/backend/app/schemas/pl/vehicle_recharge.py b/backend/app/schemas/pl/vehicle_recharge.py index ab67bcc2d..b76a69779 100644 --- a/backend/app/schemas/pl/vehicle_recharge.py +++ b/backend/app/schemas/pl/vehicle_recharge.py @@ -5,7 +5,7 @@ from typing import Optional from pydantic import BaseModel, Field, field_validator -RECHARGE_TYPES = {"etc", "fuel"} +RECHARGE_TYPES = {"etc"} class VehicleRechargeApplyCreate(BaseModel): @@ -23,7 +23,7 @@ class VehicleRechargeApplyCreate(BaseModel): @classmethod def validate_recharge_type(cls, v: str) -> str: if v not in RECHARGE_TYPES: - raise ValueError("充值类型无效") + raise ValueError("本期仅支持 ETC") return v @@ -84,7 +84,7 @@ class VehicleRechargeRecordCreate(BaseModel): @classmethod def validate_recharge_type(cls, v: str) -> str: if v not in RECHARGE_TYPES: - raise ValueError("充值类型无效") + raise ValueError("本期仅支持 ETC") return v @field_validator("amount") diff --git a/backend/tests/test_vehicle_recharge_etc_only.py b/backend/tests/test_vehicle_recharge_etc_only.py new file mode 100644 index 000000000..3da8abe0c --- /dev/null +++ b/backend/tests/test_vehicle_recharge_etc_only.py @@ -0,0 +1,49 @@ +"""车辆充值模块收窄为仅 ETC。""" +from __future__ import annotations + +import pytest +from pydantic import ValidationError + +from app.schemas.pl.vehicle_recharge import ( + RECHARGE_TYPES, + VehicleRechargeApplyCreate, + VehicleRechargeRecordCreate, +) + + +def test_recharge_types_only_etc(): + assert RECHARGE_TYPES == {"etc"} + + +def test_apply_create_rejects_fuel(): + with pytest.raises(ValidationError): + VehicleRechargeApplyCreate.model_validate( + { + "licensePlate": "鄂A12345", + "rechargeType": "fuel", + "applyDate": "2026-09-12", + } + ) + + +def test_apply_create_accepts_etc(): + obj = VehicleRechargeApplyCreate.model_validate( + { + "licensePlate": "鄂A12345", + "rechargeType": "etc", + "applyDate": "2026-09-12", + } + ) + assert obj.recharge_type == "etc" + + +def test_record_create_rejects_fuel(): + with pytest.raises(ValidationError): + VehicleRechargeRecordCreate.model_validate( + { + "rechargeDate": "2026-09-12", + "rechargeType": "fuel", + "amount": "100.00", + "licensePlate": "鄂A12345", + } + )