115 lines
3.1 KiB
JavaScript
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();
|