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.entity.dto.NewProductSurveyStepTwoValidationRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationResult; import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService; import com.sztzjy.linkCommerce.service.NewProductSurveyStepTwoService; 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)); } @Test void validateStepTwoUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); NewProductSurveyStepTwoService service = mock(NewProductSurveyStepTwoService.class); ReflectionTestUtils.setField(controller, "newProductSurveyStepTwoService", service); NewProductSurveyStepTwoValidationResult validation = new NewProductSurveyStepTwoValidationResult(); validation.setValid(true); when(service.validate(any(NewProductSurveyStepTwoValidationRequest.class), any(JwtUser.class))).thenReturn(validation); NewProductSurveyStepTwoValidationRequest answer = new NewProductSurveyStepTwoValidationRequest(); ResultEntity result = controller.validateNewProductSurveyStepTwo(answer, authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(NewProductSurveyStepTwoValidationRequest.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; } }