完善e2e测试与后端测试,微信小程序端UI层测试暂未完成

This commit was merged in pull request #52.
This commit is contained in:
2026-07-23 20:16:31 +08:00
parent b689656faf
commit 86b7555943
37 changed files with 6819 additions and 5 deletions
@@ -0,0 +1,179 @@
/**
* P3-API - 会员端品牌定制 & 通知消息 API 测试
* 流程:会员登录 → 获取品牌配置 → 获取Banner/通知
*
* 使用 HTTP APIHMAC-SHA256 签名 + JWT Token
* 前置条件:后端服务 http://192.168.110.64:8084 已启动
*/
const api = require('../helpers/api-helper');
let authToken = null;
let memberId = null;
describe('P3-API - 会员端品牌定制 & 通知消息', () => {
// ════════════════════════════════════════════════════
// 步骤0:会员登录
// ════════════════════════════════════════════════════
beforeAll(async () => {
console.log('════════════════════════════════════════════');
console.log('P3-API - 品牌定制 & 通知消息测试');
console.log('════════════════════════════════════════════');
const result = await api.memberLogin();
expect(result).not.toBeNull();
authToken = result.accessToken;
memberId = result.memberId;
console.log(`[P3-API] 会员登录成功: memberId=${memberId}`);
}, 30000);
// ════════════════════════════════════════════════════
// 步骤1:品牌定制配置
// ════════════════════════════════════════════════════
describe('品牌定制配置', () => {
test('TC-BRAND-001: 获取品牌配置', async () => {
const res = await api.getBrandConfig(authToken);
console.log(`[TC-BRAND-001] status=${res.status}`);
if (api.isSuccess(res)) {
const brand = res.data?.data || res.data || {};
console.log(` 品牌名称: ${brand.brandName || '(未设置)'}`);
console.log(` 品牌口号: ${brand.slogan || '(未设置)'}`);
console.log(` 主色调: ${brand.primaryColor || '(默认)'}`);
console.log(` 辅助色: ${brand.secondaryColor || '(默认)'}`);
console.log(` Logo URL: ${brand.logoUrl || '(默认)'}`);
console.log(` 背景URL: ${brand.backgroundUrl || '(默认)'}`);
// 品牌名称应存在(至少默认值)
expect(brand).toBeDefined();
}
});
test('TC-BRAND-002: 验证品牌颜色为合法HEX值', async () => {
const res = await api.getBrandConfig(authToken);
if (!api.isSuccess(res)) {
console.warn('[TC-BRAND-002] 获取品牌配置失败,跳过');
return;
}
const brand = res.data?.data || res.data || {};
const primaryColor = brand.primaryColor;
const secondaryColor = brand.secondaryColor;
if (primaryColor) {
// 验证是合法 HEX (#RRGGBB 或 #RRGGBBAA)
expect(/^#[0-9A-Fa-f]{6,8}$/.test(primaryColor)).toBe(true);
console.log(` 主色调 HEX 合法: ${primaryColor}`);
}
if (secondaryColor) {
expect(/^#[0-9A-Fa-f]{6,8}$/.test(secondaryColor)).toBe(true);
console.log(` 辅助色 HEX 合法: ${secondaryColor}`);
}
});
test('TC-BRAND-003: Logo URL 应为有效路径或默认占位符', async () => {
const res = await api.getBrandConfig(authToken);
if (!api.isSuccess(res)) {
console.warn('[TC-BRAND-003] 获取品牌配置失败,跳过');
return;
}
const brand = res.data?.data || res.data || {};
const logoUrl = brand.logoUrl;
if (logoUrl) {
// 可以是完整URL、相对路径、或base64
const isValid = typeof logoUrl === 'string' && logoUrl.length > 0;
expect(isValid).toBe(true);
console.log(` Logo URL: ${logoUrl.substring(0, 80)}...`);
} else {
console.log(' Logo URL 为空(使用默认值)');
}
});
});
// ════════════════════════════════════════════════════
// 步骤2Banner & 系统通知
// ════════════════════════════════════════════════════
describe('Banner & 系统通知', () => {
test('TC-NOTIFY-001: 获取活跃Banner列表', async () => {
const res = await api.getActiveBanners(authToken);
console.log(`[TC-NOTIFY-001] status=${res.status}`);
if (api.isSuccess(res)) {
const banners = res.data?.data || res.data || [];
const records = Array.isArray(banners) ? banners : (banners.records || []);
console.log(` 活跃Banner数量: ${records.length}`);
if (records.length > 0) {
const b = records[0];
console.log(` 首条Banner: title="${b.title}", imageUrl=${(b.imageUrl || '').substring(0, 50)}`);
}
}
});
test('TC-NOTIFY-002: 获取系统通知列表', async () => {
const res = await api.getSystemNotices(authToken);
console.log(`[TC-NOTIFY-002] status=${res.status}`);
if (api.isSuccess(res)) {
const notices = res.data?.data || res.data || [];
const records = Array.isArray(notices) ? notices : (notices.records || []);
console.log(` 系统通知数量: ${records.length}`);
if (records.length > 0) {
const n = records[0];
console.log(` 首条通知: title="${n.noticeTitle || n.title}", status=${n.status}`);
}
}
});
test('TC-NOTIFY-003: 获取用户消息列表', async () => {
const res = await api.getUserMessages(memberId, authToken);
console.log(`[TC-NOTIFY-003] status=${res.status}`);
if (api.isSuccess(res)) {
const messages = res.data?.data || res.data || [];
const records = Array.isArray(messages) ? messages : (messages.records || []);
console.log(` 消息数量: ${records.length}`);
}
// 消息可能为空,不强制要求有数据
});
test('TC-NOTIFY-004: 获取未读消息数', async () => {
const res = await api.getUnreadMessageCount(memberId, authToken);
console.log(`[TC-NOTIFY-004] status=${res.status}`);
if (api.isSuccess(res)) {
const count = Number(res.data?.data ?? res.data ?? 0);
console.log(` 未读消息数: ${count}`);
expect(typeof count).toBe('number');
expect(count).toBeGreaterThanOrEqual(0);
}
});
});
// ════════════════════════════════════════════════════
// 步骤3:总结
// ════════════════════════════════════════════════════
describe('总结', () => {
test('TC-P3-SUMMARY: 品牌定制 & 通知消息测试汇总', () => {
console.log('');
console.log('════════════════════════════════════════════');
console.log('P3-API - 品牌定制 & 通知消息测试结束');
console.log('════════════════════════════════════════════');
console.log(' 已测试:');
console.log(' 1. 品牌配置获取 (名称/颜色/Logo/背景)');
console.log(' 2. 颜色HEX格式校验');
console.log(' 3. Logo URL有效性');
console.log(' 4. 活跃Banner列表');
console.log(' 5. 系统通知列表');
console.log(' 6. 用户消息列表');
console.log(' 7. 未读消息数量');
console.log('════════════════════════════════════════════');
expect(memberId).toBeDefined();
expect(authToken).toBeTruthy();
});
});
});