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'); });