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:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user