where('is_default', true)->first(); $siteId = (int) $site->id; $siteCode = (string) $site->code; $periodId = (int) DB::table('settlement_periods')->insertGetId([ 'admin_site_id' => $siteId, 'period_start' => now()->subDays(3), 'period_end' => now()->addDay(), 'status' => 'open', 'created_at' => now(), 'updated_at' => now(), ]); $player = Player::query()->create([ 'site_code' => $siteCode, 'site_player_id' => 'native:credit-ledger-admin', 'auth_source' => PlayerAuthSource::LOTTERY_NATIVE, 'funding_mode' => PlayerFundingMode::CREDIT, 'username' => 'credit_admin_flow', 'default_currency' => 'NPR', 'status' => 0, ]); DB::table('credit_ledger')->insert([ 'owner_type' => 'player', 'owner_id' => $player->id, 'amount' => -500, 'reason' => 'bet_hold', 'ref_type' => 'bet', 'ref_id' => null, 'created_at' => now(), 'updated_at' => now(), ]); $admin = AdminUser::query()->create([ 'username' => 'credit_ledger_super', 'name' => 'Credit Ledger', 'email' => null, 'password' => Hash::make('secret-strong'), 'status' => 0, ]); grantSuperAdminRole($admin); $token = $admin->createToken('test', ['*'], now()->addDay())->plainTextToken; $this->withHeader('Authorization', 'Bearer '.$token) ->getJson('/api/v1/admin/credit-ledger?admin_site_id='.$siteId.'&settlement_period_id='.$periodId) ->assertOk() ->assertJsonPath('data.ledger_source', 'settlement_ledger') ->assertJsonPath('data.total', 1) ->assertJsonPath('data.items.0.entry_kind', 'credit') ->assertJsonPath('data.items.0.player_id', $player->id) ->assertJsonPath('data.items.0.biz_type', 'bet_hold') ->assertJsonPath('data.items.0.ledger_source', 'credit_ledger') ->assertJsonPath('data.items.0.funding_mode', PlayerFundingMode::CREDIT) ->assertJsonPath('data.items.0.available_actions', ['view_player']); }); test('settlement periods include pipeline credit and share counts', function (): void { $site = DB::table('admin_sites')->where('is_default', true)->first(); $siteId = (int) $site->id; $siteCode = (string) $site->code; $periodId = (int) DB::table('settlement_periods')->insertGetId([ 'admin_site_id' => $siteId, 'period_start' => now()->subDay(), 'period_end' => now()->addDay(), 'status' => 'open', 'created_at' => now(), 'updated_at' => now(), ]); $player = Player::query()->create([ 'site_code' => $siteCode, 'site_player_id' => 'native:pipeline-1', 'funding_mode' => PlayerFundingMode::CREDIT, 'username' => 'pipe_user', 'default_currency' => 'NPR', 'status' => 0, ]); DB::table('credit_ledger')->insert([ 'owner_type' => 'player', 'owner_id' => $player->id, 'amount' => -100, 'reason' => 'bet_hold', 'created_at' => now(), 'updated_at' => now(), ]); $admin = AdminUser::query()->create([ 'username' => 'pipeline_super', 'name' => 'Pipeline', 'email' => null, 'password' => Hash::make('secret-strong'), 'status' => 0, ]); grantSuperAdminRole($admin); $token = $admin->createToken('test', ['*'], now()->addDay())->plainTextToken; $this->withHeader('Authorization', 'Bearer '.$token) ->getJson('/api/v1/admin/settlement-periods?admin_site_id='.$siteId) ->assertOk() ->assertJsonPath('data.items.0.id', $periodId) ->assertJsonPath('data.items.0.pipeline.credit_ledger_count', 1) ->assertJsonPath('data.items.0.pipeline.share_ledger_count', 0); });