CaiWuXiTong/tests/Feature/Business/MarketingAccountBillsTabsTest.php
WuYongJie 50d417393c 营销账户账单黑金优化与京东分账视图 (#4)
## 任务占用与边界

- 任务名称:营销账户账单当前页黑金优化与京东分账视图
- 实际开发者:WuYongJie
- 任务来源/团队分工:页面批注;仅处理当前营销账户账单页
- 目标结果:将“淘系微信账户”显示为 Alibaba、“京东网银钱包账户”显示为 京东;京东页提供充值账单与消耗账单局部视图;替换当前页遗留绿色主按钮、紫色编辑链接和灰色表格样式。
- 预计修改路径:resources/views/business/pages/show.blade.php;resources/views/banking/marketing_account_bills/partials/embedded-table.blade.php;tests/Feature/Business/MarketingAccountBillsTabsTest.php
- 预计页面或路由:/1/workspace/billing-transactions/marketing-account-bills/{tab}
- 预计 Controller / Repository:不修改
- 数据源、表/视图和字段:不修改;京东两个视图均使用既有 marketing_account_bills 日汇总记录
- 上游 source_key / scope:不修改
- 权限名、菜单键或共享组件:不修改既有权限/菜单键;新增查询参数 jd_ledger(recharge | consumption)
- 明确不修改的范围:其他页面、全局主题、路由 slug、Controller、Repository、迁移、上游配置、生产环境

## 开工碰撞检查

- [x] Codex 已执行 scripts/codex-task-preflight.ps1
- [x] 已检查最新 main 和所有远程任务分支
- [x] 已搜索主线既有页面、接口、Repository 和数据查询
- [x] 未发现本任务实际修改路径重叠;初次宽范围检查命中两个历史本地共享库分支,收窄为当前三个文件后预检通过

相关分支、重叠项与协调结论:
- origin/fix/WuYongJie-local-shared-db-verification、origin/fix/WuYongJie-integrate-local-shared-db:涉及 config/Business Pages 等宽范围,但不与本 PR 三个实际修改路径重叠,未触碰其文件。

## 实际改动

- 完成内容:
  - 当前营销账户账单页中,淘系微信标签显示为 Alibaba,京东网银钱包标签显示为 京东。
  - 京东页增加“充值账单 / 消耗账单”局部切换;只改变显示字段,不改变记录来源或数据。
  - 当前页工具栏、表格、焦点态、错误态改用 VIP 黑金令牌;移除当前页的绿色主按钮和紫色编辑链接。
- Codex 实际修改的文件:
  - resources/views/business/pages/show.blade.php
  - resources/views/banking/marketing_account_bills/partials/embedded-table.blade.php
  - tests/Feature/Business/MarketingAccountBillsTabsTest.php
- 新增或变更的公共契约:jd-wallet 页支持 jd_ledger=recharge(默认)和 jd_ledger=consumption。
- 与原计划的差异:无。

## 验证证据

- 正常流程:两个目标路由均实际渲染 200;默认京东视图显示充值字段,消耗视图显示消耗字段。
- 空数据/错误输入/无权限场景:空记录表格保留既有空态;测试显式授予目标页面权限,确保验证的是实际业务页而非权限兜底页。
- 受影响旧功能:非京东平台仍按既有完整字段顺序渲染;未改数据来源。
- 自动测试及结果:docker compose -f docker-compose.local.yml exec -T -u www-data app php artisan test tests/Feature/Business/MarketingAccountBillsTabsTest.php --compact,2 passed(14 assertions)。
- 实际页面、接口或只读业务查询结果:本地容器路由渲染通过;未访问或修改生产数据。

## 风险检查

- [x] 不涉及金额、权限、审批、数据库迁移、生产配置或数据修复
- [x] 如涉及上述高风险内容,已在下方写明影响、回滚和所需授权
- [x] 未提交 .env、密码、Token、私钥、真实财务数据、生产日志或构建产物
- [x] 前端改动符合 DESIGN.md;无前端改动则写“不适用”

高风险影响、回滚和授权状态:
- 无高风险数据操作。回滚为撤销本提交即可;尚未部署生产。

## 合并前复查

- [ ] 已重新拉取远程引用并用实际修改范围再次运行碰撞检查
- [ ] PR 不再是 WIP:,所有测试结果已经补齐
- [ ] Codex 已重新读取原始需求和验收标准,并逐文件审核 origin/main...任务分支 的完整 diff
- [ ] Codex 自审确认无越界修改、重复实现、敏感内容、未处理冲突和未验证结果
- [ ] 合并顺序不会覆盖其他未合并任务
- [ ] 已授权当前任务的 Codex 执行 Squash merge、验证 main 并清理任务分支
- [ ] 如涉及生产迁移、数据修复、删除、覆盖配置或部署,已另行取得对应高风险授权

Reviewed-on: http://git.1080p.hk/WuYongJie/CaiWuXiTong/pulls/4
2026-08-04 13:06:57 +08:00

71 lines
2.3 KiB
PHP

<?php
namespace Tests\Feature\Business;
use App\Models\Auth\Permission;
use Tests\Feature\FeatureTestCase;
class MarketingAccountBillsTabsTest extends FeatureTestCase
{
public function testMarketingAccountBillsOnlyRenamesTheRequestedTabs(): void
{
$this->allowMarketingAccountBillsPage();
$this->loginAs()
->get(route('business.pages.show', [
'section' => 'billing-transactions',
'page' => 'marketing-account-bills',
'tab' => 'taobao-wechat',
]))
->assertOk()
->assertSeeText('Alibaba')
->assertSeeText('京东')
->assertSee('class="my-6 business-page--marketing-account-bills"', false);
}
public function testJdWalletHasRechargeAndConsumptionViewsWithoutChangingTheDataSource(): void
{
$this->allowMarketingAccountBillsPage();
$base = [
'section' => 'billing-transactions',
'page' => 'marketing-account-bills',
'tab' => 'jd-wallet',
];
$this->loginAs()
->get(route('business.pages.show', $base))
->assertOk()
->assertSeeText('充值账单')
->assertSeeText('消耗账单')
->assertSeeText('总存入金额(元)')
->assertDontSeeText('非赠款消耗金额(元)');
$this->loginAs()
->get(route('business.pages.show', array_merge($base, ['jd_ledger' => 'consumption'])))
->assertOk()
->assertSeeText('充值账单')
->assertSeeText('消耗账单')
->assertSeeText('非赠款消耗金额(元)')
->assertDontSeeText('总存入金额(元)');
}
private function allowMarketingAccountBillsPage(): void
{
$this->user->update(['locale' => 'zh-CN']);
$this->user->attachPermission(
Permission::where('name', 'read-admin-panel')->firstOrFail()
);
$subject = 'user_' . $this->user->id;
setting()->set('system.sidebar_permissions', json_encode([
'configured' => [$subject],
'subjects' => [
$subject => ['billing-transactions/marketing-account-bills'],
],
], JSON_UNESCAPED_UNICODE));
}
}