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.MarketOpportunitySelectionStepOneCheckRequest; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepOneCheckResult; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepTwoValidationRequest; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepTwoValidationResult; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepThreeValidationRequest; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepThreeValidationResult; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepFourValidationRequest; import com.sztzjy.linkCommerce.entity.dto.MarketOpportunitySelectionStepFourValidationResult; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationResult; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationResult; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationResult; import com.sztzjy.linkCommerce.entity.dto.ProductDevelopmentFactorsStepOneValidationRequest; import com.sztzjy.linkCommerce.entity.dto.ProductDevelopmentFactorsStepOneValidationResult; import com.sztzjy.linkCommerce.entity.dto.ProductDevelopmentFactorsStepTwoValidationRequest; import com.sztzjy.linkCommerce.entity.dto.ProductDevelopmentFactorsStepTwoValidationResult; import com.sztzjy.linkCommerce.entity.dto.ProductDevelopmentFactorsStepThreeValidationRequest; import com.sztzjy.linkCommerce.entity.dto.ProductDevelopmentFactorsStepThreeValidationResult; import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService; import com.sztzjy.linkCommerce.service.MarketOpportunitySelectionStepOneService; import com.sztzjy.linkCommerce.service.MarketOpportunitySelectionStepTwoService; import com.sztzjy.linkCommerce.service.MarketOpportunitySelectionStepThreeService; import com.sztzjy.linkCommerce.service.MarketOpportunitySelectionStepFourService; import com.sztzjy.linkCommerce.service.NewProductSurveyStepTwoService; import com.sztzjy.linkCommerce.service.NewProductSurveyStepThreeService; import com.sztzjy.linkCommerce.service.NewProductSurveyStepFourService; import com.sztzjy.linkCommerce.service.ProductDevelopmentFactorsStepOneService; import com.sztzjy.linkCommerce.service.ProductDevelopmentFactorsStepTwoService; import com.sztzjy.linkCommerce.service.ProductDevelopmentFactorsStepThreeService; 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 checkMarketOpportunitySelectionStepOneUsesTheAuthenticatedStudentAndReturnsTheGrade() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); MarketOpportunitySelectionStepOneService service = mock(MarketOpportunitySelectionStepOneService.class); ReflectionTestUtils.setField(controller, "marketOpportunitySelectionStepOneService", service); MarketOpportunitySelectionStepOneCheckResult grade = new MarketOpportunitySelectionStepOneCheckResult(); grade.setAllCorrect(true); when(service.check(any(MarketOpportunitySelectionStepOneCheckRequest.class), any(JwtUser.class))).thenReturn(grade); ResultEntity result = controller.checkMarketOpportunitySelectionStepOne(new MarketOpportunitySelectionStepOneCheckRequest(), authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(grade, result.getBody().getData()); verify(service).check(any(MarketOpportunitySelectionStepOneCheckRequest.class), any(JwtUser.class)); } @Test void validateMarketOpportunitySelectionStepTwoUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); MarketOpportunitySelectionStepTwoService service = mock(MarketOpportunitySelectionStepTwoService.class); ReflectionTestUtils.setField(controller, "marketOpportunitySelectionStepTwoService", service); MarketOpportunitySelectionStepTwoValidationResult validation = new MarketOpportunitySelectionStepTwoValidationResult(); validation.setValid(true); when(service.validate(any(MarketOpportunitySelectionStepTwoValidationRequest.class), any(JwtUser.class))).thenReturn(validation); ResultEntity result = controller.validateMarketOpportunitySelectionStepTwo(new MarketOpportunitySelectionStepTwoValidationRequest(), authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(MarketOpportunitySelectionStepTwoValidationRequest.class), any(JwtUser.class)); } @Test void validateMarketOpportunitySelectionStepThreeUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); MarketOpportunitySelectionStepThreeService service = mock(MarketOpportunitySelectionStepThreeService.class); ReflectionTestUtils.setField(controller, "marketOpportunitySelectionStepThreeService", service); MarketOpportunitySelectionStepThreeValidationResult validation = new MarketOpportunitySelectionStepThreeValidationResult(); validation.setValid(true); when(service.validate(any(MarketOpportunitySelectionStepThreeValidationRequest.class), any(JwtUser.class))).thenReturn(validation); ResultEntity result = controller.validateMarketOpportunitySelectionStepThree(new MarketOpportunitySelectionStepThreeValidationRequest(), authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(MarketOpportunitySelectionStepThreeValidationRequest.class), any(JwtUser.class)); } @Test void validateMarketOpportunitySelectionStepFourUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); MarketOpportunitySelectionStepFourService service = mock(MarketOpportunitySelectionStepFourService.class); ReflectionTestUtils.setField(controller, "marketOpportunitySelectionStepFourService", service); MarketOpportunitySelectionStepFourValidationResult validation = new MarketOpportunitySelectionStepFourValidationResult(); validation.setValid(true); when(service.validate(any(MarketOpportunitySelectionStepFourValidationRequest.class), any(JwtUser.class))).thenReturn(validation); ResultEntity result = controller.validateMarketOpportunitySelectionStepFour(new MarketOpportunitySelectionStepFourValidationRequest(), authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(MarketOpportunitySelectionStepFourValidationRequest.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)); } @Test void validateStepThreeUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); NewProductSurveyStepThreeService service = mock(NewProductSurveyStepThreeService.class); ReflectionTestUtils.setField(controller, "newProductSurveyStepThreeService", service); NewProductSurveyStepThreeValidationResult validation = new NewProductSurveyStepThreeValidationResult(); validation.setValid(true); when(service.validate(any(NewProductSurveyStepThreeValidationRequest.class), any(JwtUser.class))).thenReturn(validation); NewProductSurveyStepThreeValidationRequest answer = new NewProductSurveyStepThreeValidationRequest(); ResultEntity result = controller.validateNewProductSurveyStepThree(answer, authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(NewProductSurveyStepThreeValidationRequest.class), any(JwtUser.class)); } @Test void validateStepFourUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); NewProductSurveyStepFourService service = mock(NewProductSurveyStepFourService.class); ReflectionTestUtils.setField(controller, "newProductSurveyStepFourService", service); NewProductSurveyStepFourValidationResult validation = new NewProductSurveyStepFourValidationResult(); validation.setValid(true); when(service.validate(any(NewProductSurveyStepFourValidationRequest.class), any(JwtUser.class))).thenReturn(validation); NewProductSurveyStepFourValidationRequest answer = new NewProductSurveyStepFourValidationRequest(); ResultEntity result = controller.validateNewProductSurveyStepFour(answer, authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(NewProductSurveyStepFourValidationRequest.class), any(JwtUser.class)); } @Test void validateProductDevelopmentFactorsStepOneUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); ProductDevelopmentFactorsStepOneService service = mock(ProductDevelopmentFactorsStepOneService.class); ReflectionTestUtils.setField(controller, "productDevelopmentFactorsStepOneService", service); ProductDevelopmentFactorsStepOneValidationResult validation = new ProductDevelopmentFactorsStepOneValidationResult(); validation.setValid(true); when(service.validate(any(ProductDevelopmentFactorsStepOneValidationRequest.class), any(JwtUser.class))).thenReturn(validation); ProductDevelopmentFactorsStepOneValidationRequest answer = new ProductDevelopmentFactorsStepOneValidationRequest(); ResultEntity result = controller .validateProductDevelopmentFactorsStepOne(answer, authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(ProductDevelopmentFactorsStepOneValidationRequest.class), any(JwtUser.class)); } @Test void validateProductDevelopmentFactorsStepTwoUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); ProductDevelopmentFactorsStepTwoService service = mock(ProductDevelopmentFactorsStepTwoService.class); ReflectionTestUtils.setField(controller, "productDevelopmentFactorsStepTwoService", service); ProductDevelopmentFactorsStepTwoValidationResult validation = new ProductDevelopmentFactorsStepTwoValidationResult(); validation.setValid(true); when(service.validate(any(ProductDevelopmentFactorsStepTwoValidationRequest.class), any(JwtUser.class))).thenReturn(validation); ResultEntity result = controller.validateProductDevelopmentFactorsStepTwo(new ProductDevelopmentFactorsStepTwoValidationRequest(), authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(ProductDevelopmentFactorsStepTwoValidationRequest.class), any(JwtUser.class)); } @Test void validateProductDevelopmentFactorsStepThreeUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); ProductDevelopmentFactorsStepThreeService service = mock(ProductDevelopmentFactorsStepThreeService.class); ReflectionTestUtils.setField(controller, "productDevelopmentFactorsStepThreeService", service); ProductDevelopmentFactorsStepThreeValidationResult validation = new ProductDevelopmentFactorsStepThreeValidationResult(); validation.setValid(true); when(service.validate(any(ProductDevelopmentFactorsStepThreeValidationRequest.class), any(JwtUser.class))).thenReturn(validation); ResultEntity result = controller .validateProductDevelopmentFactorsStepThree(new ProductDevelopmentFactorsStepThreeValidationRequest(), authenticatedStudentRequest()); assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals(validation, result.getBody().getData()); verify(service).validate(any(ProductDevelopmentFactorsStepThreeValidationRequest.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; } }