task-frequency-sc-p12.spec.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**
  2. * SC-P-12 任务频率/周期配置三类流(task.parent.frequency)
  3. * ================================================================
  4. * 正常流:创建任务覆盖合法频率 none/daily/weekly/monthly/every_other_day/hourly;
  5. * 提醒配置读取/保存;
  6. * 异常流:非法频率/空标题被拒;负积分被拒;
  7. * 权限流:跨家庭成员创建被拒。
  8. */
  9. const { test, expect } = require('@playwright/test');
  10. const { registerRole, apiPost, uniqueSuffix } = require('../helpers/api');
  11. test.describe('SC-P-12 任务频率/周期三类流', () => {
  12. let parent;
  13. let childA;
  14. test.beforeAll(async ({ request }) => {
  15. parent = await registerRole(request, 'parent', 'QA-FREQ');
  16. const mem = await apiPost(request, '/api/family/member/list', {}, parent.token);
  17. const self = (mem.data || []).find((m) => String(m.userId) === String(parent.userId));
  18. const addA = await apiPost(request, '/api/family/member/add', {
  19. relativeMemberId: self.id, generationLevel: 'child',
  20. nickname: 'A-Freq' + uniqueSuffix(), gender: 'female', birthday: '2016-09-01',
  21. }, parent.token);
  22. expect(addA.code, 'addA: ' + addA.message).toBe(200);
  23. childA = addA.data.id;
  24. });
  25. test('[P-12 正常] 全部合法频率可创建', async ({ request }) => {
  26. const freqs = ['none', 'daily', 'weekly', 'monthly', 'every_other_day', 'hourly'];
  27. for (const f of freqs) {
  28. const r = await apiPost(request, '/api/tasks/create', {
  29. title: '频率-' + f + uniqueSuffix(), points: 5, memberId: childA, frequency: f, needReview: 0,
  30. }, parent.token);
  31. expect(r.code, '创建频率 ' + f + ' 失败: ' + r.message).toBe(200);
  32. expect(r.data).toBeTruthy();
  33. }
  34. });
  35. test('[P-12 正常] 提醒配置读取与保存', async ({ request }) => {
  36. const get = await apiPost(request, '/api/task/reminder-config/get', { memberId: childA }, parent.token);
  37. expect(get.code, 'get: ' + get.message).toBe(200);
  38. const cur = get.data || {};
  39. const save = await apiPost(request, '/api/task/reminder-config/save', {
  40. memberId: childA,
  41. enabled: cur.enabled === undefined ? true : cur.enabled,
  42. remindTime: cur.remindTime || '19:30',
  43. }, parent.token);
  44. expect(save.code, 'save: ' + save.message).toBe(200);
  45. });
  46. test('[P-12-E 异常] 非法频率被拒', async ({ request }) => {
  47. const r = await apiPost(request, '/api/tasks/create', {
  48. title: '非法频率' + uniqueSuffix(), points: 5, memberId: childA, frequency: 'fortnightly',
  49. }, parent.token);
  50. expect(r.code).not.toBe(200);
  51. });
  52. test('[P-12-E 异常] 空标题被拒', async ({ request }) => {
  53. const r = await apiPost(request, '/api/tasks/create', {
  54. title: '', points: 5, memberId: childA, frequency: 'daily',
  55. }, parent.token);
  56. expect(r.code).not.toBe(200);
  57. });
  58. test('[P-12-P 权限] 跨家庭成员创建任务被拒', async ({ request }) => {
  59. const r = await apiPost(request, '/api/tasks/create', {
  60. title: '越权频率' + uniqueSuffix(), points: 5, memberId: 999999999, frequency: 'daily',
  61. }, parent.token);
  62. expect(r.code).not.toBe(200);
  63. });
  64. });