Files
saasshop/tests/Feature/AdminPlatformOrderBmpaFailedReasonStatsLinksTest.php

82 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace Tests\Feature;
use App\Models\Merchant;
use App\Models\Plan;
use App\Models\PlatformOrder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class AdminPlatformOrderBmpaFailedReasonStatsLinksTest extends TestCase
{
use RefreshDatabase;
protected function loginAsPlatformAdmin(): void
{
$this->seed();
$this->post('/admin/login', [
'email' => 'platform.admin@demo.local',
'password' => 'Platform@123456',
])->assertRedirect('/admin');
}
public function test_platform_orders_page_shows_bmpa_failed_reason_stats_and_links(): void
{
$this->loginAsPlatformAdmin();
$merchant = Merchant::query()->firstOrFail();
$plan = Plan::query()->create([
'code' => 'bmpa_failed_reason_stats_plan',
'name' => 'BMPA 失败原因聚合链接测试套餐',
'billing_cycle' => 'monthly',
'price' => 10,
'list_price' => 10,
'status' => 'active',
'sort' => 10,
'published_at' => now(),
]);
$reason = '回执总额与应付金额不一致';
PlatformOrder::query()->create([
'merchant_id' => $merchant->id,
'plan_id' => $plan->id,
'order_no' => 'PO_BMPA_STATS_1',
'order_type' => 'new_purchase',
'status' => 'pending',
'payment_status' => 'unpaid',
'plan_name' => $plan->name,
'billing_cycle' => $plan->billing_cycle,
'period_months' => 1,
'quantity' => 1,
'payable_amount' => 10,
'paid_amount' => 0,
'placed_at' => now(),
'meta' => [
'batch_mark_paid_and_activate_error' => [
'message' => $reason,
'at' => now()->toDateTimeString(),
'admin_id' => 1,
],
],
]);
$res = $this->get('/admin/platform-orders');
$res->assertOk();
// 卡片标题
$res->assertSee('批量标记支付并生效失败原因 TOP5');
// 点击原因:默认落到失败集合(语义收敛:原因 => 失败集合)
$res->assertSee('/admin/platform-orders?bmpa_failed_only=1&bmpa_error_keyword=' . urlencode($reason), false);
// 一键切到可处理集合重试:
// - 需携带 bmpa_processable_only=1
// - 且必须清掉 bmpa_failed_only避免 failed_only 与 processable_only 叠加冲突
$res->assertSee('bmpa_error_keyword=' . urlencode($reason) . '&bmpa_processable_only=1', false);
$res->assertDontSee('bmpa_failed_only=1&bmpa_error_keyword=' . urlencode($reason) . '&bmpa_processable_only=1', false);
}
}