create([ 'jjb' => 700000, 'bank_jjb' => 600000, ]); $result = app(AiFinanceService::class)->prepareSpend($user, 800000); $this->assertFalse($result); $this->assertDatabaseHas('users', [ 'id' => $user->id, 'jjb' => 700000, 'bank_jjb' => 600000, ]); $this->assertDatabaseMissing('bank_logs', [ 'user_id' => $user->id, 'type' => 'withdraw', ]); } /** * 大额支出场景允许从银行提取差额,把目标下注额调到手上。 */ public function test_prepare_all_in_spend_withdraws_needed_gold_from_bank(): void { $user = User::factory()->create([ 'jjb' => 1000000, 'bank_jjb' => 200000, ]); $result = app(AiFinanceService::class)->prepareAllInSpend($user, 1150000); $this->assertTrue($result); $this->assertDatabaseHas('users', [ 'id' => $user->id, 'jjb' => 1150000, 'bank_jjb' => 50000, ]); $this->assertDatabaseHas('bank_logs', [ 'user_id' => $user->id, 'type' => 'withdraw', 'amount' => 150000, 'balance_after' => 50000, ]); } /** * 超过 100 万的金币会自动存入银行,并在跨过阶段目标时发送全站公告。 */ public function test_bank_excess_gold_deposits_surplus_and_broadcasts_when_crossing_milestone(): void { Event::fake([MessageSent::class]); Queue::fake([SaveMessageJob::class]); $user = User::factory()->create([ 'username' => 'AI小班长', 'jjb' => 1250000, 'bank_jjb' => 9900000, ]); app(AiFinanceService::class)->bankExcessGold($user); $this->assertDatabaseHas('users', [ 'id' => $user->id, 'jjb' => 1000000, 'bank_jjb' => 10150000, ]); $this->assertDatabaseHas('bank_logs', [ 'user_id' => $user->id, 'type' => 'deposit', 'amount' => 250000, 'balance_after' => 10150000, ]); Event::assertDispatched(MessageSent::class); Queue::assertPushed(SaveMessageJob::class); } }