|
|
@@ -0,0 +1,246 @@
|
|
|
+package com.etotem.cfc.controller;
|
|
|
+
|
|
|
+import com.etotem.cfc.common.Result;
|
|
|
+import com.etotem.cfc.dto.DimensionUploadVO;
|
|
|
+import com.etotem.cfc.dto.HealthDimensionQuestionnaireVO;
|
|
|
+import com.etotem.cfc.dto.HealthDimensionVO;
|
|
|
+import com.etotem.cfc.service.DimensionScoreService;
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+import org.springframework.boot.test.context.SpringBootTest;
|
|
|
+import org.springframework.boot.test.mock.mockito.MockBean;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.*;
|
|
|
+import static org.mockito.ArgumentMatchers.*;
|
|
|
+import static org.mockito.Mockito.*;
|
|
|
+
|
|
|
+@SpringBootTest
|
|
|
+public class HealthDimensionControllerTest {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private HealthDimensionController controller;
|
|
|
+
|
|
|
+ @MockBean
|
|
|
+ private DimensionScoreService dimensionScoreService;
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void overview_success() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("memberId", 10L);
|
|
|
+
|
|
|
+ HealthDimensionVO vo = new HealthDimensionVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ HealthDimensionVO.DimensionItem dim = new HealthDimensionVO.DimensionItem();
|
|
|
+ dim.setDimension("growth");
|
|
|
+ dim.setScore(BigDecimal.valueOf(85));
|
|
|
+ vo.setDimensions(Collections.singletonList(dim));
|
|
|
+
|
|
|
+ when(dimensionScoreService.getHealthDimension(10L)).thenReturn(vo);
|
|
|
+
|
|
|
+ Result<HealthDimensionVO> result = controller.overview(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertNotNull(result.getData());
|
|
|
+ assertEquals(10L, result.getData().getMemberId());
|
|
|
+ assertEquals(1, result.getData().getDimensions().size());
|
|
|
+ assertEquals("growth", result.getData().getDimensions().get(0).getDimension());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void overview_missingMemberId() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+
|
|
|
+ Result<HealthDimensionVO> result = controller.overview(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId不能为空", result.getMessage());
|
|
|
+ verify(dimensionScoreService, never()).getHealthDimension(anyLong());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void upload_success() {
|
|
|
+ DimensionUploadVO vo = new DimensionUploadVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ vo.setDimension("growth");
|
|
|
+ vo.setScore(BigDecimal.valueOf(80));
|
|
|
+
|
|
|
+ Result<Void> result = controller.upload(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ verify(dimensionScoreService).uploadScore(vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void upload_missingMemberId() {
|
|
|
+ DimensionUploadVO vo = new DimensionUploadVO();
|
|
|
+ vo.setDimension("growth");
|
|
|
+ vo.setScore(BigDecimal.valueOf(80));
|
|
|
+
|
|
|
+ Result<Void> result = controller.upload(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId, dimension, score不能为空", result.getMessage());
|
|
|
+ verify(dimensionScoreService, never()).uploadScore(any());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void upload_missingDimension() {
|
|
|
+ DimensionUploadVO vo = new DimensionUploadVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ vo.setScore(BigDecimal.valueOf(80));
|
|
|
+
|
|
|
+ Result<Void> result = controller.upload(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId, dimension, score不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void upload_missingScore() {
|
|
|
+ DimensionUploadVO vo = new DimensionUploadVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ vo.setDimension("sleep");
|
|
|
+
|
|
|
+ Result<Void> result = controller.upload(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId, dimension, score不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void questionnaire_success() {
|
|
|
+ HealthDimensionQuestionnaireVO vo = new HealthDimensionQuestionnaireVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ vo.setDimension("sleep");
|
|
|
+ HealthDimensionQuestionnaireVO.QuestionAnswer a = new HealthDimensionQuestionnaireVO.QuestionAnswer();
|
|
|
+ a.setQuestionId("q1");
|
|
|
+ a.setAnswer("A");
|
|
|
+ vo.setAnswers(Arrays.asList(a));
|
|
|
+
|
|
|
+ Result<Void> result = controller.questionnaire(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ verify(dimensionScoreService).submitQuestionnaire(vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void questionnaire_missingMemberId() {
|
|
|
+ HealthDimensionQuestionnaireVO vo = new HealthDimensionQuestionnaireVO();
|
|
|
+ vo.setDimension("sleep");
|
|
|
+ HealthDimensionQuestionnaireVO.QuestionAnswer a = new HealthDimensionQuestionnaireVO.QuestionAnswer();
|
|
|
+ a.setQuestionId("q1");
|
|
|
+ a.setAnswer("A");
|
|
|
+ vo.setAnswers(Arrays.asList(a));
|
|
|
+
|
|
|
+ Result<Void> result = controller.questionnaire(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId, dimension, answers不能为空", result.getMessage());
|
|
|
+ verify(dimensionScoreService, never()).submitQuestionnaire(any());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void questionnaire_missingDimension() {
|
|
|
+ HealthDimensionQuestionnaireVO vo = new HealthDimensionQuestionnaireVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ HealthDimensionQuestionnaireVO.QuestionAnswer a = new HealthDimensionQuestionnaireVO.QuestionAnswer();
|
|
|
+ a.setQuestionId("q1");
|
|
|
+ a.setAnswer("A");
|
|
|
+ vo.setAnswers(Arrays.asList(a));
|
|
|
+
|
|
|
+ Result<Void> result = controller.questionnaire(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId, dimension, answers不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void questionnaire_nullAnswers() {
|
|
|
+ HealthDimensionQuestionnaireVO vo = new HealthDimensionQuestionnaireVO();
|
|
|
+ vo.setMemberId(10L);
|
|
|
+ vo.setDimension("gut");
|
|
|
+ vo.setAnswers(null);
|
|
|
+
|
|
|
+ Result<Void> result = controller.questionnaire(vo, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId, dimension, answers不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void history_success() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("memberId", 10L);
|
|
|
+ params.put("dimension", "growth");
|
|
|
+
|
|
|
+ HealthDimensionVO.DimensionItem item = new HealthDimensionVO.DimensionItem();
|
|
|
+ item.setDimension("growth");
|
|
|
+ item.setScore(BigDecimal.valueOf(85));
|
|
|
+
|
|
|
+ when(dimensionScoreService.getDimensionHistory(10L, "growth", 10))
|
|
|
+ .thenReturn(Collections.singletonList(item));
|
|
|
+
|
|
|
+ Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals(1, result.getData().size());
|
|
|
+ assertEquals("growth", result.getData().get(0).getDimension());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void history_limited() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("memberId", 10L);
|
|
|
+ params.put("dimension", "sleep");
|
|
|
+ params.put("limit", 5);
|
|
|
+
|
|
|
+ when(dimensionScoreService.getDimensionHistory(10L, "sleep", 5))
|
|
|
+ .thenReturn(Collections.emptyList());
|
|
|
+
|
|
|
+ Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertTrue(result.getData().isEmpty());
|
|
|
+ verify(dimensionScoreService).getDimensionHistory(10L, "sleep", 5);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void history_missingMemberId() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("dimension", "growth");
|
|
|
+
|
|
|
+ Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId和dimension不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void history_missingDimension() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("memberId", 10L);
|
|
|
+
|
|
|
+ Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("memberId和dimension不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void history_emptyResults() {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("memberId", 99L);
|
|
|
+ params.put("dimension", "vision");
|
|
|
+
|
|
|
+ when(dimensionScoreService.getDimensionHistory(99L, "vision", 10))
|
|
|
+ .thenReturn(Collections.emptyList());
|
|
|
+
|
|
|
+ Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L);
|
|
|
+
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertTrue(result.getData().isEmpty());
|
|
|
+ }
|
|
|
+}
|