fix(core): harden settlement and wallet integration
This commit is contained in:
@@ -2,9 +2,24 @@
|
||||
|
||||
use Tests\TestCase;
|
||||
use App\Models\AdminUser;
|
||||
use App\Models\AgentProfile;
|
||||
use Illuminate\Support\Carbon;
|
||||
use App\Support\SuperAdminAccount;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Events\OddsUpdateBroadcast;
|
||||
use App\Events\PlayToggleBroadcast;
|
||||
use App\Events\RiskSoldOutBroadcast;
|
||||
use App\Events\RiskWarningBroadcast;
|
||||
use App\Support\PlatformSystemRoles;
|
||||
use App\Events\JackpotBurstBroadcast;
|
||||
use App\Events\BalanceUpdateBroadcast;
|
||||
use App\Events\DrawCountdownBroadcast;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use App\Contracts\WalletApiDnsResolver;
|
||||
use App\Events\DrawStatusChangeBroadcast;
|
||||
use App\Events\PlayCatalogUpdatedBroadcast;
|
||||
use App\Events\DrawResultPublishedBroadcast;
|
||||
use App\Support\Integration\WalletApiRequestGuard;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
|
||||
/*
|
||||
@@ -53,8 +68,8 @@ expect()->extend('toBeOne', function () {
|
||||
/** 为后台测试账号挂上唯一超级管理员(不绑定站点)。 */
|
||||
function grantSuperAdminRole(AdminUser $admin): void
|
||||
{
|
||||
\App\Support\PlatformSystemRoles::ensureSuperAdminRole();
|
||||
\App\Support\SuperAdminAccount::assign($admin);
|
||||
PlatformSystemRoles::ensureSuperAdminRole();
|
||||
SuperAdminAccount::assign($admin);
|
||||
}
|
||||
|
||||
/** 为后台测试账号挂上代理节点(需已存在 agent_nodes / admin_user_agents 表)。 */
|
||||
@@ -76,6 +91,37 @@ function agentChildPayload(array $overrides = []): array
|
||||
], $overrides);
|
||||
}
|
||||
|
||||
/**
|
||||
* 为钱包 HTTP 测试提供离线 DNS,避免测试依赖机器或公网解析状态。
|
||||
*
|
||||
* @param array<string, list<string>> $recordsByHost
|
||||
* @param list<string> $defaultRecords
|
||||
*/
|
||||
function fakeWalletApiDns(
|
||||
array $recordsByHost = [],
|
||||
array $defaultRecords = ['93.184.216.34'],
|
||||
): void {
|
||||
app()->instance(WalletApiDnsResolver::class, new class($recordsByHost, $defaultRecords) implements WalletApiDnsResolver
|
||||
{
|
||||
/**
|
||||
* @param array<string, list<string>> $recordsByHost
|
||||
* @param list<string> $defaultRecords
|
||||
*/
|
||||
public function __construct(
|
||||
private readonly array $recordsByHost,
|
||||
private readonly array $defaultRecords,
|
||||
) {}
|
||||
|
||||
public function resolveAll(string $hostname): array
|
||||
{
|
||||
return $this->recordsByHost[$hostname] ?? $this->defaultRecords;
|
||||
}
|
||||
});
|
||||
|
||||
// Guard 可能已在当前测试中解析过,清除后确保使用刚绑定的 DNS resolver。
|
||||
app()->forgetInstance(WalletApiRequestGuard::class);
|
||||
}
|
||||
|
||||
function bindAdminUserToAgent(AdminUser $admin, int $agentNodeId): void
|
||||
{
|
||||
DB::table('admin_user_agents')->updateOrInsert(
|
||||
@@ -96,7 +142,7 @@ function ensureRootAgentProfileSeeded(): void
|
||||
return;
|
||||
}
|
||||
|
||||
\App\Models\AgentProfile::query()->updateOrCreate(
|
||||
AgentProfile::query()->updateOrCreate(
|
||||
['agent_node_id' => (int) $rootId],
|
||||
[
|
||||
'total_share_rate' => 100,
|
||||
@@ -154,15 +200,15 @@ function ensureAdminActionCatalogSeeded(): void
|
||||
function allBroadcastEvents(): array
|
||||
{
|
||||
return [
|
||||
\App\Events\BalanceUpdateBroadcast::class,
|
||||
\App\Events\DrawCountdownBroadcast::class,
|
||||
\App\Events\DrawResultPublishedBroadcast::class,
|
||||
\App\Events\DrawStatusChangeBroadcast::class,
|
||||
\App\Events\JackpotBurstBroadcast::class,
|
||||
\App\Events\OddsUpdateBroadcast::class,
|
||||
\App\Events\PlayCatalogUpdatedBroadcast::class,
|
||||
\App\Events\PlayToggleBroadcast::class,
|
||||
\App\Events\RiskSoldOutBroadcast::class,
|
||||
\App\Events\RiskWarningBroadcast::class,
|
||||
BalanceUpdateBroadcast::class,
|
||||
DrawCountdownBroadcast::class,
|
||||
DrawResultPublishedBroadcast::class,
|
||||
DrawStatusChangeBroadcast::class,
|
||||
JackpotBurstBroadcast::class,
|
||||
OddsUpdateBroadcast::class,
|
||||
PlayCatalogUpdatedBroadcast::class,
|
||||
PlayToggleBroadcast::class,
|
||||
RiskSoldOutBroadcast::class,
|
||||
RiskWarningBroadcast::class,
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user