From 9587f03edf8bff39ce7b6c1e787f9fc872868901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Mon, 16 Mar 2026 15:29:32 +0800 Subject: [PATCH] feat(admin-dashboard): failed hints link to order detail failure blocks --- resources/views/admin/dashboard.blade.php | 4 + ...dHintsShouldIncludeGoDetailAnchorsTest.php | 92 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 tests/Feature/AdminDashboardRecentPlatformOrdersFailedHintsShouldIncludeGoDetailAnchorsTest.php diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index c3c2de5..0f373d2 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -343,6 +343,8 @@ 同步失败 进入集合 + + 查看失败详情 @endif @if($bmpaErrMsg !== '') @@ -350,6 +352,8 @@ BMPA失败 进入集合 + + 查看失败详情 @endif @if((string) $po->status === 'pending' && (string) $po->payment_status === 'paid' && $po->isReconcileMismatch()) diff --git a/tests/Feature/AdminDashboardRecentPlatformOrdersFailedHintsShouldIncludeGoDetailAnchorsTest.php b/tests/Feature/AdminDashboardRecentPlatformOrdersFailedHintsShouldIncludeGoDetailAnchorsTest.php new file mode 100644 index 0000000..bed76d7 --- /dev/null +++ b/tests/Feature/AdminDashboardRecentPlatformOrdersFailedHintsShouldIncludeGoDetailAnchorsTest.php @@ -0,0 +1,92 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_dashboard_recent_platform_orders_failed_hints_should_include_go_detail_anchor_links(): void + { + $this->loginAsPlatformAdmin(); + + $merchantId = (int) Merchant::query()->value('id'); + $platformAdminId = (int) Admin::query()->where('email', 'platform.admin@demo.local')->value('id'); + + $plan = Plan::query()->create([ + 'code' => 'dash_failed_go_detail_plan', + 'name' => '仪表盘失败详情直达测试套餐', + 'billing_cycle' => 'monthly', + 'price' => 10, + 'list_price' => 10, + 'status' => 'active', + 'sort' => 10, + 'published_at' => now(), + ]); + + $syncOrder = PlatformOrder::query()->create([ + 'merchant_id' => $merchantId, + 'plan_id' => $plan->id, + 'site_subscription_id' => null, + 'created_by_admin_id' => $platformAdminId ?: null, + 'order_no' => 'PO_DASH_SYNC_FAIL_GO_DETAIL_0001', + 'order_type' => 'new_purchase', + 'status' => 'pending', + 'payment_status' => 'paid', + 'payable_amount' => 10, + 'paid_amount' => 10, + 'meta' => [ + 'subscription_activation_error' => [ + 'message' => 'sync failed', + ], + ], + ]); + + $bmpaOrder = PlatformOrder::query()->create([ + 'merchant_id' => $merchantId, + 'plan_id' => $plan->id, + 'site_subscription_id' => null, + 'created_by_admin_id' => $platformAdminId ?: null, + 'order_no' => 'PO_DASH_BMPA_FAIL_GO_DETAIL_0001', + 'order_type' => 'new_purchase', + 'status' => 'pending', + 'payment_status' => 'unpaid', + 'payable_amount' => 10, + 'paid_amount' => 0, + 'meta' => [ + 'batch_mark_paid_and_activate_error' => [ + 'message' => 'bmpa failed', + ], + ], + ]); + + $res = $this->get('/admin'); + $res->assertOk(); + + $syncUrl = '/admin/platform-orders/' . $syncOrder->id . '?' . Arr::query(['back' => '/admin']) . '#sync-failed'; + $bmpaUrl = '/admin/platform-orders/' . $bmpaOrder->id . '?' . Arr::query(['back' => '/admin']) . '#bmpa-failed'; + + $res->assertSee('查看失败详情', false); + $res->assertSee($syncUrl, false); + $res->assertSee($bmpaUrl, false); + $res->assertDontSee('&back=', false); + } +}