feat: 添加E2E测试环境配置支持
Some checks failed
lotterLaravel CI / test (push) Has been cancelled

添加LOTTERY_E2E环境变量来控制E2E测试相关功能,
包括绕过验证码、登录限制和钱包API URL验证,
同时更新composer.json以包含E2E专用的提供者和服务。
This commit is contained in:
2026-06-18 14:42:22 +08:00
parent 6b2ea39ea1
commit 6ec9634704
45 changed files with 3702 additions and 6 deletions

View File

@@ -0,0 +1,63 @@
/**
* E2E信用盘中奖结算 → game_settlement_win 释额 + 玩家流水 win_credit。
*/
import { test, expect } from '@playwright/test';
import {
adminLoginViaBypass,
e2e,
fetchOpenDrawNo,
playerLoginViaBypass,
playerCtxOf,
setupCreditPlayer,
} from './_helper';
import { runWalletDrawSettlement } from './helpers/draw-settlement';
test('信用玩家中奖结算 → credit_ledger game_settlement_win + 钱包流水 win_credit', async () => {
test.setTimeout(240_000);
const winNumber = `7${String(Date.now()).slice(-3)}`;
const credit = await setupCreditPlayer({
credit_limit: 100_000,
username: `e2e_win_${Date.now()}`,
});
const drawNo = await fetchOpenDrawNo();
const adminSession = await adminLoginViaBypass();
const playerSession = await playerLoginViaBypass({
site_code: credit.site_code,
username: credit.username,
password: credit.password,
});
await runWalletDrawSettlement({
adminToken: adminSession.accessToken,
playerToken: playerSession.access_token,
drawNo,
betNumber: winNumber,
betAmount: 10_000,
expectWalletIncrease: false,
});
const ledger = await e2e<any>(
'GET',
`/inspect/credit-ledger?player_id=${credit.player_id}&limit=20`,
);
const hold = ledger.data.rows.find((r: any) => r.reason === 'bet_hold');
const winRow = ledger.data.rows.find((r: any) => r.reason === 'game_settlement_win');
expect(hold, '下注后应有 bet_hold').toBeTruthy();
expect(winRow, '中奖结算后应有 game_settlement_win').toBeTruthy();
expect(Number(winRow.amount)).toBeGreaterThan(0);
const ctx = await playerCtxOf(playerSession.access_token);
const logs = await ctx.get('/api/v1/wallet/logs?page=1&size=20');
expect(logs.ok()).toBeTruthy();
const logsBody = (await logs.json()) as any;
expect(logsBody.code).toBe(0);
expect(logsBody.data.ledger_source).toBe('credit_ledger');
const winLog = logsBody.data.items.find(
(i: any) => i.biz_type === 'game_settlement_win' || i.type === 'win_credit',
);
expect(winLog, '玩家流水应展示中奖释额').toBeTruthy();
await ctx.dispose();
});