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.BusinessFeasibilityStepThreeValidationRequest; 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.junit.jupiter.api.Assertions.assertTrue; 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 BusinessFeasibilityStepThreeServiceImplTest { @Test void validatesUploadedReportAfterFirstTwoSteps() { BusinessFeasibilityStepThreeValidationRequest request = request("/profile/upload/feasibility-report.docx", "feasibility-report.docx"); assertTrue(serviceWithFirstTwoSteps().validate(request, student()).isValid()); } @Test void rejectsUnsupportedReportAndMissingPrerequisite() { assertThrows(ServiceException.class, () -> serviceWithFirstTwoSteps().validate(request("/profile/upload/report.zip", "report.zip"), student())); BusinessFeasibilityStepThreeServiceImpl service = new BusinessFeasibilityStepThreeServiceImpl(); StudentTrainingAnswerService answers = mock(StudentTrainingAnswerService.class); when(answers.get(anyString(), any(), any(JwtUser.class))).thenReturn(new StudentTrainingAnswer()); ReflectionTestUtils.setField(service, "studentTrainingAnswerService", answers); assertThrows(ServiceException.class, () -> service.validate(request("/profile/upload/report.pdf", "report.pdf"), student())); } private BusinessFeasibilityStepThreeServiceImpl serviceWithFirstTwoSteps() { BusinessFeasibilityStepThreeServiceImpl service = new BusinessFeasibilityStepThreeServiceImpl(); StudentTrainingAnswerService answers = mock(StudentTrainingAnswerService.class); StudentTrainingAnswer answer = new StudentTrainingAnswer(); answer.setStep1Answer("{}"); answer.setStep2Answer("{}"); when(answers.get(anyString(), any(), any(JwtUser.class))).thenReturn(answer); ReflectionTestUtils.setField(service, "studentTrainingAnswerService", answers); return service; } private BusinessFeasibilityStepThreeValidationRequest request(String url, String name) { BusinessFeasibilityStepThreeValidationRequest request = new BusinessFeasibilityStepThreeValidationRequest(); request.setReportUrl(url); request.setReportName(name); return request; } private JwtUser student() { JwtUser user = new JwtUser(); user.setUserId("stu-1"); user.setRoleId(4); return user; } }