create([ 'username' => 'settlement_admin', 'name' => 'Settlement QA', 'email' => null, 'password' => Hash::make('secret-strong'), 'status' => 0, ]); grantSuperAdminRole($admin); return $admin->createToken('test', ['*'], now()->addDay())->plainTextToken; } test('admin settlement batches index is authenticated', function (): void { $this->getJson('/api/v1/admin/settlement-batches')->assertUnauthorized(); }); test('admin jackpot pools index returns rows', function (): void { JackpotPool::query()->create([ 'currency_code' => 'NPR', 'current_amount' => 100, 'contribution_rate' => '0.01', 'trigger_threshold' => 1000, 'payout_rate' => '0.5', 'force_trigger_draw_gap' => 10, 'min_bet_amount' => 0, 'status' => 1, 'last_trigger_draw_id' => null, ]); $token = mintSettlementAdminToken(); $this->withHeader('Authorization', 'Bearer '.$token) ->getJson('/api/v1/admin/jackpot/pools') ->assertOk() ->assertJsonPath('data.items.0.currency_code', 'NPR') ->assertJsonPath('data.items.0.combo_trigger_play_codes', []); }); test('admin can update jackpot combo trigger and manually burst pool', function (): void { $pool = JackpotPool::query()->create([ 'currency_code' => 'NPR', 'current_amount' => 1000, 'contribution_rate' => '0.01', 'trigger_threshold' => 1000, 'payout_rate' => '0.5', 'force_trigger_draw_gap' => 10, 'min_bet_amount' => 0, 'status' => 1, 'last_trigger_draw_id' => null, ]); $draw = Draw::query()->create([ 'draw_no' => '20260518-001', 'business_date' => '2026-05-18', 'sequence_no' => 1, 'status' => DrawStatus::Settled->value, 'start_time' => now()->subHours(2), 'close_time' => now()->subHour(), 'draw_time' => now()->subHour(), 'cooling_end_time' => null, 'result_source' => null, 'current_result_version' => 0, 'settle_version' => 1, 'is_reopened' => false, ]); $token = mintSettlementAdminToken(); $this->withHeader('Authorization', 'Bearer '.$token) ->putJson('/api/v1/admin/jackpot/pools/'.$pool->id, [ 'combo_trigger_play_codes' => ['straight', 'ibox'], ]) ->assertOk() ->assertJsonPath('data.combo_trigger_play_codes.0', 'straight') ->assertJsonPath('data.combo_trigger_play_codes.1', 'ibox'); $this->withHeader('Authorization', 'Bearer '.$token) ->postJson('/api/v1/admin/jackpot/pools/'.$pool->id.'/manual-burst', [ 'draw_id' => $draw->id, 'amount' => 400, ]) ->assertOk() ->assertJsonPath('data.burst_amount', 400) ->assertJsonPath('data.current_amount', 600); });