feat(admin/ad): 提现自动对账后台开关 + 客户端广告 flags 端点 + 穿山甲多 m-key 验签 (#59)
- 自动对账接入 app_config 运行时配置(新增 bool 配置类型):env 部署总闸 + DB 运营日常开关 双层;worker 每轮读 DB 即时生效,健康检查改报「env AND DB」实际生效态 - 新增 GET /api/v1/platform/flags(不鉴权)下发 comparing_ad_enabled 远程 kill-switch, 客户端拉取后缓存;空库回退默认 True - 穿山甲发奖回调支持多激励位 m-key(三命名项 PANGLE_REWARD_SECRET_TEST/_DEDICATED/_PROD + 旧逗号分隔合并去重),verify_callback_sign_any 逐个验签任一通过即受理;向后兼容旧单 key - 补 test_platform / bool config 用例;app_config 文档同步 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #59 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
This commit was merged in pull request #59.
This commit is contained in:
@@ -117,6 +117,40 @@ def test_update_ad_limit_takes_effect(admin_client: TestClient, token: str) -> N
|
||||
db.close()
|
||||
|
||||
|
||||
def test_update_bool_config(admin_client: TestClient, token: str) -> None:
|
||||
# 提现自动对账开关默认 True
|
||||
items = {
|
||||
i["key"]: i
|
||||
for i in admin_client.get("/admin/api/config", headers=_auth(token)).json()
|
||||
}
|
||||
assert items["withdraw_auto_reconcile_enabled"]["type"] == "bool"
|
||||
assert items["withdraw_auto_reconcile_enabled"]["value"] is True
|
||||
|
||||
# 关掉 → DB 落 False、业务读到 False
|
||||
r = admin_client.patch(
|
||||
"/admin/api/config/withdraw_auto_reconcile_enabled",
|
||||
json={"value": False},
|
||||
headers=_auth(token),
|
||||
)
|
||||
assert r.status_code == 200, r.text
|
||||
assert r.json()["value"] is False and r.json()["overridden"] is True
|
||||
|
||||
db = SessionLocal()
|
||||
try:
|
||||
from app.repositories import app_config
|
||||
|
||||
assert app_config.get_value(db, "withdraw_auto_reconcile_enabled") is False
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
# bool 项不接受非布尔值
|
||||
assert admin_client.patch(
|
||||
"/admin/api/config/withdraw_auto_reconcile_enabled",
|
||||
json={"value": 1},
|
||||
headers=_auth(token),
|
||||
).status_code == 400
|
||||
|
||||
|
||||
def test_config_validation(admin_client: TestClient, token: str) -> None:
|
||||
# 签到档位长度≠7
|
||||
assert admin_client.patch(
|
||||
|
||||
Reference in New Issue
Block a user