| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /**
- * Tests for cfc-frontend utils/memberNormalize.js — resolveCheckinMemberId
- *
- * 背景:三个健康打卡页(diet/exercise/sleep-checkin)onLoad 里
- * `if (role !== 'child') { memberId = options.memberId || currentMemberId || null }`
- * 与首页 growth-main 的 `currentChildId || currentMemberId || userId` 解析不一致:
- * 1) role==='child' 时 memberId 恒为 null(打卡页根本拿不到成员)
- * 2) parent 角色缺 currentChildId / userId 兜底
- * 导致:无当日未完成任务(URL 不带 memberId)+ currentMemberId 为空时,
- * 提交被 `if (!memberId)` 拦截提示"成员ID无效"。
- *
- * 本测试规定 resolveCheckinMemberId 的统一解析行为(与首页 growth-main 对齐):
- * options.memberId > currentChildId > currentMemberId > userId > null
- * 不再受 role 限制。
- */
- describe('resolveCheckinMemberId', () => {
- let normalize
- beforeAll(() => {
- normalize = require('@/utils/memberNormalize')
- })
- test('URL 参数 options.memberId 优先(首页 tile 带 taskId 进入)', () => {
- expect(normalize.resolveCheckinMemberId(
- { memberId: '21', taskId: '4040' },
- { currentChildId: '10', currentMemberId: '9', userId: '12' }
- )).toBe('21')
- })
- test('无 URL 参数时回退 currentChildId(parent 切到孩子视角)', () => {
- expect(normalize.resolveCheckinMemberId(
- {},
- { currentChildId: '21', currentMemberId: '', userId: '12' }
- )).toBe('21')
- })
- test('再回退 currentMemberId', () => {
- expect(normalize.resolveCheckinMemberId(
- {},
- { currentChildId: '', currentMemberId: '21', userId: '12' }
- )).toBe('21')
- })
- test('最后回退 userId(首页与打卡页解析一致的兜底)', () => {
- expect(normalize.resolveCheckinMemberId(
- {},
- { currentChildId: '', currentMemberId: '', userId: '12' }
- )).toBe('12')
- })
- test('child 角色不返回 null(修复原 if(role!=="child") 恒 null 缺陷)', () => {
- expect(normalize.resolveCheckinMemberId(
- {},
- { currentRole: 'child', currentChildId: '21', currentMemberId: '', userId: '12' }
- )).toBe('21')
- })
- test('child 角色无 currentChildId 时回退 userId', () => {
- expect(normalize.resolveCheckinMemberId(
- {},
- { currentRole: 'child', currentChildId: '', currentMemberId: '', userId: '12' }
- )).toBe('12')
- })
- test('全部为空返回 null(保持提交拦截语义,由后端/调用方给出明确提示)', () => {
- expect(normalize.resolveCheckinMemberId({}, {})).toBeNull()
- expect(normalize.resolveCheckinMemberId(null, null)).toBeNull()
- })
- })
|