Files
lotteryLaravel/e2e/tests/api/01.health.spec.ts
kang 6ec9634704
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
feat: 添加E2E测试环境配置支持
添加LOTTERY_E2E环境变量来控制E2E测试相关功能,
包括绕过验证码、登录限制和钱包API URL验证,
同时更新composer.json以包含E2E专用的提供者和服务。
2026-06-18 14:42:22 +08:00

49 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* E2E 冒烟:健康检查 + 公开 draw/captcha/玩家 ping。
*
* 不依赖任何账号,跑通说明:
* - docker compose 起得起来
* - php artisan serve 真的在 127.0.0.1:8000
* - PG / Redis / 缓存 / 路由都活着
*/
import { test, expect, request as pwRequest } from '@playwright/test';
const API = process.env.PLAYWRIGHT_API_URL ?? 'http://127.0.0.1:8000';
test('GET /api/v1/health 返回 200', async () => {
const ctx = await pwRequest.newContext();
const r = await ctx.get('/api/v1/health');
expect(r.ok(), `status=${r.status()}`).toBeTruthy();
await ctx.dispose();
});
test('GET /api/v1/player/ping 返回 200', async () => {
const ctx = await pwRequest.newContext();
const r = await ctx.get('/api/v1/player/ping');
expect(r.ok(), `status=${r.status()}`).toBeTruthy();
await ctx.dispose();
});
test('GET /api/v1/draw/current 不要求登录且包含 draw_no', async () => {
const ctx = await pwRequest.newContext();
const r = await ctx.get('/api/v1/draw/current');
expect(r.ok(), `status=${r.status()}`).toBeTruthy();
const body = (await r.json()) as any;
// data 是 DrawHallSnapshotdraw_no 不一定有(如果没"当前可下注"期号就 null
expect(body).toHaveProperty('data');
await ctx.dispose();
});
test('GET /api/v1/player/auth/captcha 返回 base64 + uuid key', async () => {
const ctx = await pwRequest.newContext();
const r = await ctx.get('/api/v1/player/auth/captcha');
expect(r.ok(), `status=${r.status()}`).toBeTruthy();
const body = (await r.json()) as any;
expect(body.data.captcha_key).toMatch(/^[0-9a-f-]{36}$/);
expect(body.data.image_base64).toBeTruthy();
const svg = Buffer.from(body.data.image_base64, 'base64').toString('utf8');
expect(svg).toContain('<svg');
await ctx.dispose();
});