From 87637f2e4a53649185e72371b1d3324b4abec7bb Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 15 May 2026 16:36:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=BC=E5=AE=B9=E9=92=B1=E5=8C=85?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8A=95=E6=B3=A8=E4=B8=8E=E6=B4=BE=E5=A5=96?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E7=B1=BB=E5=9E=8B=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/V1/Wallet/WalletLogsController.php | 6 +- tests/Feature/WalletLogsTest.php | 73 +++++++++++++++---- 2 files changed, 61 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/Api/V1/Wallet/WalletLogsController.php b/app/Http/Controllers/Api/V1/Wallet/WalletLogsController.php index c588dbe..acea268 100644 --- a/app/Http/Controllers/Api/V1/Wallet/WalletLogsController.php +++ b/app/Http/Controllers/Api/V1/Wallet/WalletLogsController.php @@ -27,8 +27,8 @@ final class WalletLogsController extends Controller 'transfer_out' => ['transfer_out'], 'refund' => ['transfer_out_refund'], 'reversal' => ['reversal'], - 'bet' => ['bet'], - 'prize' => ['prize'], + 'bet' => ['bet_deduct', 'bet'], + 'prize' => ['settle_payout', 'prize'], ]; public function __invoke(Request $request): JsonResponse @@ -153,6 +153,8 @@ final class WalletLogsController extends Controller { return match ($biz) { 'transfer_out_refund' => 'refund', + 'bet_deduct' => 'bet', + 'settle_payout' => 'prize', 'reversal' => 'reversal', default => $biz, }; diff --git a/tests/Feature/WalletLogsTest.php b/tests/Feature/WalletLogsTest.php index 0540db5..4246fbc 100644 --- a/tests/Feature/WalletLogsTest.php +++ b/tests/Feature/WalletLogsTest.php @@ -44,39 +44,80 @@ test('wallet logs returns transfer rows and pagination', function () { expect(WalletTxn::query()->where('player_id', $player->id)->count())->toBe(1); }); -test('wallet logs filters by type refund', function () { +test('wallet logs filters bet_deduct as public bet type', function () { $player = Player::query()->create([ 'site_code' => 'main', - 'site_player_id' => 'wl2', + 'site_player_id' => 'wl3', 'default_currency' => 'NPR', 'status' => 0, ]); - PlayerWallet::query()->create([ + $wallet = PlayerWallet::query()->create([ 'player_id' => $player->id, 'wallet_type' => 'lottery', 'currency_code' => 'NPR', - 'balance' => 500, + 'balance' => 1000, 'frozen_balance' => 0, 'status' => 0, 'version' => 0, ]); - config(['lottery.main_site.wallet_api_url' => 'http://failure.test']); - Http::fake([ - 'failure.test/*' => Http::response(['success' => false, 'message' => 'no'], 200), + WalletTxn::query()->create([ + 'txn_no' => 'WX_bet_deduct_1', + 'player_id' => $player->id, + 'wallet_id' => $wallet->id, + 'biz_type' => 'bet_deduct', + 'biz_no' => 'TO_test_bet', + 'direction' => 2, + 'amount' => 28900, + 'balance_before' => 100000, + 'balance_after' => 71100, + 'status' => 'posted', ]); $this->withHeader('Authorization', 'Bearer dev:'.$player->id) - ->postJson('/api/v1/wallet/transfer-out', [ - 'amount' => 200, - 'idempotent_key' => 'out-fail', - ]) - ->assertStatus(400); - - $this->withHeader('Authorization', 'Bearer dev:'.$player->id) - ->getJson('/api/v1/wallet/logs?type=refund') + ->getJson('/api/v1/wallet/logs?type=bet') ->assertOk() ->assertJsonPath('data.total', 1) - ->assertJsonPath('data.items.0.type', 'refund'); + ->assertJsonPath('data.items.0.type', 'bet') + ->assertJsonPath('data.items.0.biz_type', 'bet_deduct'); +}); + +test('wallet logs filters settle_payout as public prize type', function () { + $player = Player::query()->create([ + 'site_code' => 'main', + 'site_player_id' => 'wl4', + 'default_currency' => 'NPR', + 'status' => 0, + ]); + + $wallet = PlayerWallet::query()->create([ + 'player_id' => $player->id, + 'wallet_type' => 'lottery', + 'currency_code' => 'NPR', + 'balance' => 1000, + 'frozen_balance' => 0, + 'status' => 0, + 'version' => 0, + ]); + + WalletTxn::query()->create([ + 'txn_no' => 'WX_settle_payout_1', + 'player_id' => $player->id, + 'wallet_id' => $wallet->id, + 'biz_type' => 'settle_payout', + 'biz_no' => 'SB_test_prize', + 'direction' => 1, + 'amount' => 50000, + 'balance_before' => 100000, + 'balance_after' => 150000, + 'status' => 'posted', + ]); + + $this->withHeader('Authorization', 'Bearer dev:'.$player->id) + ->getJson('/api/v1/wallet/logs?type=prize') + ->assertOk() + ->assertJsonPath('data.total', 1) + ->assertJsonPath('data.items.0.type', 'prize') + ->assertJsonPath('data.items.0.biz_type', 'settle_payout'); });