文件
shanghaipeiwan/server/tests/activity-gender-limit.spec.ts

74 行
3.6 KiB
TypeScript

// 已读取AGENTS.md
import * as fs from 'fs';
import * as path from 'path';
/**
* 第一百零二批回归闸门:组局性别限制功能全链路闭环测试
*/
describe('第一百零二批组局性别限制闭环测试', () => {
const rootDir = path.resolve(__dirname, '../../');
const mysqlTsPath = path.join(rootDir, 'server/src/db/mysql.ts');
const repoTsPath = path.join(rootDir, 'server/src/db/repository.ts');
const apiJsPath = path.join(rootDir, 'pwuniapp/common/api.js');
const createVuePath = path.join(rootDir, 'pwuniapp/pages/activity/create.vue');
const detailVuePath = path.join(rootDir, 'pwuniapp/pages/activity/detail.vue');
const listVuePath = path.join(rootDir, 'pwuniapp/pages/activity/list.vue');
const mysqlContent = fs.readFileSync(mysqlTsPath, 'utf-8');
const repoContent = fs.readFileSync(repoTsPath, 'utf-8');
const apiJsContent = fs.readFileSync(apiJsPath, 'utf-8');
const createVueContent = fs.readFileSync(createVuePath, 'utf-8');
const detailVueContent = fs.readFileSync(detailVuePath, 'utf-8');
const listVueContent = fs.readFileSync(listVuePath, 'utf-8');
it('数据库结构必须包含 gender_requirement 字段及迁移补丁', () => {
expect(mysqlContent).toContain('gender_requirement VARCHAR(32) DEFAULT \'ALL\'');
expect(mysqlContent).toContain('ADD COLUMN gender_requirement VARCHAR(32)');
});
it('仓储层 createActivity 必须支持并归一化 genderRequirement', () => {
expect(repoContent).toContain('genderRequirement?: string;');
expect(repoContent).toContain("genderRequirement = 'FEMALE_ONLY'");
expect(repoContent).toContain("genderRequirement = 'MALE_ONLY'");
expect(repoContent).toContain('gender_requirement');
});
it('仓储层 joinActivity 必须严格执行性别限制校验,违规时拦截', () => {
expect(repoContent).toContain('该组局仅限女生报名参与');
expect(repoContent).toContain('该组局仅限男生报名参与');
expect(repoContent).toContain('genderRequirement || \'ALL\'');
});
it('小程序 API 层必须透传与格式化 genderRequirement', () => {
expect(apiJsContent).toContain('genderRequirement: payload.genderRequirement || \'ALL\'');
expect(apiJsContent).toContain('raw.genderRequirement || raw.gender_requirement || \'ALL\'');
});
it('组局发布页 create.vue 必须提供「凑局性别限制」配置项及三选一胶囊', () => {
expect(createVueContent).toContain('凑局性别限制');
expect(createVueContent).toContain('genderOptions');
expect(createVueContent).toContain("'仅女生'");
expect(createVueContent).toContain("'仅男生'");
expect(createVueContent).toContain("'不限'");
expect(createVueContent).toContain('genderRequirement: \'ALL\'');
expect(createVueContent).toContain('.gender-limit-block');
});
it('详情页与大厅列表必须展示对应性别限制标签', () => {
expect(detailVueContent).toContain('性别限制');
expect(detailVueContent).toContain('formatGenderRequirement');
expect(listVueContent).toContain('仅限女生');
expect(listVueContent).toContain('仅限男生');
expect(listVueContent).toContain('gender-req-tag');
});
it('全量修改文件必须严格遵守零 Emoji 门禁规范', () => {
const emojiRegex = /[\u{1F300}-\u{1F9FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/u;
expect(emojiRegex.test(mysqlContent)).toBe(false);
expect(emojiRegex.test(repoContent)).toBe(false);
expect(emojiRegex.test(createVueContent)).toBe(false);
expect(emojiRegex.test(detailVueContent)).toBe(false);
expect(emojiRegex.test(listVueContent)).toBe(false);
});
});