/** * SC-P-12 任务频率/周期配置三类流(task.parent.frequency) * ================================================================ * 正常流:创建任务覆盖合法频率 none/daily/weekly/monthly/every_other_day/hourly; * 提醒配置读取/保存; * 异常流:非法频率/空标题被拒;负积分被拒; * 权限流:跨家庭成员创建被拒。 */ const { test, expect } = require('@playwright/test'); const { registerRole, apiPost, uniqueSuffix } = require('../helpers/api'); test.describe('SC-P-12 任务频率/周期三类流', () => { let parent; let childA; test.beforeAll(async ({ request }) => { parent = await registerRole(request, 'parent', 'QA-FREQ'); const mem = await apiPost(request, '/api/family/member/list', {}, parent.token); const self = (mem.data || []).find((m) => String(m.userId) === String(parent.userId)); const addA = await apiPost(request, '/api/family/member/add', { relativeMemberId: self.id, generationLevel: 'child', nickname: 'A-Freq' + uniqueSuffix(), gender: 'female', birthday: '2016-09-01', }, parent.token); expect(addA.code, 'addA: ' + addA.message).toBe(200); childA = addA.data.id; }); test('[P-12 正常] 全部合法频率可创建', async ({ request }) => { const freqs = ['none', 'daily', 'weekly', 'monthly', 'every_other_day', 'hourly']; for (const f of freqs) { const r = await apiPost(request, '/api/tasks/create', { title: '频率-' + f + uniqueSuffix(), points: 5, memberId: childA, frequency: f, needReview: 0, }, parent.token); expect(r.code, '创建频率 ' + f + ' 失败: ' + r.message).toBe(200); expect(r.data).toBeTruthy(); } }); test('[P-12 正常] 提醒配置读取与保存', async ({ request }) => { const get = await apiPost(request, '/api/task/reminder-config/get', { memberId: childA }, parent.token); expect(get.code, 'get: ' + get.message).toBe(200); const cur = get.data || {}; const save = await apiPost(request, '/api/task/reminder-config/save', { memberId: childA, enabled: cur.enabled === undefined ? true : cur.enabled, remindTime: cur.remindTime || '19:30', }, parent.token); expect(save.code, 'save: ' + save.message).toBe(200); }); test('[P-12-E 异常] 非法频率被拒', async ({ request }) => { const r = await apiPost(request, '/api/tasks/create', { title: '非法频率' + uniqueSuffix(), points: 5, memberId: childA, frequency: 'fortnightly', }, parent.token); expect(r.code).not.toBe(200); }); test('[P-12-E 异常] 空标题被拒', async ({ request }) => { const r = await apiPost(request, '/api/tasks/create', { title: '', points: 5, memberId: childA, frequency: 'daily', }, parent.token); expect(r.code).not.toBe(200); }); test('[P-12-P 权限] 跨家庭成员创建任务被拒', async ({ request }) => { const r = await apiPost(request, '/api/tasks/create', { title: '越权频率' + uniqueSuffix(), points: 5, memberId: 999999999, frequency: 'daily', }, parent.token); expect(r.code).not.toBe(200); }); });