- getActivities/getActivityById 的 participants 关联 users,返回真实昵称与头像 - 用户已删除时返回「用户已注销」,避免详情页显示搭子_id - 118 套件/773 用例全绿;线上活动详情已验证真实昵称
45 行
1.8 KiB
TypeScript
45 行
1.8 KiB
TypeScript
// 已读取AGENTS.md
|
||
import * as fs from 'fs';
|
||
import * as path from 'path';
|
||
|
||
/**
|
||
* 活动大厅内容规范(第九十六批改写)
|
||
* 背景:演示用 mock.js 已删除,活动数据统一来自数据库(GET /api/activities)。
|
||
* 本套件改为校验:不再内置 mock、页面真实取数、无 Emoji、关键字段展示完整。
|
||
*/
|
||
describe('ActivityListContent(活动大厅真实数据与内容规范)', () => {
|
||
const root = path.resolve(__dirname, '../../');
|
||
const pagePath = path.join(root, 'pwuniapp', 'pages', 'activity', 'list.vue');
|
||
const page = fs.readFileSync(pagePath, 'utf-8');
|
||
const mockPath = path.join(root, 'pwuniapp', 'common', 'mock.js');
|
||
|
||
it('不得再内置活动 mock 数据', () => {
|
||
expect(fs.existsSync(mockPath)).toBe(false);
|
||
expect(page).not.toContain('ACTIVITIES_LIST');
|
||
expect(page).not.toContain("from '@/common/mock");
|
||
});
|
||
|
||
it('活动列表必须从服务端取数', () => {
|
||
expect(page).toContain('getActivities');
|
||
expect(page).toContain('activities.value = list');
|
||
});
|
||
|
||
it('活动卡片展示地点、开始时间与发起人字段', () => {
|
||
expect(page).toContain('location');
|
||
expect(page).toContain('startTime');
|
||
expect(page).toContain('creatorNickname');
|
||
});
|
||
|
||
it('活动参与者必须返回真实昵称与头像,而不是只显示搭子_id', () => {
|
||
const repo = fs.readFileSync(path.join(root, 'server', 'src', 'db', 'repository.ts'), 'utf-8');
|
||
expect(repo).toContain('LEFT JOIN users u ON u.id = p.user_id');
|
||
expect(repo).toContain('nickname: p.nickname ||');
|
||
expect(repo).toContain('avatar: p.avatar ||');
|
||
});
|
||
|
||
it('页面严禁包含任何系统 Emoji 字符', () => {
|
||
const emojiRegex = /(?:\p{Extended_Pictographic}|\p{Emoji_Presentation}|[\u2600-\u27BF])/u;
|
||
expect(emojiRegex.test(page)).toBe(false);
|
||
});
|
||
});
|