fix(config): 修复切换充值渠道报错及补齐 peace_enabled 字段声明

- 在 DouyuConfigOut 与 DouyuConfigUpdate 中补齐 peace_enabled 声明与序列化
- 在 update_config 中使用 getattr(req, field, None) 安全读取属性,避免 AttributeError 导致 500
- 在 _config_out 中加入 peace_enabled 输出映射
- 增加切换充值渠道与配置更新的单元测试
This commit is contained in:
yml2213
2026-10-08 11:49:41 +08:00
parent 4eef45efe4
commit ec07e4fc06
3 changed files with 32 additions and 1 deletions
+26
View File
@@ -140,6 +140,32 @@ class TestDouyuGoldRechargeChannel:
assert channel == {"gold_recharge_channel": "supplier_api"}
def test_update_config_switching_recharge_channel_and_peace_enabled(self):
from web.backend.routers.douyu import update_config
from web.backend.schemas import DouyuConfigUpdate
admin_user = self.session.get(User, self.task.created_by)
# 1. 切换到 supplier_api
req = DouyuConfigUpdate(
gold_recharge_channel="supplier_api",
peace_enabled=True,
)
res = update_config(req, db=self.session, current=admin_user)
dumped = res.model_dump()
assert dumped["gold_recharge_channel"] == "supplier_api"
assert dumped["peace_enabled"] is True
# 2. 切换回 wechat_qr
req2 = DouyuConfigUpdate(
gold_recharge_channel="wechat_qr",
peace_enabled=False,
)
res2 = update_config(req2, db=self.session, current=admin_user)
dumped2 = res2.model_dump()
assert dumped2["gold_recharge_channel"] == "wechat_qr"
assert dumped2["peace_enabled"] is False
def test_recharge_audit_detail_includes_safe_account_identity(self):
record_audit(
self.session,
+3 -1
View File
@@ -368,6 +368,7 @@ def _task_out(task: DouyuTask, *, include_detail: bool = False) -> DouyuTaskOut:
def _config_out(config: DouyuConfig) -> DouyuConfigOut:
text = lambda field: str(douyu_config_value(field, getattr(config, field)))
number = lambda field: int(douyu_config_value(field, getattr(config, field)))
boolean = lambda field: bool(douyu_config_value(field, getattr(config, field)))
return DouyuConfigOut(
manual_id=text("manual_id"),
rid=text("rid"),
@@ -383,6 +384,7 @@ def _config_out(config: DouyuConfig) -> DouyuConfigOut:
esports_chicken_skin_id=text("esports_chicken_skin_id"),
esports_firework_gift_id=text("esports_firework_gift_id"),
esports_firework_skin_id=text("esports_firework_skin_id"),
peace_enabled=boolean("peace_enabled"),
xpd_act_alias=text("xpd_act_alias"),
xpd_act_id=text("xpd_act_id"),
xpd_rid=text("xpd_rid"),
@@ -578,7 +580,7 @@ def update_config(
config = ensure_douyu_config(db)
changed_fields = []
for field in DOUYU_CONFIG_FIELDS:
value = getattr(req, field)
value = getattr(req, field, None)
if value is None:
continue
setattr(config, field, value.strip() if isinstance(value, str) else value)
+3
View File
@@ -783,6 +783,7 @@ class DouyuConfigOut(BaseModel):
esports_chicken_skin_id: str = "0"
esports_firework_gift_id: str = "24767"
esports_firework_skin_id: str = "3850"
peace_enabled: bool = False
xpd_act_alias: str = "20260623KDQFH"
xpd_act_id: str = "46195"
xpd_rid: str = "9263298"
@@ -811,6 +812,7 @@ class DouyuConfigOut(BaseModel):
"esports_chicken_skin_id": self.esports_chicken_skin_id,
"esports_firework_gift_id": self.esports_firework_gift_id,
"esports_firework_skin_id": self.esports_firework_skin_id,
"peace_enabled": self.peace_enabled,
"xpd_act_alias": self.xpd_act_alias,
"xpd_act_id": self.xpd_act_id,
"xpd_rid": self.xpd_rid,
@@ -839,6 +841,7 @@ class DouyuConfigUpdate(BaseModel):
esports_chicken_skin_id: str | None = None
esports_firework_gift_id: str | None = None
esports_firework_skin_id: str | None = None
peace_enabled: bool | None = None
xpd_act_alias: str | None = None
xpd_act_id: str | None = None
xpd_rid: str | None = None