fix: 测试清单遗留bug批量修复(15条:商品库/消费/团队/设置/消息中心/平台套图/资产库)

- R6 商品图删除不生效: 封面asset移交+绕开prefetch缓存, 前端封面缩图补删除入口
- R48 消息中心长文本与UI框错位: 胶囊单行省略+优先级标签禁压缩
- R70 账单流水筛选: 后端加ledger_type过滤, count随筛选变化, 切筛选重置页码
- R72 月限额改后不刷新: 团队页/消费页自取最新teamSettings, 两页同源
- R83/R86 平台套图提示词框加大+模型胶囊嵌入输入框(复用Pill组件)
- R96 未读角标: 修KeyTextTransform注解过滤触发MySQL 3141致接口500
- R100 工作台记录丢失: 新增GET /api/ai/tasks/workbench/ 同源恢复, 废除localStorage方案
- R104 卖点添加按钮移出输入框, 新建抽屉+编辑态统一
- R106 商品库宽屏锁5列, 10个/页铺满两行
- R108 资产删除改软删+单张删除+回收站二次确认; trash页商品/资产双分区+restore/purge端点
- R109 生成图自动入资产库(person演员立绘除外), 迁移0008存量回填, 移除全部加入资产库入口
- R65 无需改动(22268d6已修, 测旧部署所致)

验证: tsc/build/check/makemigrations --check 通过, 后端测试210/210, perf-probe PASS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-07-02 11:30:06 +08:00
co-authored by Claude Fable 5
parent 22268d608b
commit aab4d7ea4c
28 changed files with 924 additions and 476 deletions
+32
View File
@@ -100,6 +100,38 @@ class MemberLimitTests(TestCase):
reserve_credit(team=self.team, user=self.user, task=self._task(f"z{i}"), amount=Decimal("10.0000"))
class LedgerTypeFilterTests(TestCase):
"""账单流水按类型过滤(R70):count/结果随 ledger_type 变化,未知类型忽略回全量。"""
def setUp(self):
self.owner = User.objects.create_user(username="lf-owner", password="ownerpass123")
self.team = Team.objects.create(name="Ledger Filter Team", owner=self.owner)
TeamMember.objects.create(team=self.team, user=self.owner, role=TeamMember.Role.OWNER, status=TeamMember.Status.ACTIVE)
CreditAccount.objects.create(team=self.team, balance=Decimal("100.0000"))
for i, ltype in enumerate([CreditLedger.Type.RECHARGE, CreditLedger.Type.CHARGE, CreditLedger.Type.CHARGE]):
CreditLedger.objects.create(
team=self.team, user=self.owner, ledger_type=ltype,
amount=Decimal("10.0000"), balance_after=Decimal("100.0000"), reason=f"row {i}",
)
self.client_api = APIClient()
self.client_api.force_authenticate(self.owner)
def test_filter_by_type_changes_count_and_rows(self):
response = self.client_api.get("/api/billing/ledgers/?ledger_type=charge")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["count"], 2)
self.assertTrue(all(row["ledger_type"] == "charge" for row in response.data["results"]))
response = self.client_api.get("/api/billing/ledgers/?ledger_type=recharge")
self.assertEqual(response.data["count"], 1)
self.assertEqual(response.data["results"][0]["ledger_type"], "recharge")
def test_unknown_type_returns_all(self):
response = self.client_api.get("/api/billing/ledgers/?ledger_type=bogus")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["count"], 3)
class RechargePermissionTests(TestCase):
"""充值是团队资金操作:仅 owner/admin 可发起,普通成员/访客被 403 拦截。"""