|
|
@@ -0,0 +1,70 @@
|
|
|
+/**
|
|
|
+ * 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()
|
|
|
+ })
|
|
|
+})
|