/** * 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() }) })