CaiWuXiTong/tests/Feature/Common/ReportsTest.php
15061959991 1adf627c0d feat: 财务系统二次开发 - 营销账户账单功能
- 基础环境:Docker 部署配置,源码挂载实时同步
- 修复:super_admin 权限补全、登录重定向循环
- 开发:店铺营销账户账单 - 抖音账户(15字段汇总账单)
- 开发:店铺营销账户账单 - 淘系支付宝账户(8字段流水账单)
- 开发:店铺营销账户账单 - 拼多多账户(7字段流水账单)
- 业务页面导航集成:config/business_navigation.php + Business\Pages 控制器
- 各平台独立表结构和视图,互不影响
2026-07-21 18:43:52 +08:00

66 lines
2.0 KiB
PHP

<?php
namespace Tests\Feature\Common;
use App\Reports\ProfitLoss;
use App\Models\Common\Report;
use Tests\Feature\FeatureTestCase;
class ReportsTest extends FeatureTestCase
{
public function testItShouldShowProfitLossReportWhenSettingsAreMissing()
{
$report = Report::create([
'company_id' => company_id(),
'class' => 'App\Reports\ProfitLoss',
'name' => 'Legacy Profit Loss',
'description' => 'Report without saved settings',
'settings' => null,
'created_from' => 'core::test',
'created_by' => $this->user->id,
]);
$this->loginAs()
->get(route('reports.show', $report->id))
->assertOk()
->assertSeeText('Legacy Profit Loss')
->assertSeeText(trans('reports.net_profit'));
}
public function testItShouldRenderProfitLossFooterWhenIncomeTotalsAreMissing()
{
$report = new Report([
'class' => ProfitLoss::class,
'name' => 'Profit Loss Footer',
'description' => 'Footer regression coverage',
'settings' => ['group' => 'category', 'period' => 'quarterly', 'basis' => 'accrual'],
]);
$class = new ProfitLoss($report, false);
$class->dates = ['Q1 2026', 'Q2 2026'];
$class->footer_totals = [
'expense' => ['Q1 2026' => 125],
];
$html = view('reports.profit_loss.table.footer', [
'class' => $class,
'table_key' => 'income',
])->render();
$this->assertStringContainsString(trans_choice('general.totals', 1), $html);
$this->assertStringNotContainsString('Undefined array key', $html);
}
public function testItShouldRenderMoneyComponentWhenAmountIsEmptyString()
{
$html = view('money::components.money', [
'amount' => '',
'currency' => 'USD',
'convert' => false,
])->render();
$this->assertNotEmpty($html);
$this->assertStringNotContainsString('Invalid amount', $html);
}
}