// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第一百零一批回归闸门:活动时段与快捷时段起止时间闭环校验 */ describe('第一百零一批活动时段与快捷时段起止时间闭环', () => { const rootDir = path.resolve(__dirname, '../../'); const createVuePath = path.join(rootDir, 'pwuniapp/pages/activity/create.vue'); const detailVuePath = path.join(rootDir, 'pwuniapp/pages/activity/detail.vue'); const createVueContent = fs.readFileSync(createVuePath, 'utf-8'); const detailVueContent = fs.readFileSync(detailVuePath, 'utf-8'); it('快捷时段必须包含起止时间,不得仅有单点开始时间', () => { expect(createVueContent).toContain("'今晚 19:30 - 21:30'"); expect(createVueContent).toContain("'今晚 20:30 - 22:30'"); expect(createVueContent).toContain("'明天 14:00 - 17:00'"); expect(createVueContent).toContain("'周六 18:30 - 21:30'"); expect(createVueContent).toContain("'周日 15:00 - 18:00'"); // 确保不再包含旧的无结束时间单点快捷项 expect(createVueContent).not.toMatch(/'今晚 19:30',/); expect(createVueContent).not.toMatch(/'周六 18:30',/); }); it('时间选择器必须升级为三列多列选择器(日期、开始时间、结束时间)', () => { expect(createVueContent).toContain('const timePickerStartSlots ='); expect(createVueContent).toContain('const timePickerEndSlots ='); expect(createVueContent).toContain('const timePickerRange = ref([timePickerDays, timePickerStartSlots, timePickerEndSlots]);'); expect(createVueContent).toContain('const timePickerIndex = ref([5, 19, 24]);'); }); it('时间选择变动必须输出带有起止时间范围的完整时段字符串', () => { expect(createVueContent).toContain('${dayStr} ${startStr} - ${endStr}'); expect(createVueContent).toContain('toSlotMinutes'); }); it('快捷时段点击必须支持解析起止时间并同步更新三列索引', () => { expect(createVueContent).toContain('const match = String(timeItem).trim().match(/^(\\S+)\\s+([\\d:]+)(?:\\s*-\\s*([\\d:]+))?$/);'); expect(createVueContent).toContain('timePickerIndex.value = ['); }); it('活动详情页必须将展示文案统一为「活动时段」', () => { expect(detailVueContent).toContain('活动时段'); expect(detailVueContent).not.toContain('开始时间'); }); it('时段选择器布局必须具备防挤压换行保护(无换行、省略截断与标签不压缩)', () => { // 占位符必须精炼,避免超长换行 expect(createVueContent).toContain("{{ form.startTime || '请选择活动时段' }}"); expect(createVueContent).not.toContain('请选择活动时段 (起止时间)'); // 标签必须 flex-shrink: 0 且 white-space: nowrap 防止文字折行 expect(createVueContent).toContain('flex-shrink: 0;'); expect(createVueContent).toContain('white-space: nowrap;'); expect(createVueContent).toContain('text-overflow: ellipsis;'); // 基础信息卡片针对短标签优化宽度 expect(createVueContent).toContain('&.basic-info-card'); }); it('修改文件必须严格遵循零 Emoji 门禁规范', () => { const emojiRegex = /[\u{1F300}-\u{1F9FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/u; expect(emojiRegex.test(createVueContent)).toBe(false); expect(emojiRegex.test(detailVueContent)).toBe(false); }); });