- 新增共享镜像表 business_internal_flow_records 与整份替换导入命令 internal-flow:import - 按 Excel 表头展示抬头、标签、预计9月销量、开票、所需进项成本、收票、剩余缺口与开票比例 - 复用公司基础信息的字段查询、表头排序、筛选字段与导出 Excel 交互 - 新增导入与页面测试,覆盖合计行跳过、重导入替换、筛选排序与未导入空状态
77 lines
3.1 KiB
PHP
77 lines
3.1 KiB
PHP
<?php
|
||
|
||
namespace Tests\Feature\Business;
|
||
|
||
use Mockery;
|
||
use Modules\EcommerceFinance\Repositories\InternalFlowReportRepository;
|
||
use Tests\Feature\FeatureTestCase;
|
||
|
||
class InternalFlowReportPageTest extends FeatureTestCase
|
||
{
|
||
public function testInternalFlowReportPageRendersRowsWithQueryAndExportTools(): void
|
||
{
|
||
$repository = Mockery::mock(InternalFlowReportRepository::class);
|
||
$repository->shouldReceive('ready')->once()->andReturn(true);
|
||
$repository->shouldReceive('paginate')->once()->andReturn([
|
||
'data' => [[
|
||
'id' => 1,
|
||
'sort_order' => 1,
|
||
'company_name' => '示例甲供应链有限公司',
|
||
'tag' => '1',
|
||
'projected_sales' => '1200000.000000',
|
||
'invoiced_to_buyer' => '0.000000',
|
||
'internal_invoiced' => '1200000.000000',
|
||
'required_input_cost' => '0.000000',
|
||
'receipt_from_supplier' => null,
|
||
'receipt_from_suofeiya' => null,
|
||
'receipt_from_gujia' => null,
|
||
'internal_transfer_1' => '0.000000',
|
||
'internal_transfer_2' => '0.000000',
|
||
'internal_transfer_3' => '0.000000',
|
||
'receipt_total' => '0.000000',
|
||
'remaining_gap' => '0.000000',
|
||
'invoicing_ratio' => '1',
|
||
]],
|
||
'total' => 1,
|
||
]);
|
||
$this->app->instance(InternalFlowReportRepository::class, $repository);
|
||
|
||
$this->loginAs()
|
||
->get(route('business.pages.show', [
|
||
'section' => 'store-management',
|
||
'page' => 'internal-flow-report',
|
||
]))
|
||
->assertOk()
|
||
->assertSeeText('内部流转报表')
|
||
->assertSeeText('按抬头、标签查询内部流转明细并导出')
|
||
->assertSeeText('示例甲供应链有限公司')
|
||
->assertSeeText('预计9月销量')
|
||
->assertSeeText('收票-内部流转(来源)1')
|
||
->assertSeeText('剩余缺口')
|
||
->assertSeeText('开票比例')
|
||
->assertSee('data-directory-query-picker', false)
|
||
->assertSee('data-directory-query-export', false)
|
||
->assertSee('data-directory-query-field="company_name"', false)
|
||
->assertSee('data-directory-query-select="tag"', false)
|
||
->assertSeeText('筛选字段')
|
||
->assertSeeText('导出 Excel')
|
||
->assertSee('排序和字段操作', false)
|
||
->assertSee('sort=projected_sales', false);
|
||
}
|
||
|
||
public function testInternalFlowReportPageExplainsMissingDataset(): void
|
||
{
|
||
$repository = Mockery::mock(InternalFlowReportRepository::class);
|
||
$repository->shouldReceive('ready')->once()->andReturn(false);
|
||
$this->app->instance(InternalFlowReportRepository::class, $repository);
|
||
|
||
$this->loginAs()
|
||
->get(route('business.pages.show', [
|
||
'section' => 'store-management',
|
||
'page' => 'internal-flow-report',
|
||
]))
|
||
->assertOk()
|
||
->assertSeeText('内部流转数据尚未导入');
|
||
}
|
||
}
|