Files
chinese-family-tree-2/test-full-api.js
T
freedakgmail e92884ae53 0.0.1.0
2025-11-23 03:07:39 +08:00

115 lines
3.1 KiB
JavaScript

const puppeteer = require('puppeteer');
async function testAPIs() {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
try {
console.log('🧪 开始完整 API 测试...');
// 1. 访问登录页面
await page.goto('http://localhost:3000/auth/signin');
await page.waitForSelector('input[type="email"]');
// 2. 填写登录信息
await page.type('input[type="email"]', 'test@example.com');
await page.type('input[type="password"]', 'password123');
// 3. 点击登录
await Promise.all([
page.waitForNavigation(),
page.click('button[type="submit"]')
]);
// 4. 获取 cookies
const cookies = await page.cookies();
const sessionCookie = cookies.find(c => c.name === 'next-auth.session-token');
if (!sessionCookie) {
console.error('❌ 未找到 session cookie');
return;
}
console.log('✅ 登录成功,获取到 session');
// 5. 测试 API 端点
const testAPI = async (url, method = 'GET', data = null) => {
const response = await page.evaluate(async (url, method, data, cookie) => {
const options = {
method,
headers: {
'Content-Type': 'application/json',
'Cookie': `next-auth.session-token=${cookie}`
}
};
if (data) {
options.body = JSON.stringify(data);
}
const res = await fetch(`http://localhost:3000${url}`, options);
const text = await res.text();
try {
return {
status: res.status,
data: JSON.parse(text)
};
} catch {
return {
status: res.status,
data: text
};
}
}, url, method, data, sessionCookie.value);
console.log(`${method} ${url}: ${response.status}`);
if (response.data) {
console.log(JSON.stringify(response.data, null, 2));
}
console.log('---');
return response;
};
// 测试获取家族树列表
await testAPI('/api/trees');
// 测试创建家族树
const treeResponse = await testAPI('/api/trees', 'POST', {
name: '测试家族树',
description: 'API 测试创建'
});
if (treeResponse.status === 201) {
const treeId = treeResponse.data.tree.id;
console.log(`✅ 创建家族树成功,ID: ${treeId}`);
// 测试获取成员列表
await testAPI(`/api/trees/${treeId}/members`);
// 测试创建成员
await testAPI(`/api/trees/${treeId}/members`, 'POST', {
surname: '李',
givenName: '测试',
fullName: '李测试',
gender: 'MALE',
generation: 1,
birthDate: '1990-01-01'
});
// 再次获取成员列表
await testAPI(`/api/trees/${treeId}/members`);
}
console.log('✅ API 测试完成!');
} catch (error) {
console.error('❌ 测试失败:', error);
} finally {
await browser.close();
}
}
testAPIs();