diff --git a/api/pom.xml b/api/pom.xml index 6b20823a..5a9f2cd8 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -6,7 +6,7 @@ ca.bc.gov.educ educ-grad-graduation-report-api - 1.8.45 + 1.8.46 educ-grad-graduation-report-api Grad Graduation Report API for GRAD team diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/config/RestWebClient.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/config/RestWebClient.java index 1976c304..1181b393 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/config/RestWebClient.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/config/RestWebClient.java @@ -37,7 +37,7 @@ public WebClient webClient() { return WebClient.builder().uriBuilderFactory(defaultUriBuilderFactory).exchangeStrategies(ExchangeStrategies.builder() .codecs(configurer -> configurer .defaultCodecs() - .maxInMemorySize(300 * 1024 * 1024)) // 100 MB + .maxInMemorySize(300 * 1024 * 1024)) // 300 MB .build()) .build(); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 466ae874..851a24ac 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Objects; import java.util.UUID; @CrossOrigin @@ -271,13 +272,26 @@ public ResponseEntity updateStudentCredentialPosting(@RequestParam Stri @PostMapping(EducGradReportApiConstants.USER_REQUEST_DIS_RUN) @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_CERTIFICATES) - @Operation(summary = "Read All Student Transcripts/Certificates for User Req Distribution", description = "Read All Student Transcripts for Distribution", tags = { "Certificates" }) + @Operation(summary = "Read All Student Transcripts/Certificates for User Req Distribution", description = "Read All Student Credentials for Distribution", tags = { "Certificates" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) public ResponseEntity> getStudentCredentialsForUserRequestDisRun( @PathVariable String credentialType, @RequestBody StudentSearchRequest studentSearchRequest, @RequestHeader(name="Authorization") String accessToken) { logger.debug("getStudentCredentialsForUserRequestDisRun : "); - return response.GET(commonService.getStudentCredentialsForUserRequestDisRun(credentialType,studentSearchRequest,accessToken.replace(BEARER, ""))); + return response.GET(commonService.getStudentCredentialsForUserRequestDisRun(credentialType,studentSearchRequest,false,accessToken.replace(BEARER, ""))); + } + + @PostMapping(EducGradReportApiConstants.USER_REQUEST_DIS_RUN_WITH_NULL_DISTRIBUTION_DATE) + @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_CERTIFICATES) + @Operation(summary = "Read All Student Transcripts/Certificates with Null Distribution Date for User Req Distribution", description = "Read All Student Credentials with Null Distribution Date for Distribution", tags = { "Certificates" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity> getStudentCredentialsForUserRequestDisRunWithNullDistributionDate( + @PathVariable String credentialType, @RequestBody StudentSearchRequest studentSearchRequest, + @RequestHeader(name="Authorization") String accessToken) { + logger.debug("getStudentCredentialsForUserRequestDisRunWithNullDistributionDate : "); + boolean isPenNumberSearch = studentSearchRequest.getPens()!= null && !studentSearchRequest.getPens().isEmpty() + && !studentSearchRequest.getPens().stream().filter(StringUtils::isNotBlank).toList().isEmpty(); + return response.GET(commonService.getStudentCredentialsForUserRequestDisRun(credentialType,studentSearchRequest,!isPenNumberSearch,accessToken.replace(BEARER, ""))); } @DeleteMapping(EducGradReportApiConstants.ARCH_ACHIEVEMENTS_BY_STUDENTID) @@ -303,9 +317,9 @@ public ResponseEntity> saveSchoolReport(@Request @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) @Operation(summary = "Read All School Reports by Mincode", description = "Read All School Reports by Mincode", tags = { "Reports" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity> getAllSchoolReportsList(@PathVariable String mincode,@RequestHeader(name="Authorization") String accessToken) { + public ResponseEntity> getAllSchoolReportsList(@PathVariable String mincode) { logger.debug("getAllSchoolReportsList : "); - return response.GET(commonService.getAllSchoolReportListByMincode(mincode, accessToken.replace(BEARER,""))); + return response.GET(commonService.getAllSchoolReportListByMincode(mincode)); } @GetMapping(EducGradReportApiConstants.SCHOOL_REPORTS_BY_REPORT_TYPE) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentCertificatesRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentCertificatesRepository.java index 9a4edaeb..84faae7a 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentCertificatesRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentCertificatesRepository.java @@ -34,4 +34,7 @@ public interface GradStudentCertificatesRepository extends JpaRepository findRecordsForUserRequest(List subList); + @Query("select new ca.bc.gov.educ.api.grad.report.model.dto.StudentCredentialDistribution(c.id,c.gradCertificateTypeCode,c.studentID,cert.paperType,c.documentStatusCode,c.distributionDate) from GradStudentCertificatesEntity c inner join GradCertificateTypesEntity cert on cert.code = c.gradCertificateTypeCode where c.studentID in (:subList) and c.distributionDate is null") + List findRecordsWithNullDistributionDateForUserRequest(List subList); + } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentTranscriptsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentTranscriptsRepository.java index cf3d543a..e4bfffc4 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentTranscriptsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentTranscriptsRepository.java @@ -43,6 +43,12 @@ public interface GradStudentTranscriptsRepository extends JpaRepository findRecordsForUserRequestByStudentIdOnly(List subList); + @Query("select new ca.bc.gov.educ.api.grad.report.model.dto.StudentCredentialDistribution(c.id,c.transcriptTypeCode,c.studentID,tran.paperType,c.documentStatusCode,c.distributionDate) from GradStudentTranscriptsEntity c inner join TranscriptTypesEntity tran on tran.code = c.transcriptTypeCode where c.studentID in (:subList) and c.documentStatusCode='COMPL' and c.distributionDate is null") + List findRecordsWithNullDistributionDateForUserRequest(List subList); + + @Query("select new ca.bc.gov.educ.api.grad.report.model.dto.StudentCredentialDistribution(c.id,c.transcriptTypeCode,c.studentID,tran.paperType,c.documentStatusCode,c.distributionDate) from GradStudentTranscriptsEntity c inner join TranscriptTypesEntity tran on tran.code = c.transcriptTypeCode where c.studentID in (:subList) and c.distributionDate is null") + List findRecordsWithNullDistributionDateForUserRequestByStudentIdOnly(List subList); + @Query("select new ca.bc.gov.educ.api.grad.report.model.dto.SchoolStudentCredentialDistribution(c.id,c.transcriptTypeCode,c.studentID,c.documentStatusCode) from GradStudentTranscriptsEntity c where c.transcriptUpdateDate is null or c.transcriptUpdateDate < c.updateDate") List findByTranscriptUpdateDate(); diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 948c12a6..fc40181b 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -6,6 +6,7 @@ import ca.bc.gov.educ.api.grad.report.model.transformer.*; import ca.bc.gov.educ.api.grad.report.repository.*; import ca.bc.gov.educ.api.grad.report.util.EducGradReportApiConstants; +import ca.bc.gov.educ.api.grad.report.util.Generated; import ca.bc.gov.educ.api.grad.report.util.ThreadLocalStateUtil; import jakarta.transaction.Transactional; import org.apache.commons.codec.binary.Base64; @@ -332,7 +333,7 @@ public List getAllStudentReportList(UUID studentID) { return reportList; } - public List getAllSchoolReportListByMincode(String mincode, String accessToken) { + public List getAllSchoolReportListByMincode(String mincode) { List reportList = new ArrayList<>(); if (StringUtils.isNotBlank(mincode)) { if (StringUtils.contains(mincode, "*")) { @@ -357,6 +358,7 @@ public List getAllSchoolReportListByReportType(String reportType, return reportList; } + @Generated private void populateSchoolRepors(List reportList) { reportList.forEach(rep -> { String accessToken = fetchAccessToken(); @@ -503,7 +505,7 @@ public boolean updateStudentCredentialPosting(UUID studentID, String credentialT return false; } - public List getStudentCredentialsForUserRequestDisRun(String credentialType, StudentSearchRequest studentSearchRequest, String accessToken) { + public List getStudentCredentialsForUserRequestDisRun(String credentialType, StudentSearchRequest studentSearchRequest, boolean onlyWithNullDistributionDate, String accessToken) { List scdList = new ArrayList<>(); List studentIDs = studentSearchRequest.getStudentIDs(); if(studentIDs == null || studentIDs.isEmpty()) { @@ -516,30 +518,36 @@ public List getStudentCredentialsForUserRequestDi partitions.add(studentIDs.subList(i, Math.min(i + partitionSize, studentIDs.size()))); } if (credentialType.equalsIgnoreCase("OC") || credentialType.equalsIgnoreCase("RC")) { - processCertificate(partitions, scdList); + processCertificate(partitions, scdList, onlyWithNullDistributionDate); } else if (credentialType.equalsIgnoreCase("OT") || credentialType.equalsIgnoreCase("RT")) { - processTranscript(partitions, studentSearchRequest, scdList); + processTranscript(partitions, studentSearchRequest, scdList, onlyWithNullDistributionDate); } } return scdList; } - private void processCertificate(List> partitions, List scdList) { + private void processCertificate(List> partitions, List scdList, boolean onlyWithNullDistributionDate) { for (List subList : partitions) { - List scdSubList = gradStudentCertificatesRepository.findRecordsForUserRequest(subList); + List scdSubList = onlyWithNullDistributionDate? + gradStudentCertificatesRepository.findRecordsWithNullDistributionDateForUserRequest(subList) : + gradStudentCertificatesRepository.findRecordsForUserRequest(subList); if (!scdSubList.isEmpty()) { scdList.addAll(scdSubList); } } } - private void processTranscript(List> partitions, StudentSearchRequest studentSearchRequest, List scdList) { + private void processTranscript(List> partitions, StudentSearchRequest studentSearchRequest, List scdList, boolean onlyWithNullDistributionDate) { for (List subList : partitions) { List scdSubList; if (!studentSearchRequest.getPens().isEmpty()) { - scdSubList = gradStudentTranscriptsRepository.findRecordsForUserRequestByStudentIdOnly(subList); + scdSubList = onlyWithNullDistributionDate? + gradStudentTranscriptsRepository.findRecordsWithNullDistributionDateForUserRequestByStudentIdOnly(subList) + : gradStudentTranscriptsRepository.findRecordsForUserRequestByStudentIdOnly(subList); } else { - scdSubList = gradStudentTranscriptsRepository.findRecordsForUserRequest(subList); + scdSubList = onlyWithNullDistributionDate? + gradStudentTranscriptsRepository.findRecordsWithNullDistributionDateForUserRequest(subList) + : gradStudentTranscriptsRepository.findRecordsForUserRequest(subList); } if (!scdSubList.isEmpty()) { scdList.addAll(scdSubList); @@ -606,6 +614,7 @@ public boolean deleteSchoolReports(String minCode, String reportTypeCode) { return false; } + @Generated private School getSchool(String minCode, String accessToken) { try { return webClient.get() @@ -623,6 +632,7 @@ private School getSchool(String minCode, String accessToken) { } } + @Generated private District getDistrict(String districtCode, String accessToken) { try { return webClient.get() @@ -696,6 +706,7 @@ public List getSchoolReportGradStudentData() { return processReportGradStudentDataList(students, new ArrayList<>()); } + @Generated private List processReportGradStudentDataList(Page students, List schools) { List result = new ArrayList<>(); long startTime = System.currentTimeMillis(); @@ -719,6 +730,7 @@ private List processReportGradStudentDataList(Page getNextPageStudentsFromGradStudentApi(Page students, List schools) { List result = new ArrayList<>(); List studentGuidsInBatch = students.getContent().stream().map(SchoolReportEntity::getGraduationStudentRecordId).distinct().toList(); @@ -726,11 +738,13 @@ private synchronized List getNextPageStudentsFromGradStud if(studentsInBatch != null && !schools.isEmpty()) { boolean isDistrictSchool = schools.get(0).length() == 3; if(isDistrictSchool) { - studentsInBatch.removeIf(st -> (!schools.contains(StringUtils.substring(st.getMincode(), 0, 3)))); + studentsInBatch.removeIf(st -> (schools != null && !schools.isEmpty() && (StringUtils.isBlank(st.getMincodeAtGrad()) || StringUtils.equals(st.getMincode(), st.getMincodeAtGrad())) && !schools.contains(StringUtils.substring(st.getMincode(), 0, 3)))); + studentsInBatch.removeIf(st -> (schools != null && !schools.isEmpty() && (StringUtils.isNotBlank(st.getMincodeAtGrad()) && !StringUtils.equals(st.getMincode(), st.getMincodeAtGrad())) && !schools.contains(StringUtils.substring(st.getMincodeAtGrad(), 0, 3)))); } boolean isSchoolSchool = schools.get(0).length() > 3; if(isSchoolSchool) { - studentsInBatch.removeIf(st -> (!schools.contains(StringUtils.trimToEmpty(st.getMincode())))); + studentsInBatch.removeIf(st -> (schools != null && !schools.isEmpty() && (StringUtils.isBlank(st.getMincodeAtGrad()) || StringUtils.equals(st.getMincode(), st.getMincodeAtGrad())) && !schools.contains(StringUtils.trimToEmpty(st.getMincode())))); + studentsInBatch.removeIf(st -> (schools != null && !schools.isEmpty() && (StringUtils.isNotBlank(st.getMincodeAtGrad()) && !StringUtils.equals(st.getMincode(), st.getMincodeAtGrad())) && !schools.contains(StringUtils.trimToEmpty(st.getMincodeAtGrad())))); } } for(SchoolReportEntity e: students.getContent()) { @@ -745,12 +759,18 @@ private synchronized List getNextPageStudentsFromGradStud } else { dataResult.setCertificateTypeCode(certificateTypeCode); } - result.add(dataResult); + if("YED4".equalsIgnoreCase(paperType) && "CUR".equalsIgnoreCase(s.getStudentStatus())) { + result.add(dataResult); + } + if (!"YED4".equalsIgnoreCase(paperType)) { + result.add(dataResult); + } } } return result; } + @Generated private synchronized ReportGradStudentData getReportGradStudentDataByGraduationStudentRecordIdFromList(UUID id, List studentsInBatch) { for(ReportGradStudentData s: studentsInBatch) { if(s.getGraduationStudentRecordId().equals(id)) { @@ -760,6 +780,7 @@ private synchronized ReportGradStudentData getReportGradStudentDataByGraduationS return null; } + @Generated private synchronized List getReportGradStudentData(String accessToken, List studentGuids) { final ParameterizedTypeReference> responseType = new ParameterizedTypeReference<>() { }; diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java index 9d0d6e47..468d4237 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java @@ -66,6 +66,7 @@ private EducGradReportApiConstants(){} public static final String STUDENT_TRANSCRIPT_BY_DIST_DATE_N_STATUS_YEARLY = "/gettranscriptsfordistributionyearly"; public static final String USER_REQUEST_DIS_RUN = "/userrequest/{credentialType}"; + public static final String USER_REQUEST_DIS_RUN_WITH_NULL_DISTRIBUTION_DATE = "/userrequest/notyetdistributed/{credentialType}"; public static final String GET_STUDENT_CERTIFICATE_BY_CERTIFICATE_CODE_MAPPING = "/certificate/{certificateTypeCode}"; public static final String GET_STUDENT_REPORT_BY_REPORT_CODE_MAPPING = "/report/{reportTypeCode}"; diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/Generated.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/Generated.java new file mode 100644 index 00000000..0ab0eabe --- /dev/null +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/Generated.java @@ -0,0 +1,14 @@ +package ca.bc.gov.educ.api.grad.report.util; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Documented +@Retention(RUNTIME) +@Target({TYPE, METHOD, CONSTRUCTOR}) +public @interface Generated { +} diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index 010ec70a..c98cc1ea 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -413,9 +413,9 @@ public void testGetAllSchoolReportList() { studentCertificate2.setReportTypeCode(gradCertificateType.getCode()); gradStudentReportList.add(studentCertificate2); - Mockito.when(commonService.getAllSchoolReportListByMincode(mincode,"accessToken")).thenReturn(gradStudentReportList); - commonController.getAllSchoolReportsList(mincode,"accessToken"); - Mockito.verify(commonService).getAllSchoolReportListByMincode(mincode,"accessToken"); + Mockito.when(commonService.getAllSchoolReportListByMincode(mincode)).thenReturn(gradStudentReportList); + commonController.getAllSchoolReportsList(mincode); + Mockito.verify(commonService).getAllSchoolReportListByMincode(mincode); Mockito.when(commonService.getAllSchoolReportListByReportType(gradCertificateType.getCode(), mincode)).thenReturn(gradStudentReportList); commonController.getSchoolReportsListByReportType(gradCertificateType.getCode(), mincode, "accessToken"); @@ -479,11 +479,30 @@ public void testGetAllStudentCredentialDistributionList() { final StudentCredentialDistribution cred = new StudentCredentialDistribution(UUID.randomUUID(),"BC2018-IND",studentID,"YED4","COMPL", new Date()); list.add(cred); - Mockito.when(commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,"accessToken")).thenReturn(list); + Mockito.when(commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,false,"accessToken")).thenReturn(list); commonController.getStudentCredentialsForUserRequestDisRun(credentialType,req,"accessToken"); - Mockito.verify(commonService).getStudentCredentialsForUserRequestDisRun(credentialType,req,"accessToken"); + Mockito.verify(commonService).getStudentCredentialsForUserRequestDisRun(credentialType,req,false,"accessToken"); } + @Test + public void testGetAllStudentCredentialDistributionListWithNullDistributionDate() { + // UUID + final UUID studentID = UUID.randomUUID(); + final String credentialType = "E"; + final StudentSearchRequest req = new StudentSearchRequest(); + req.setDistricts(List.of("005")); + + // Student Certificate Types + final List list = new ArrayList<>(); + final StudentCredentialDistribution cred = new StudentCredentialDistribution(UUID.randomUUID(),"BC2018-IND",studentID,"YED4","COMPL", new Date()); + list.add(cred); + + Mockito.when(commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,true,"accessToken")).thenReturn(list); + commonController.getStudentCredentialsForUserRequestDisRunWithNullDistributionDate(credentialType,req,"accessToken"); + Mockito.verify(commonService).getStudentCredentialsForUserRequestDisRun(credentialType,req,true,"accessToken"); + } + + @Test public void testGetAllStudentTranscriptDistributionYearlyList() { // Student Certificate Types diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 0ec1244a..467aedd1 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -904,7 +904,41 @@ public void testGetStudentCredentialsForUserRequestDisRun_OC() { Mockito.when(gradStudentCertificatesRepository.findRecordsForUserRequest(studentList)).thenReturn(scdSubList); - List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,new StudentSearchRequest(),null); + List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,new StudentSearchRequest(),false,null); + assertThat(result).isNotEmpty(); + + } + + @Test + public void testGetStudentCredentialsForUserRequestDisRun_OC_with_Null_DistributionDate() { + + String credentialType = "OC"; + GraduationStudentRecordSearchResult res = new GraduationStudentRecordSearchResult(); + + List studList= new ArrayList<>(); + GraduationStudentRecord rec = new GraduationStudentRecord(); + rec.setLegalFirstName("asda"); + rec.setStudentID(new UUID(1,1)); + studList.add(rec.getStudentID()); + res.setStudentIDs(studList); + + List scdSubList = new ArrayList<>(); + StudentCredentialDistribution scdSub = new StudentCredentialDistribution(new UUID(4,4),"E",new UUID(5,5),"YED4","COMPL", new Date()); + scdSubList.add(scdSub); + + List studentList = new ArrayList<>(); + studentList.add(new UUID(1,1)); + + when(this.webClient.post()).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.uri(constants.getGradStudentApiStudentForSpcGradListUrl())).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.headers(any(Consumer.class))).thenReturn(this.requestBodyMock); + when(this.requestBodyMock.body(any(BodyInserter.class))).thenReturn(this.requestHeadersMock); + when(this.requestHeadersMock.retrieve()).thenReturn(this.responseMock); + when(this.responseMock.bodyToMono(GraduationStudentRecordSearchResult.class)).thenReturn(Mono.just(res)); + + Mockito.when(gradStudentCertificatesRepository.findRecordsWithNullDistributionDateForUserRequest(studentList)).thenReturn(scdSubList); + + List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,new StudentSearchRequest(),true,null); assertThat(result).isNotEmpty(); } @@ -973,7 +1007,46 @@ public void testGetStudentCredentialsForUserRequestDisRun_OT() { Mockito.when(gradStudentTranscriptsRepository.findRecordsForUserRequestByStudentIdOnly(studentList)).thenReturn(scdSubList); - List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,null); + List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,false,null); + assertThat(result.size()).isEqualTo(1); + + } + + @Test + public void testGetStudentCredentialsWithNullDistributionDateForUserRequestDisRun_OT() { + + String credentialType = "OT"; + GraduationStudentRecordSearchResult res = new GraduationStudentRecordSearchResult(); + + List studList= new ArrayList<>(); + GraduationStudentRecord rec = new GraduationStudentRecord(); + rec.setLegalFirstName("asda"); + rec.setStudentID(new UUID(1,1)); + studList.add(rec.getStudentID()); + res.setStudentIDs(studList); + + List scdSubList = new ArrayList<>(); + StudentCredentialDistribution scdSub = new StudentCredentialDistribution(new UUID(4,4),"E",new UUID(5,5),"YED4","COMPL", new Date()); + scdSubList.add(scdSub); + + List studentList = new ArrayList<>(); + studentList.add(new UUID(1,1)); + + StudentSearchRequest req = new StudentSearchRequest(); + List penList = new ArrayList<>(); + penList.add("13123111"); + req.setPens(penList); + + when(this.webClient.post()).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.uri(constants.getGradStudentApiStudentForSpcGradListUrl())).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.headers(any(Consumer.class))).thenReturn(this.requestBodyMock); + when(this.requestBodyMock.body(any(BodyInserter.class))).thenReturn(this.requestHeadersMock); + when(this.requestHeadersMock.retrieve()).thenReturn(this.responseMock); + when(this.responseMock.bodyToMono(GraduationStudentRecordSearchResult.class)).thenReturn(Mono.just(res)); + + Mockito.when(gradStudentTranscriptsRepository.findRecordsWithNullDistributionDateForUserRequestByStudentIdOnly(studentList)).thenReturn(scdSubList); + + List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,true,null); assertThat(result.size()).isEqualTo(1); } @@ -1013,7 +1086,47 @@ public void testGetStudentCredentialsForUserRequestDisRun_OT_Prgm() { Mockito.when(gradStudentTranscriptsRepository.findRecordsForUserRequest(studentList)).thenReturn(scdSubList); - List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,null); + List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,false,null); + assertThat(result.size()).isEqualTo(1); + + } + + @Test + public void testGetStudentCredentialsWithNullDistributionDateForUserRequestDisRun_OT_Prgm() { + + String credentialType = "OT"; + GraduationStudentRecordSearchResult res = new GraduationStudentRecordSearchResult(); + + List studList= new ArrayList<>(); + GraduationStudentRecord rec = new GraduationStudentRecord(); + rec.setLegalFirstName("asda"); + rec.setStudentID(new UUID(1,1)); + studList.add(rec.getStudentID()); + res.setStudentIDs(studList); + + List scdSubList = new ArrayList<>(); + StudentCredentialDistribution scdSub = new StudentCredentialDistribution(new UUID(4,4),"E",new UUID(5,5),"YED4","COMPL", new Date()); + scdSubList.add(scdSub); + + List studentList = new ArrayList<>(); + studentList.add(new UUID(1,1)); + + StudentSearchRequest req = new StudentSearchRequest(); + List pgList = new ArrayList<>(); + pgList.add("2018-EN"); + req.setPrograms(pgList); + req.setPens(new ArrayList<>()); + + when(this.webClient.post()).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.uri(constants.getGradStudentApiStudentForSpcGradListUrl())).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.headers(any(Consumer.class))).thenReturn(this.requestBodyMock); + when(this.requestBodyMock.body(any(BodyInserter.class))).thenReturn(this.requestHeadersMock); + when(this.requestHeadersMock.retrieve()).thenReturn(this.responseMock); + when(this.responseMock.bodyToMono(GraduationStudentRecordSearchResult.class)).thenReturn(Mono.just(res)); + + Mockito.when(gradStudentTranscriptsRepository.findRecordsWithNullDistributionDateForUserRequest(studentList)).thenReturn(scdSubList); + + List result = commonService.getStudentCredentialsForUserRequestDisRun(credentialType,req,true,null); assertThat(result.size()).isEqualTo(1); } @@ -1187,7 +1300,7 @@ public void testGetAllSchoolReportList() { when(schoolReportsLightRepository.findByReportTypeCodeAndSchoolOfRecord(gradReportTypes.getCode(), "")).thenReturn(schoolReportsLightEntityList); when(gradReportTypesRepository.findById(gradReportTypes.getCode())).thenReturn(Optional.of(gradReportTypesEntity)); - var result = commonService.getAllSchoolReportListByMincode(mincode,"accessToken"); + var result = commonService.getAllSchoolReportListByMincode(mincode); assertThat(result).isNotNull().hasSize(2); assertThat(result.get(0).getSchoolOfRecord()).isEqualTo(mincode2); @@ -1262,7 +1375,7 @@ public void testGetAllSchoolReportList_withoutwildcard() { when(schoolReportsRepository.findBySchoolOfRecordOrderBySchoolOfRecord("12345631231")).thenReturn(schoolReportsEntityList); when(gradReportTypesRepository.findById(gradReportTypes.getCode())).thenReturn(Optional.of(gradReportTypesEntity)); - var result = commonService.getAllSchoolReportListByMincode(mincode,"accessToken"); + var result = commonService.getAllSchoolReportListByMincode(mincode); assertThat(result).isNotNull().hasSize(2); assertThat(result.get(0).getSchoolOfRecord()).isEqualTo(mincode2); @@ -1469,6 +1582,8 @@ public void testGetSchoolReportGradStudentData() { ReportGradStudentData reportGradStudentData = new ReportGradStudentData(); reportGradStudentData.setGraduationStudentRecordId(studentId); reportGradStudentData.setTranscriptTypeCode("BC2018-IND"); + reportGradStudentData.setMincode("12345678"); + reportGradStudentData.setStudentStatus("CUR"); GradCertificateTypes certificateTypes = new GradCertificateTypes(); certificateTypes.setCode("E"); @@ -1479,12 +1594,16 @@ public void testGetSchoolReportGradStudentData() { reportGradStudentData = new ReportGradStudentData(); reportGradStudentData.setGraduationStudentRecordId(studentId); + reportGradStudentData.setStudentStatus("CUR"); reportGradStudentDataList.add(reportGradStudentData); reportGradStudentData = new ReportGradStudentData(); reportGradStudentData.setGraduationStudentRecordId(studentId); reportGradStudentData.setTranscriptTypeCode("BC2004-IND"); + reportGradStudentData.setMincode("12345678"); + reportGradStudentData.setMincodeAtGrad("09876543"); + reportGradStudentData.setStudentStatus("CUR"); reportGradStudentDataList.add(reportGradStudentData); @@ -1673,6 +1792,227 @@ public Page map(Function converter) { assertThat(result).isNotEmpty(); } + @Test + @SneakyThrows + public void testGetSchoolReportGradStudentDataForSchools() { + UUID studentId = UUID.randomUUID(); + + String mincode = "12345678"; + + List reportGradStudentDataList = new ArrayList<>(); + ReportGradStudentData reportGradStudentData = new ReportGradStudentData(); + reportGradStudentData.setGraduationStudentRecordId(studentId); + reportGradStudentData.setTranscriptTypeCode("BC2018-IND"); + reportGradStudentData.setMincode(mincode); + reportGradStudentData.setStudentStatus("CUR"); + + GradCertificateTypes certificateTypes = new GradCertificateTypes(); + certificateTypes.setCode("E"); + certificateTypes.setDescription("Dogwood"); + reportGradStudentData.setCertificateTypes(List.of(certificateTypes)); + + reportGradStudentDataList.add(reportGradStudentData); + + reportGradStudentData = new ReportGradStudentData(); + reportGradStudentData.setGraduationStudentRecordId(studentId); + reportGradStudentData.setStudentStatus("CUR"); + + reportGradStudentDataList.add(reportGradStudentData); + + reportGradStudentData = new ReportGradStudentData(); + reportGradStudentData.setGraduationStudentRecordId(studentId); + reportGradStudentData.setTranscriptTypeCode("BC2004-IND"); + reportGradStudentData.setMincode(mincode); + reportGradStudentData.setMincodeAtGrad("09876543"); + reportGradStudentData.setStudentStatus("CUR"); + + reportGradStudentDataList.add(reportGradStudentData); + + SchoolReportEntity schoolReportEntity = new SchoolReportEntity(); + schoolReportEntity.setSchoolReportEntityId(new SchoolReportEntityId(studentId, "EBDR", "E")); + + when(schoolReportYearEndRepository.findStudentForSchoolYearEndReport(PageRequest.of(0, PAGE_SIZE))).thenReturn(new Page() { + + @Override + public Iterator iterator() { + return getContent().listIterator(); + } + + @Override + public int getNumber() { + return 1; + } + + @Override + public int getSize() { + return 1; + } + + @Override + public int getNumberOfElements() { + return 1; + } + + @Override + public List getContent() { + return List.of(schoolReportEntity); + } + + @Override + public boolean hasContent() { + return !getContent().isEmpty(); + } + + @Override + public Sort getSort() { + return null; + } + + @Override + public boolean isFirst() { + return false; + } + + @Override + public boolean isLast() { + return false; + } + + @Override + public boolean hasNext() { + return false; + } + + @Override + public boolean hasPrevious() { + return false; + } + + @Override + public Pageable nextPageable() { + return null; + } + + @Override + public Pageable previousPageable() { + return null; + } + + @Override + public int getTotalPages() { + return getContent().size(); + } + + @Override + public long getTotalElements() { + return getContent().size(); + } + + @Override + public Page map(Function converter) { + return null; + } + }); + + when(schoolReportMonthlyRepository.findStudentForSchoolReport(PageRequest.of(0, PAGE_SIZE))).thenReturn(new Page() { + + @Override + public Iterator iterator() { + return getContent().listIterator(); + } + + @Override + public int getNumber() { + return 1; + } + + @Override + public int getSize() { + return 1; + } + + @Override + public int getNumberOfElements() { + return 1; + } + + @Override + public List getContent() { + return List.of(schoolReportEntity); + } + + @Override + public boolean hasContent() { + return !getContent().isEmpty(); + } + + @Override + public Sort getSort() { + return null; + } + + @Override + public boolean isFirst() { + return false; + } + + @Override + public boolean isLast() { + return false; + } + + @Override + public boolean hasNext() { + return false; + } + + @Override + public boolean hasPrevious() { + return false; + } + + @Override + public Pageable nextPageable() { + return null; + } + + @Override + public Pageable previousPageable() { + return null; + } + + @Override + public int getTotalPages() { + return getContent().size(); + } + + @Override + public long getTotalElements() { + return getContent().size(); + } + + @Override + public Page map(Function converter) { + return null; + } + }); + + when(this.webClient.post()).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.uri(constants.getStudentsForSchoolDistribution())).thenReturn(this.requestBodyUriMock); + when(this.requestBodyUriMock.headers(any(Consumer.class))).thenReturn(this.requestBodyMock); + when(this.requestBodyMock.body(any(BodyInserter.class))).thenReturn(this.requestHeadersMock); + when(this.requestHeadersMock.retrieve()).thenReturn(this.responseMock); + when(this.responseMock.bodyToMono(new ParameterizedTypeReference>() {})).thenReturn(Mono.just(reportGradStudentDataList)); + + mockAccessToken(); + + var result = commonService.getSchoolYearEndReportGradStudentData(List.of(mincode)); + assertThat(result).isNotEmpty(); + + result = commonService.getSchoolReportGradStudentData(); + assertThat(result).isNotEmpty(); + } + private void mockAccessToken() { final TokenResponse tokenObject = new TokenResponse(); tokenObject.setAccess_token(MOCK_TOKEN);