添加LOTTERY_E2E环境变量来控制E2E测试相关功能, 包括绕过验证码、登录限制和钱包API URL验证, 同时更新composer.json以包含E2E专用的提供者和服务。
This commit is contained in:
82
e2e/scripts/mock-wallet-server.mjs
Normal file
82
e2e/scripts/mock-wallet-server.mjs
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* E2E 主站钱包 mock:供 transfer-in/out 异常场景(504 / 业务拒绝)。
|
||||
*
|
||||
* 控制端点:
|
||||
* POST /_e2e/mode body: { "mode": "success" | "504" | "reject" }
|
||||
*
|
||||
* 业务端点(与 config lottery.main_site 默认路径一致):
|
||||
* POST /wallet/debit-for-lottery
|
||||
* POST /wallet/credit-from-lottery
|
||||
*/
|
||||
|
||||
import http from 'node:http';
|
||||
|
||||
const PORT = Number(process.env.E2E_MOCK_WALLET_PORT ?? 5555);
|
||||
let mode = process.env.E2E_MOCK_WALLET_MODE ?? 'success';
|
||||
|
||||
function readBody(req) {
|
||||
return new Promise((resolve) => {
|
||||
const chunks = [];
|
||||
req.on('data', (c) => chunks.push(c));
|
||||
req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
||||
});
|
||||
}
|
||||
|
||||
function json(res, status, body) {
|
||||
res.writeHead(status, { 'Content-Type': 'application/json' });
|
||||
res.end(JSON.stringify(body));
|
||||
}
|
||||
|
||||
const server = http.createServer(async (req, res) => {
|
||||
const url = req.url ?? '/';
|
||||
const method = req.method ?? 'GET';
|
||||
|
||||
if (method === 'POST' && url === '/_e2e/mode') {
|
||||
try {
|
||||
const raw = await readBody(req);
|
||||
const parsed = JSON.parse(raw || '{}');
|
||||
if (typeof parsed.mode === 'string') {
|
||||
mode = parsed.mode;
|
||||
}
|
||||
json(res, 200, { mode });
|
||||
} catch {
|
||||
json(res, 400, { error: 'invalid_json' });
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (method === 'GET' && url === '/_e2e/health') {
|
||||
json(res, 200, { ok: true, mode });
|
||||
return;
|
||||
}
|
||||
|
||||
const isWallet =
|
||||
method === 'POST' &&
|
||||
(url === '/wallet/debit-for-lottery' || url === '/wallet/credit-from-lottery' || url.startsWith('/wallet/'));
|
||||
|
||||
if (!isWallet) {
|
||||
json(res, 404, { error: 'not_found' });
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode === '504') {
|
||||
json(res, 504, { success: false, message: 'gateway_timeout' });
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode === 'reject') {
|
||||
json(res, 200, { success: false, message: 'credit_denied' });
|
||||
return;
|
||||
}
|
||||
|
||||
json(res, 200, {
|
||||
success: true,
|
||||
external_ref: `mock-${Date.now()}`,
|
||||
message: 'ok',
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(PORT, '127.0.0.1', () => {
|
||||
console.log(`[e2e-mock-wallet] listening on http://127.0.0.1:${PORT} mode=${mode}`);
|
||||
});
|
||||
Reference in New Issue
Block a user