import { describe, expect, it } from 'vitest'; import { readFileSync } from 'node:fs'; import { resolve } from 'node:path'; const read = (path: string) => readFileSync(resolve(process.cwd(), path), 'utf8'); describe('M1 帮道大喇叭发布契约', () => { it('管理端携带必读和定向范围,并使用受控目标选项', () => { const api = read('src/api/aihr/broadcast.ts'); const page = read('src/views/content/broadcast.vue'); const pending = read('src/utils/broadcast-pending.ts'); expect(api).toContain('requiredRead: boolean;'); expect(api).toContain('targets: BroadcastTargetRequest;'); expect(api).toContain("'/api/aihr/broadcast/admin/target-options'"); expect(page).toContain('v-model="form.requiredRead"'); expect(page).toContain('v-model="form.targets.projectCodes"'); expect(page).toContain('v-model="form.targets.positionNames"'); expect(page).toContain('v-model="form.targets.positionLevels"'); expect(page).toContain('loadBroadcastTargetOptions'); expect(page).toContain('matchedRecipientCount'); expect(pending).toContain('requiredRead: boolean;'); expect(pending).toContain('targets: BroadcastTargetRequest;'); }); });