fix: guard market opportunity insight validation

main
陈沅 4 days ago
parent 5237bb713d
commit a216204de3

@ -54,7 +54,12 @@ public class MarketOpportunitySelectionStepFiveServiceImpl implements MarketOppo
@SuppressWarnings("unchecked")
private void requireCompletedStepFour(String answerJson) {
Map<String, Object> outcome = JSON.parseObject(answerJson, LinkedHashMap.class);
Map<String, Object> outcome;
try {
outcome = JSON.parseObject(answerJson, LinkedHashMap.class);
} catch (RuntimeException error) {
throw badRequest("请先完成并保存第 4 步数据可视化");
}
Object rawVisualization = outcome == null ? null : outcome.get("visualization");
Object url = rawVisualization instanceof Map ? ((Map<String, Object>) rawVisualization).get("url") : null;
if (!(rawVisualization instanceof Map) || url == null || StringUtils.isBlank(String.valueOf(url))) throw badRequest("请先完成并保存第 4 步数据可视化");

@ -0,0 +1,36 @@
package com.sztzjy.linkCommerce.service.impl;
import com.sztzjy.linkCommerce.config.exception.handler.ServiceException;
import com.sztzjy.linkCommerce.config.security.JwtUser;
import com.sztzjy.linkCommerce.entity.StudentTrainingAnswer;
import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepFiveValidationRequest;
import com.sztzjy.linkCommerce.service.StudentTrainingAnswerService;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
class MarketOpportunitySelectionStepFiveServiceImplTest {
@Test
void validateRejectsMalformedSavedStepFourAnswerAsBadRequest() {
MarketOpportunitySelectionStepFiveServiceImpl service = new MarketOpportunitySelectionStepFiveServiceImpl();
StudentTrainingAnswerService answers = mock(StudentTrainingAnswerService.class);
StudentTrainingAnswer answer = new StudentTrainingAnswer();
answer.setStep4Answer("{not-valid-json");
when(answers.get(anyString(), any(), any(JwtUser.class))).thenReturn(answer);
ReflectionTestUtils.setField(service, "studentTrainingAnswerService", answers);
assertThrows(ServiceException.class, () -> service.validate(new MarketOpportunitySelectionStepFiveValidationRequest(), student()));
}
private JwtUser student() {
JwtUser user = new JwtUser();
user.setUserId("stu-1");
user.setRoleId(4);
return user;
}
}
Loading…
Cancel
Save