Some checks failed
lotterLaravel CI / test (push) Has been cancelled
添加LOTTERY_E2E环境变量来控制E2E测试相关功能, 包括绕过验证码、登录限制和钱包API URL验证, 同时更新composer.json以包含E2E专用的提供者和服务。
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
/**
|
||
* 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();
|
||
});
|