Files
saasshop/tests/Feature/AdminPlatformOrderBmpaFailedReasonTop5LongReasonNoLinkTest.php

86 lines
2.9 KiB
PHP
Raw Permalink 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 AdminPlatformOrderBmpaFailedReasonTop5LongReasonNoLinkTest 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_bmpa_failed_reason_top5_long_reason_should_not_render_keyword_links(): void
{
$this->loginAsPlatformAdmin();
$merchant = Merchant::query()->firstOrFail();
$plan = Plan::query()->create([
'code' => 'bmpa_failed_reason_long_reason_no_link_test',
'name' => 'BMPA失败原因过长不渲染链接测试套餐',
'billing_cycle' => 'monthly',
'price' => 10,
'list_price' => 10,
'status' => 'active',
'sort' => 10,
'published_at' => now(),
]);
$reason = str_repeat('很长的BMPA失败原因', 30); // > 200 chars
$shown = mb_substr($reason, 0, 60);
PlatformOrder::query()->create([
'merchant_id' => $merchant->id,
'plan_id' => $plan->id,
'order_no' => 'PO_BMPA_FAILED_LONG_REASON_0001',
'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,
],
],
]);
$page = $this->get('/admin/platform-orders');
$page->assertOk();
$page->assertSee('批量标记支付并生效失败原因 TOP5');
$page->assertSee($shown);
$page->assertSee('原因过长,请复制到筛选框');
// 不应渲染 bmpa_error_keyword= 的链接(避免 URL 过长/特殊字符问题)
$page->assertDontSee('bmpa_error_keyword=', false);
// 仍应给一个“进入失败集合”的入口,且应显式带 bmpa_failed_only=1进入失败集合口径更明确
$html = (string) $page->getContent();
$this->assertSame(
1,
preg_match('/<a[^>]+href="[^"]*bmpa_failed_only=1[^"]*"[^>]*>\s*进入失败集合\s*<\/a>/', $html),
'应渲染带 bmpa_failed_only=1 的「进入失败集合」链接'
);
}
}