Files
saasshop/tests/Feature/AdminPlatformBatchShowPageSpotCheckNextLinkShouldRenderTest.php
2026-03-18 09:22:28 +08:00

127 lines
4.6 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 AdminPlatformBatchShowPageSpotCheckNextLinkShouldRenderTest 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_batch_show_page_should_render_spot_check_next_link_with_spot_after_id(): void
{
$this->loginAsPlatformAdmin();
$merchant = Merchant::query()->firstOrFail();
$plan = Plan::query()->create([
'code' => 'plan_batch_spot_next_0001',
'name' => '批次页抽样复核换一单入口渲染测试套餐',
'billing_cycle' => 'monthly',
'price' => 10,
'list_price' => 10,
'status' => 'active',
'sort' => 10,
'published_at' => now(),
]);
$runId = 'BMPA_SPOT_NEXT_0001';
// 两单都属于同一批次且为成功run_id 存在且无 error
$orderA = PlatformOrder::query()->create([
'merchant_id' => $merchant->id,
'plan_id' => $plan->id,
'order_no' => 'PO_BMPA_SPOT_NEXT_A',
'order_type' => 'new_purchase',
'status' => 'activated',
'payment_status' => 'paid',
'plan_name' => $plan->name,
'billing_cycle' => $plan->billing_cycle,
'period_months' => 1,
'quantity' => 1,
'payable_amount' => 10,
'paid_amount' => 10,
'placed_at' => now()->subMinutes(11),
'paid_at' => now()->subMinutes(10),
'activated_at' => now()->subMinutes(9),
'meta' => [
'batch_mark_paid_and_activate' => [
'run_id' => $runId,
'last_result' => [
'run_id' => $runId,
'success' => 2,
'failed' => 0,
'matched' => 2,
'processed' => 2,
'top_reasons' => [],
'at' => now()->toDateTimeString(),
],
],
],
]);
$orderB = PlatformOrder::query()->create([
'merchant_id' => $merchant->id,
'plan_id' => $plan->id,
'order_no' => 'PO_BMPA_SPOT_NEXT_B',
'order_type' => 'new_purchase',
'status' => 'activated',
'payment_status' => 'paid',
'plan_name' => $plan->name,
'billing_cycle' => $plan->billing_cycle,
'period_months' => 1,
'quantity' => 1,
'payable_amount' => 10,
'paid_amount' => 10,
'placed_at' => now()->subMinutes(8),
'paid_at' => now()->subMinutes(7),
'activated_at' => now()->subMinutes(6),
'meta' => [
'batch_mark_paid_and_activate' => [
'run_id' => $runId,
'last_result' => [
'run_id' => $runId,
'success' => 2,
'failed' => 0,
'matched' => 2,
'processed' => 2,
'top_reasons' => [],
'at' => now()->toDateTimeString(),
],
],
],
]);
// 默认 spot-check 会选最新一单orderB"换一单" 应带 spot_after_id=orderB->id
$html = $this->get('/admin/platform-batches/show?type=bmpa&run_id=' . $runId)
->assertOk()
->getContent();
$this->assertStringContainsString('data-role="batch-spot-check-next"', $html);
$this->assertStringContainsString('spot_after_id=' . $orderB->id, $html);
$this->assertStringContainsString('type=bmpa', $html);
$this->assertStringContainsString('run_id=' . $runId, $html);
// 带 spot_after_id 后应能切换到更早的一单orderA
$html2 = $this->get('/admin/platform-batches/show?type=bmpa&run_id=' . $runId . '&spot_after_id=' . $orderB->id)
->assertOk()
->getContent();
$this->assertStringContainsString('/admin/platform-orders/' . $orderA->id, $html2);
$this->assertStringNotContainsString('/admin/platform-orders/' . $orderB->id . '#payment-receipts', $html2);
}
}