From 956c07b8df4d1f06557933bae78d5dca87f248ff Mon Sep 17 00:00:00 2001 From: chenyuan Date: Fri, 7 Aug 2026 10:47:39 +0800 Subject: [PATCH] feat: expose new product survey grading api --- .../stu/StudentTrainingAnswerController.java | 18 +++++++ .../StudentTrainingAnswerControllerTest.java | 52 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java index 9c7bfe5..f57d2af 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java @@ -4,6 +4,9 @@ import com.sztzjy.linkCommerce.config.exception.handler.ServiceException; import com.sztzjy.linkCommerce.config.security.JwtUser; import com.sztzjy.linkCommerce.config.security.TokenProvider; import com.sztzjy.linkCommerce.entity.StudentTrainingAnswer; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckResult; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService; import com.sztzjy.linkCommerce.service.StudentTrainingAnswerService; import com.sztzjy.linkCommerce.util.ResultEntity; import io.swagger.annotations.Api; @@ -21,6 +24,9 @@ public class StudentTrainingAnswerController { @Autowired private StudentTrainingAnswerService studentTrainingAnswerService; + @Autowired + private NewProductSurveyStepOneService newProductSurveyStepOneService; + @GetMapping("/{taskKey}") @ApiOperation("查询当前学生指定实训任务答案") public ResultEntity detail(@PathVariable String taskKey, @@ -47,6 +53,18 @@ public class StudentTrainingAnswerController { } } + @PostMapping("/new-product-survey/step-1/check") + @ApiOperation("新产品调查与分析第一步判题") + public ResultEntity checkNewProductSurveyStepOne( + @RequestBody NewProductSurveyStepOneCheckRequest answer, HttpServletRequest request) { + try { + JwtUser user = TokenProvider.getJWTUser(request); + return new ResultEntity<>(HttpStatus.OK, "判题完成", newProductSurveyStepOneService.check(answer, user)); + } catch (ServiceException e) { + return new ResultEntity<>(e.getCode(), e.getMessage()); + } + } + @DeleteMapping("/{taskKey}") @ApiOperation("删除当前学生指定实训任务答案") public ResultEntity delete(@PathVariable String taskKey, diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java new file mode 100644 index 0000000..c4933af --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java @@ -0,0 +1,52 @@ +package com.sztzjy.linkCommerce.controller.stu; + +import com.sztzjy.linkCommerce.config.Constant; +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.config.security.TokenProvider; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckResult; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService; +import com.sztzjy.linkCommerce.util.ResultEntity; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.servlet.http.HttpServletRequest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +class StudentTrainingAnswerControllerTest { + + @Test + void checkStepOneUsesTheAuthenticatedStudentAndReturnsTheGrade() { + StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); + NewProductSurveyStepOneService service = mock(NewProductSurveyStepOneService.class); + ReflectionTestUtils.setField(controller, "newProductSurveyStepOneService", service); + NewProductSurveyStepOneCheckResult grade = new NewProductSurveyStepOneCheckResult(); + grade.setAllCorrect(true); + when(service.check(any(NewProductSurveyStepOneCheckRequest.class), any(JwtUser.class))).thenReturn(grade); + + NewProductSurveyStepOneCheckRequest answer = new NewProductSurveyStepOneCheckRequest(); + ResultEntity result = controller.checkNewProductSurveyStepOne(answer, authenticatedStudentRequest()); + + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals(grade, result.getBody().getData()); + verify(service).check(any(NewProductSurveyStepOneCheckRequest.class), any(JwtUser.class)); + } + + private HttpServletRequest authenticatedStudentRequest() { + JwtUser user = new JwtUser(); + user.setUserId("stu-1"); + user.setRoleId(4); + String token = TokenProvider.createToken(user); + HttpServletRequest request = mock(HttpServletRequest.class); + when(request.getUserPrincipal()).thenReturn(new UsernamePasswordAuthenticationToken("student", null)); + when(request.getHeader(Constant.AUTHORIZATION)).thenReturn("Bearer " + token); + return request; + } +}