|
@@ -0,0 +1,81 @@
|
|
|
|
|
+package com.etotem.cfc.service;
|
|
|
|
|
+
|
|
|
|
|
+import com.etotem.cfc.common.Result;
|
|
|
|
|
+import com.etotem.cfc.entity.FamilyChallenge;
|
|
|
|
|
+import com.etotem.cfc.entity.FamilyChallengeProgress;
|
|
|
|
|
+import com.etotem.cfc.mapper.FamilyChallengeMapper;
|
|
|
|
|
+import com.etotem.cfc.mapper.FamilyChallengeProgressMapper;
|
|
|
|
|
+import com.etotem.cfc.mapper.FamilyMemberMapper;
|
|
|
|
|
+import org.junit.jupiter.api.BeforeEach;
|
|
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
|
|
+import org.mockito.InjectMocks;
|
|
|
|
|
+import org.mockito.Mock;
|
|
|
|
|
+import org.mockito.MockitoAnnotations;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.Date;
|
|
|
|
|
+
|
|
|
|
|
+import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
|
|
+import static org.mockito.ArgumentMatchers.any;
|
|
|
|
|
+import static org.mockito.Mockito.never;
|
|
|
|
|
+import static org.mockito.Mockito.verify;
|
|
|
|
|
+import static org.mockito.Mockito.when;
|
|
|
|
|
+
|
|
|
|
|
+public class FamilyChallengeServiceTest {
|
|
|
|
|
+
|
|
|
|
|
+ @Mock private FamilyChallengeMapper familyChallengeMapper;
|
|
|
|
|
+ @Mock private FamilyChallengeProgressMapper familyChallengeProgressMapper;
|
|
|
|
|
+ @Mock private FamilyMemberMapper familyMemberMapper;
|
|
|
|
|
+ @Mock private HealthScoreService healthScoreService;
|
|
|
|
|
+ @Mock private PointsService pointsService;
|
|
|
|
|
+ @InjectMocks private FamilyChallengeService service;
|
|
|
|
|
+
|
|
|
|
|
+ @BeforeEach
|
|
|
|
|
+ void setUp() {
|
|
|
|
|
+ MockitoAnnotations.openMocks(this);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void updateProgress_shouldRejectDuplicateCheckinSameDay() {
|
|
|
|
|
+ FamilyChallenge challenge = new FamilyChallenge();
|
|
|
|
|
+ challenge.setId(1L);
|
|
|
|
|
+ challenge.setFamilyId(10L);
|
|
|
|
|
+ challenge.setStatus("active");
|
|
|
|
|
+ challenge.setTargetMode("aggregate");
|
|
|
|
|
+ challenge.setTargetValue(300);
|
|
|
|
|
+ challenge.setEndDate(new Date(System.currentTimeMillis() + 86400000L * 7));
|
|
|
|
|
+
|
|
|
|
|
+ FamilyChallengeProgress existing = new FamilyChallengeProgress();
|
|
|
|
|
+ existing.setChallengeId(1L);
|
|
|
|
|
+ existing.setChildId(100L);
|
|
|
|
|
+ existing.setProgressValue(5);
|
|
|
|
|
+ existing.setUpdatedAt(new Date());
|
|
|
|
|
+
|
|
|
|
|
+ when(familyChallengeMapper.selectById(1L)).thenReturn(challenge);
|
|
|
|
|
+ when(familyChallengeProgressMapper.selectOne(any())).thenReturn(existing);
|
|
|
|
|
+ when(familyMemberMapper.selectCount(any())).thenReturn(1L);
|
|
|
|
|
+
|
|
|
|
|
+ Result<Void> result = service.updateProgress(1L, 100L, 1);
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(Integer.valueOf(500), result.getCode());
|
|
|
|
|
+ verify(familyChallengeProgressMapper, never()).updateById(any());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void updateProgress_shouldRejectWhenChallengeNotActive() {
|
|
|
|
|
+ FamilyChallenge challenge = new FamilyChallenge();
|
|
|
|
|
+ challenge.setId(1L);
|
|
|
|
|
+ challenge.setFamilyId(10L);
|
|
|
|
|
+ challenge.setStatus("completed");
|
|
|
|
|
+ challenge.setTargetMode("aggregate");
|
|
|
|
|
+ challenge.setTargetValue(300);
|
|
|
|
|
+ challenge.setEndDate(new Date(System.currentTimeMillis() + 86400000L * 7));
|
|
|
|
|
+
|
|
|
|
|
+ when(familyChallengeMapper.selectById(1L)).thenReturn(challenge);
|
|
|
|
|
+
|
|
|
|
|
+ Result<Void> result = service.updateProgress(1L, 100L, 1);
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(Integer.valueOf(500), result.getCode());
|
|
|
|
|
+ verify(familyChallengeProgressMapper, never()).insert(any());
|
|
|
|
|
+ verify(familyChallengeProgressMapper, never()).updateById(any());
|
|
|
|
|
+ }
|
|
|
|
|
+}
|