play.wenpai.net/tests/api.spec.js
elementary-qa 504315bcf2 修复 Playwright 测试套件适配 Playground 环境
- baseURL 改为 127.0.0.1 解决 CORS 脚本加载问题
- 统一使用 domcontentloaded 替代 load(Playground 特性)
- admin 页面测试串行化避免并发压力
- 过滤 Playground CORS 控制台错误
- Markdown Feed 改用 request API 避免下载触发
- 认证测试兼容 Playground 自动登录
全部 25 测试通过。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-20 13:31:27 +08:00

91 lines
2.9 KiB
JavaScript

// WPMind AJAX 端点 + REST API 测试
// @ts-check
const { test, expect } = require('@playwright/test');
const GOTO_OPTS = { waitUntil: 'domcontentloaded' };
test.describe('AJAX 端点', () => {
test.beforeEach(async ({ page }) => {
// 登录获取 cookie
await page.goto('/wp-login.php', GOTO_OPTS);
await page.fill('#user_login', 'admin');
await page.fill('#user_pass', 'password');
await page.click('#wp-submit');
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(1000);
// 导航到 admin 页面确保 cookie 生效
await page.goto('/wp-admin/', GOTO_OPTS);
await page.waitForTimeout(1000);
});
const ajaxActions = [
'wpmind_get_provider_status',
'wpmind_get_routing_status',
'wpmind_get_usage_stats',
'wpmind_get_budget_status',
'wpmind_get_cache_stats',
];
for (const action of ajaxActions) {
test(`${action} 端点响应正常`, async ({ page }) => {
const response = await page.evaluate(async (act) => {
try {
const res = await fetch('/wp-admin/admin-ajax.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: `action=${act}`,
credentials: 'same-origin',
});
const text = await res.text();
return { status: res.status, hasBody: text.length > 0 };
} catch (e) {
return { error: e.message };
}
}, action);
expect(response.status).toBeDefined();
expect(response.hasBody).toBe(true);
});
}
});
test.describe('REST API', () => {
test('mind/v1 命名空间已注册', async ({ page }) => {
const response = await page.goto('/wp-json/mind/v1/', GOTO_OPTS);
expect([200, 404]).toContain(response.status());
});
test('models 端点可访问', async ({ page }) => {
const response = await page.goto('/wp-json/mind/v1/models', GOTO_OPTS);
if (response.status() === 200) {
const content = await page.content();
expect(content.length).toBeGreaterThan(0);
}
});
test('status 端点可访问', async ({ page }) => {
const response = await page.goto('/wp-json/mind/v1/status', GOTO_OPTS);
if (response.status() === 200) {
const content = await page.content();
expect(content.length).toBeGreaterThan(0);
}
});
test('未认证请求被拒绝', async ({ page }) => {
const response = await page.evaluate(async () => {
try {
const res = await fetch('/wp-json/mind/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model: 'test', messages: [{ role: 'user', content: 'hi' }] }),
});
return { status: res.status };
} catch (e) {
return { error: e.message };
}
});
if (response.status) {
expect(response.status).not.toBe(500);
expect([401, 403, 404]).toContain(response.status);
}
});
});