diff --git a/api/pom.xml b/api/pom.xml index 9f431e35..6391bf15 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -6,7 +6,7 @@ ca.bc.gov.educ educ-grad-student-api - 1.8.56 + 1.8.57 educ-grad-student-api Student Demographics API for GRAD team diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusController.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusController.java index 2638e05c..69e94364 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusController.java @@ -387,10 +387,10 @@ public ResponseEntity> getStudentsForAmalgamatedSchoolReport(@PathVar @PreAuthorize(PermissionsConstants.UPDATE_GRADUATION_STUDENT) @Operation(summary = "Update Student Flag ready for batch by Batch Job Type and Student IDs", description = "Update Student Flag ready for batch by Batch Job Type and Student IDs", tags = { "Batch Algorithm" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity> updateStudentFlagReadyForBatchJobByStudentIDs(@PathVariable String batchJobType, @RequestBody StudentList sList) { + public ResponseEntity updateStudentFlagReadyForBatchJobByStudentIDs(@PathVariable String batchJobType, @RequestBody StudentList sList) { logger.debug("Update Student Flag ready for batch by Student IDs and Batch Job Type - {}", batchJobType); - List gradRecords = gradStatusService.updateStudentFlagReadyForBatchJobByStudentIDs(batchJobType, sList.getStudentids()); - return response.GET(gradRecords); + gradStatusService.updateStudentFlagReadyForBatchJobByStudentIDs(batchJobType, sList.getStudentids()); + return response.GET("SUCCESS"); } @GetMapping (EducGradStudentApiConstants.GRAD_STUDENT_NON_GRAD_REASON_BY_PEN) diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/messaging/jetstream/FetchGradStatusSubscriber.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/messaging/jetstream/FetchGradStatusSubscriber.java index 07b0df3d..b82192f6 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/messaging/jetstream/FetchGradStatusSubscriber.java +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/messaging/jetstream/FetchGradStatusSubscriber.java @@ -5,8 +5,10 @@ import ca.bc.gov.educ.api.gradstudent.model.dc.Event; import ca.bc.gov.educ.api.gradstudent.model.dc.GradStatusPayload; import ca.bc.gov.educ.api.gradstudent.model.dto.GraduationStudentRecord; +import ca.bc.gov.educ.api.gradstudent.model.dto.messaging.GraduationStudentRecordGradStatus; import ca.bc.gov.educ.api.gradstudent.service.GraduationStatusService; import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiConstants; +import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiUtils; import ca.bc.gov.educ.api.gradstudent.util.JsonUtil; import com.fasterxml.jackson.core.JsonProcessingException; import io.nats.client.*; @@ -50,7 +52,7 @@ public void onMessage(Message message) { try { Event event = JsonUtil.getJsonObjectFromString(Event.class, eventString); UUID stdId = JsonUtil.getJsonObjectFromString(UUID.class, event.getEventPayload()); - GraduationStudentRecord graduationStatus = graduationStatusService.getGraduationStatus(stdId); + GraduationStudentRecordGradStatus graduationStatus = graduationStatusService.getGraduationStatusProjection(stdId); response = getResponse(graduationStatus); } catch (Exception e) { response = getErrorResponse(e); @@ -61,10 +63,12 @@ public void onMessage(Message message) { this.natsConnection.publish(message.getReplyTo(), response.getBytes()); } - private String getResponse(GraduationStudentRecord graduationStudentRecord) throws JsonProcessingException { + private String getResponse(GraduationStudentRecordGradStatus graduationStudentRecord) throws JsonProcessingException { GradStatusPayload gradStatusPayload = GradStatusPayload.builder() .program(graduationStudentRecord.getProgram()) - .programCompletionDate(graduationStudentRecord.getProgramCompletionDate()) + .programCompletionDate( + graduationStudentRecord.getProgramCompletionDate() != null ? + EducGradStudentApiUtils.formatDate(graduationStudentRecord.getProgramCompletionDate()) : null) .build(); return JsonUtil.getJsonStringFromObject(gradStatusPayload); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/dto/messaging/GraduationStudentRecordGradStatus.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/dto/messaging/GraduationStudentRecordGradStatus.java new file mode 100644 index 00000000..b2fcc0cc --- /dev/null +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/dto/messaging/GraduationStudentRecordGradStatus.java @@ -0,0 +1,19 @@ +package ca.bc.gov.educ.api.gradstudent.model.dto.messaging; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import java.util.UUID; + +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class GraduationStudentRecordGradStatus { + + private UUID studentID; + private String program; + private Date programCompletionDate; + +} diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/entity/GraduationStudentRecordView.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/entity/GraduationStudentRecordView.java new file mode 100644 index 00000000..8a7c834d --- /dev/null +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/entity/GraduationStudentRecordView.java @@ -0,0 +1,27 @@ +package ca.bc.gov.educ.api.gradstudent.model.entity; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.UUID; + +public interface GraduationStudentRecordView { + + public String getProgram(); + public Date getProgramCompletionDate(); + public String getGpa(); + public String getHonoursStanding(); + public String getRecalculateGradStatus(); + public String getSchoolOfRecord(); + public String getStudentGrade(); + public String getStudentStatus(); + public UUID getStudentID(); + public String getSchoolAtGrad(); + public String getRecalculateProjectedGrad(); + public Long getBatchId(); + public String getConsumerEducationRequirementMet(); + public String getStudentCitizenship(); + public Date getAdultStartDate(); + public String getStudentProjectedGradData() ; + public LocalDateTime getCreateDate(); + public LocalDateTime getUpdateDate(); +} \ No newline at end of file diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/transformer/GraduationStatusTransformer.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/transformer/GraduationStatusTransformer.java index a36d4d61..f59c1488 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/transformer/GraduationStatusTransformer.java +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/model/transformer/GraduationStatusTransformer.java @@ -1,15 +1,15 @@ package ca.bc.gov.educ.api.gradstudent.model.transformer; -import ca.bc.gov.educ.api.gradstudent.model.dto.GraduationData; -import ca.bc.gov.educ.api.gradstudent.model.dto.GraduationStudentRecord; -import ca.bc.gov.educ.api.gradstudent.model.dto.GraduationStudentRecordDistribution; -import ca.bc.gov.educ.api.gradstudent.model.dto.ProjectedRunClob; +import ca.bc.gov.educ.api.gradstudent.model.dto.*; import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordEntity; +import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordView; +import ca.bc.gov.educ.api.gradstudent.model.entity.ReportGradStudentDataEntity; +import ca.bc.gov.educ.api.gradstudent.repository.ReportGradStudentDataRepository; import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiUtils; import ca.bc.gov.educ.api.gradstudent.util.GradValidation; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; +import ca.bc.gov.educ.api.gradstudent.util.JsonTransformer; +import com.fasterxml.jackson.databind.type.TypeFactory; +import org.apache.commons.lang3.StringUtils; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +18,8 @@ import java.sql.Date; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; @Component @@ -33,6 +35,12 @@ public class GraduationStatusTransformer { @Autowired GradValidation validation; + @Autowired + JsonTransformer jsonTransformer; + + @Autowired + ReportGradStudentDataRepository reportGradStudentDataRepository; + public GraduationStudentRecord transformToDTOWithModifiedProgramCompletionDate(GraduationStudentRecordEntity gradStatusEntity) { GraduationStudentRecord gradStatus = modelMapper.map(gradStatusEntity, GraduationStudentRecord.class); gradStatus.setProgramCompletionDate(EducGradStudentApiUtils.parseDateFromString(gradStatusEntity.getProgramCompletionDate() != null ? @@ -107,12 +115,7 @@ public GraduationStudentRecordDistribution tToDForDistribution(GraduationStudent distObj.setStudentID(ent.getStudentID()); distObj.setStudentCitizenship(ent.getStudentCitizenship()); if(ent.getStudentGradData() != null) { - GraduationData existingData = null; - try { - existingData = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).readValue(ent.getStudentGradData(), GraduationData.class); - } catch (JsonProcessingException e) { - logger.error(JSON_PARSING_ERROR, e.getMessage()); - } + GraduationData existingData = (GraduationData)jsonTransformer.unmarshall(ent.getStudentGradData(), GraduationData.class); if(existingData != null) { distObj.setPen(existingData.getGradStudent().getPen()); distObj.setLegalFirstName(existingData.getGradStudent().getLegalFirstName()); @@ -125,14 +128,14 @@ public GraduationStudentRecordDistribution tToDForDistribution(GraduationStudent return distObj; } - public List tToDForBatch(Iterable gradStatusEntities) { + public List tToDForBatchView(List gradStatusEntities) { List gradStatusList = new ArrayList<>(); - for (GraduationStudentRecordEntity gradStatusEntity : gradStatusEntities) { + Map reportGradStudentDataMap = convertGraduationStudentRecordViewToReportGradStudentDataMap(gradStatusEntities); + for (GraduationStudentRecordView gradStatusEntity : gradStatusEntities) { GraduationStudentRecord gradStatus = modelMapper.map(gradStatusEntity, GraduationStudentRecord.class); - logger.debug("GraduationStudentRecordEntity {} with database program completion date {}", gradStatusEntity.getPen(), gradStatusEntity.getProgramCompletionDate()); gradStatus.setProgramCompletionDate(EducGradStudentApiUtils.formatDate(gradStatusEntity.getProgramCompletionDate(), "yyyy/MM")); + populatePenAndLegalNamesAndNonGradReasons(gradStatus, reportGradStudentDataMap); logger.debug("GraduationStudentRecord {} with trax program completion date {}", gradStatus.getPen(), gradStatus.getProgramCompletionDate()); - populatePenAndLegalNamesAndNonGradReasons(gradStatus); gradStatus.setStudentCitizenship(gradStatusEntity.getStudentCitizenship()); gradStatus.setStudentGradData(null); gradStatus.setCreateDate((gradStatusEntity.getCreateDate())); @@ -142,20 +145,17 @@ public List tToDForBatch(Iterable tToDForAmalgamation(Iterable gradStatusEntities, String type) { + public List tToDForAmalgamation(List gradStatusEntities, String type) { List results = new ArrayList<>(); - for (GraduationStudentRecordEntity gradStatusEntity : gradStatusEntities) { + Map reportGradStudentDataMap = convertGraduationStudentRecordViewToReportGradStudentDataMap(gradStatusEntities); + for (GraduationStudentRecordView gradStatusEntity : gradStatusEntities) { GraduationStudentRecord gradStatus = modelMapper.map(gradStatusEntity, GraduationStudentRecord.class); gradStatus.setProgramCompletionDate(EducGradStudentApiUtils.parseTraxDate(gradStatusEntity.getProgramCompletionDate() != null ? gradStatusEntity.getProgramCompletionDate().toString():null)); - populatePenAndLegalNamesAndNonGradReasons(gradStatus); + populatePenAndLegalNamesAndNonGradReasons(gradStatus, reportGradStudentDataMap); if(gradStatus.getStudentProjectedGradData() != null) { - try { - ProjectedRunClob existingData = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).readValue(gradStatus.getStudentProjectedGradData(), ProjectedRunClob.class); - if((!existingData.isGraduated() && type.equalsIgnoreCase("TVRNONGRAD")) || (existingData.isGraduated() && type.equalsIgnoreCase("TVRGRAD"))) { - results.add(gradStatus); - } - } catch (JsonProcessingException e) { - logger.error(JSON_PARSING_ERROR ,e.getMessage()); + ProjectedRunClob existingData = (ProjectedRunClob)jsonTransformer.unmarshall(gradStatus.getStudentProjectedGradData(), ProjectedRunClob.class); + if((!existingData.isGraduated() && type.equalsIgnoreCase("TVRNONGRAD")) || (existingData.isGraduated() && type.equalsIgnoreCase("TVRGRAD"))) { + results.add(gradStatus); } } @@ -171,20 +171,23 @@ public List tToDForAmalgamation(Iterable gr return results.stream().map(GraduationStudentRecord::getStudentID).toList(); } - private void populatePenAndLegalNamesAndNonGradReasons(GraduationStudentRecord gradStatus) { - if(gradStatus.getStudentGradData() != null) { - GraduationData existingData = null; - try { - existingData = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).readValue(gradStatus.getStudentGradData(), GraduationData.class); - } catch (JsonProcessingException e) { - logger.error(JSON_PARSING_ERROR, e.getMessage()); - } - if (existingData != null) { - gradStatus.setPen(existingData.getGradStudent().getPen()); - gradStatus.setLegalFirstName(existingData.getGradStudent().getLegalFirstName()); - gradStatus.setLegalMiddleNames(existingData.getGradStudent().getLegalMiddleNames()); - gradStatus.setLegalLastName(existingData.getGradStudent().getLegalLastName()); - gradStatus.setNonGradReasons(existingData.getNonGradReasons()); + private Map convertGraduationStudentRecordViewToReportGradStudentDataMap(List gradStatusEntities) { + List uuids = gradStatusEntities.stream().map(GraduationStudentRecordView::getStudentID).toList(); + List reportGradStudentData = reportGradStudentDataRepository.findReportGradStudentDataEntityByGraduationStudentRecordIdInOrderByMincodeAscSchoolNameAscLastNameAsc(uuids); + return reportGradStudentData.stream().collect(Collectors.toMap(ReportGradStudentDataEntity::getGraduationStudentRecordId, Function.identity())); + } + + private void populatePenAndLegalNamesAndNonGradReasons(GraduationStudentRecord gradStatus, Map reportGradStudentDataMap) { + ReportGradStudentDataEntity existingData = reportGradStudentDataMap.get(gradStatus.getStudentID()); + if (existingData != null) { + gradStatus.setPen(existingData.getPen()); + gradStatus.setLegalFirstName(existingData.getFirstName()); + gradStatus.setLegalMiddleNames(existingData.getMiddleName()); + gradStatus.setLegalLastName(existingData.getLastName()); + if (StringUtils.isNotBlank(existingData.getNonGradReasons())) { + TypeFactory typeFactory = jsonTransformer.getTypeFactory(); + List nonGradReasons = (List) jsonTransformer.unmarshall(existingData.getNonGradReasons(), typeFactory.constructCollectionType(List.class, GradRequirement.class)); + gradStatus.setNonGradReasons(nonGradReasons); } } } diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/repository/GraduationStudentRecordRepository.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/repository/GraduationStudentRecordRepository.java index 4cc26667..5d34fecd 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/repository/GraduationStudentRecordRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/repository/GraduationStudentRecordRepository.java @@ -2,6 +2,7 @@ import ca.bc.gov.educ.api.gradstudent.model.dto.BatchGraduationStudentRecord; import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordEntity; +import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordView; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -39,16 +40,14 @@ public interface GraduationStudentRecordRepository extends JpaRepository findStudentWithFilter(String gradProgram,String schoolOfRecord, Pageable paging); - List findByStudentIDIn(List studentIds); + List findByStudentIDIn(List studentIds); @Query("select c.studentID from GraduationStudentRecordEntity c where c.programCompletionDate is null and c.studentStatus='CUR' and (c.studentGrade='AD' or c.studentGrade='12')") Page findStudentsForYearlyDistribution(Pageable page); - @Query("select c from GraduationStudentRecordEntity c where c.schoolOfRecord=:schoolOfRecord and c.studentStatus='CUR'") - List findBySchoolOfRecord(String schoolOfRecord); + List findBySchoolOfRecordAndStudentStatus(String schoolOfRecord, String studentStatus); - @Query("select c from GraduationStudentRecordEntity c where c.schoolOfRecord=:schoolOfRecord and c.studentStatus='CUR' and (c.studentGrade='AD' or c.studentGrade='12')") - List findBySchoolOfRecordAmalgamated(String schoolOfRecord); + List findBySchoolOfRecordAndStudentStatusAndStudentGradeIn(String schoolOfRecord, String studentStatus, List studentGrade); // Data Conversion @Modifying @@ -91,4 +90,15 @@ void updateStudentGuidPenXrefRecord( @Modifying @Query( "update GraduationStudentRecordEntity e set e.recalculateProjectedGrad = 'Y' where e.studentStatus = 'CUR' and e.programCompletionDate is null and (e.studentGrade = '12' or e.studentGrade = 'AD')") void updateGradStudentRecalcFlagsForCurrentStudentsWithNullCompletion(); + + /** + * Find a GraduationStudentRecord By Student ID using generics. Pass an object with the + * same subset of field names, getters/setters of GraduationStudentRecordEntity to return + * objects with a subset of values. More info: https://docs.spring.io/spring-data/jpa/reference/repositories/projections.html + * @param studentId the student ID + * @param type The class type of the object you wish to use + * @return + * @param + */ + T findByStudentID(UUID studentId, Class type); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentService.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentService.java index 41179c08..9472a754 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentService.java @@ -2,6 +2,7 @@ import ca.bc.gov.educ.api.gradstudent.model.dto.*; import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordEntity; +import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordView; import ca.bc.gov.educ.api.gradstudent.model.transformer.GraduationStatusTransformer; import ca.bc.gov.educ.api.gradstudent.repository.GraduationStudentRecordRepository; import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiConstants; @@ -221,7 +222,7 @@ private List buildPartitions(List studentLists, Stri for (int i = 0; i < partitions.size(); i++) { List subList = partitions.get(i); logger.debug(" sub list length {} par {}", subList.size(), i); - List gradList = graduationStatusRepository.findByStudentIDIn(subList); + List gradList = graduationStatusRepository.findByStudentIDIn(subList); if (!gradList.isEmpty()) { gradList.forEach(st -> { GradSearchStudent gradStu = populateGradStudent(st, accessToken); @@ -273,9 +274,9 @@ private void getSearchCriteria(String value, String value2, String paramterType, if(StringUtils.isNotBlank(value) && StringUtils.isNotBlank(value2)) { criteria = SearchCriteria.builder().condition(Condition.AND).key(paramterType).operation(FilterOperation.BETWEEN).value(value + "," + value2).valueType(ValueType.DATE).build(); } - }else if (paramterType.equalsIgnoreCase("studentID")) { + } else if (paramterType.equalsIgnoreCase("studentID")) { criteria = SearchCriteria.builder().key(paramterType).operation(FilterOperation.IN).value(value).valueType(ValueType.UUID).condition(Condition.AND).build(); - }else { + } else { if(StringUtils.isNotBlank(value)) { if(StringUtils.contains(value,"*")) { criteria = SearchCriteria.builder().key(paramterType).operation(FilterOperation.STARTS_WITH_IGNORE_CASE).value(StringUtils.strip(value,"*")).valueType(ValueType.STRING).condition(Condition.AND).build(); @@ -290,21 +291,32 @@ private void getSearchCriteria(String value, String value2, String paramterType, private GradSearchStudent populateGradStudent(GraduationStudentRecordEntity gradRecord, String accessToken) { GradSearchStudent gradStu = new GradSearchStudent(); BeanUtils.copyProperties(gradRecord, gradStu); - Student studentPen = webClient.get().uri(String.format(constants.getPenStudentApiByStudentIdUrl(), gradRecord.getStudentID())) - .headers(h -> { - h.setBearerAuth(accessToken); - h.set(EducGradStudentApiConstants.CORRELATION_ID, ThreadLocalStateUtil.getCorrelationID()); - }) - .retrieve().bodyToMono(Student.class).block(); + return populateGradStudent(gradStu, accessToken); + } + + private GradSearchStudent populateGradStudent(GraduationStudentRecordView gradRecord, String accessToken) { + GradSearchStudent gradStu = new GradSearchStudent(); + BeanUtils.copyProperties(gradRecord, gradStu); + gradStu.setStudentID(gradRecord.getStudentID().toString()); + return populateGradStudent(gradStu, accessToken); + } + + private GradSearchStudent populateGradStudent(GradSearchStudent gradStu, String accessToken) { + Student studentPen = webClient.get().uri(String.format(constants.getPenStudentApiByStudentIdUrl(), gradStu.getStudentID())) + .headers(h -> { + h.setBearerAuth(accessToken); + h.set(EducGradStudentApiConstants.CORRELATION_ID, ThreadLocalStateUtil.getCorrelationID()); + }) + .retrieve().bodyToMono(Student.class).block(); if(studentPen != null) { BeanUtils.copyProperties(studentPen, gradStu); } School school = webClient.get().uri(String.format(constants.getSchoolByMincodeUrl(), gradStu.getSchoolOfRecord())) - .headers(h -> { - h.setBearerAuth(accessToken); - h.set(EducGradStudentApiConstants.CORRELATION_ID, ThreadLocalStateUtil.getCorrelationID()); - }) - .retrieve().bodyToMono(School.class).block(); + .headers(h -> { + h.setBearerAuth(accessToken); + h.set(EducGradStudentApiConstants.CORRELATION_ID, ThreadLocalStateUtil.getCorrelationID()); + }) + .retrieve().bodyToMono(School.class).block(); if (school != null) { gradStu.setSchoolOfRecordName(school.getSchoolName()); gradStu.setSchoolOfRecordindependentAffiliation(school.getIndependentAffiliation()); diff --git a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusService.java b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusService.java index ce14f480..20c51cc2 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusService.java @@ -5,6 +5,7 @@ import ca.bc.gov.educ.api.gradstudent.constant.Generated; import ca.bc.gov.educ.api.gradstudent.exception.EntityNotFoundException; import ca.bc.gov.educ.api.gradstudent.model.dto.*; +import ca.bc.gov.educ.api.gradstudent.model.dto.messaging.GraduationStudentRecordGradStatus; import ca.bc.gov.educ.api.gradstudent.model.entity.*; import ca.bc.gov.educ.api.gradstudent.model.transformer.GradStudentCareerProgramTransformer; import ca.bc.gov.educ.api.gradstudent.model.transformer.GradStudentOptionalProgramTransformer; @@ -167,6 +168,20 @@ public GraduationStudentRecord getGraduationStatus(UUID studentID) throws Entity throw new EntityNotFoundException(String.format("Student with ID: %s not found", studentID)); } + /** + * Returns a condensed version of GraduationStudentRecord without the CLOB etc + * @param studentID + * @return + * @throws EntityNotFoundException + */ + public GraduationStudentRecordGradStatus getGraduationStatusProjection(UUID studentID) throws EntityNotFoundException { + GraduationStudentRecordGradStatus response = graduationStatusRepository.findByStudentID(studentID, GraduationStudentRecordGradStatus.class); + if (response != null) { + return response; + } + throw new EntityNotFoundException(String.format("Student with ID: %s not found", studentID)); + } + @Transactional @Retry(name = "generalpostcall") public Pair saveGraduationStatus(UUID studentID, GraduationStudentRecord graduationStatus, Long batchId, String accessToken) throws JsonProcessingException { @@ -1250,7 +1265,7 @@ public GraduationStudentRecord saveStudentRecordProjectedTVRRun(UUID studentID, } public List getStudentDataByStudentIDs(List studentIds) { - return graduationStatusTransformer.tToDForBatch(graduationStatusRepository.findByStudentIDIn(studentIds)); + return graduationStatusTransformer.tToDForBatchView(graduationStatusRepository.findByStudentIDIn(studentIds)); } public List getStudentsForYearlyDistribution() { @@ -1349,32 +1364,30 @@ private GraduationStudentRecord processReceivedStudent(GraduationStudentRecord e } public List getStudentsForSchoolReport(String schoolOfRecord) { - return graduationStatusTransformer.tToDForBatch(graduationStatusRepository.findBySchoolOfRecord(schoolOfRecord)); + return graduationStatusTransformer.tToDForBatchView(graduationStatusRepository.findBySchoolOfRecordAndStudentStatus(schoolOfRecord, "CUR")); } public List getStudentsForAmalgamatedSchoolReport(String schoolOfRecord,String type) { - return graduationStatusTransformer.tToDForAmalgamation(graduationStatusRepository.findBySchoolOfRecordAmalgamated(schoolOfRecord),type); + return graduationStatusTransformer.tToDForAmalgamation(graduationStatusRepository.findBySchoolOfRecordAndStudentStatusAndStudentGradeIn(schoolOfRecord, "CUR", List.of("AD", "12")),type); } - public List updateStudentFlagReadyForBatchJobByStudentIDs(String batchJobType, List studentIDs) { + public void updateStudentFlagReadyForBatchJobByStudentIDs(String batchJobType, List studentIDs) { logger.debug("updateStudentFlagReadyForBatchJobByStudentIDs"); - return studentIDs.stream() - .map(stid -> updateStudentFlagReadyForBatchJob(stid, batchJobType)) - .filter(Objects::nonNull).collect(Collectors.toList()); + for(UUID uuid: studentIDs) { + updateStudentFlagReadyForBatchJob(uuid, batchJobType); + } } - private GraduationStudentRecord updateStudentFlagReadyForBatchJob(UUID studentID, String batchJobType) { + private void updateStudentFlagReadyForBatchJob(UUID studentID, String batchJobType) { logger.debug("updateStudentFlagReadyByJobType for studentID - {}", studentID); - GraduationStudentRecord result = null; Optional optional = graduationStatusRepository.findById(studentID); if (optional.isPresent()) { GraduationStudentRecordEntity entity = optional.get(); - result = saveBatchFlagsOfGraduationStudentRecord(entity, batchJobType); + saveBatchFlagsOfGraduationStudentRecord(entity, batchJobType); } - return result; } - private GraduationStudentRecord saveBatchFlagsOfGraduationStudentRecord(GraduationStudentRecordEntity entity, String batchJobType) { + private void saveBatchFlagsOfGraduationStudentRecord(GraduationStudentRecordEntity entity, String batchJobType) { boolean isUpdated = false; if (entity.getBatchId() != null) { if (StringUtils.equals("REGALG", batchJobType)) { @@ -1390,10 +1403,8 @@ private GraduationStudentRecord saveBatchFlagsOfGraduationStudentRecord(Graduati } if (isUpdated) { graduationStatusRepository.save(entity); - return graduationStatusTransformer.transformToDTOWithModifiedProgramCompletionDate(entity); } } - return null; } private void resetBatchFlags(GraduationStudentRecordEntity gradEntity, boolean projectedRun) { diff --git a/api/src/test/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusControllerTest.java index 7a5dc68b..e586471f 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/gradstudent/controller/GraduationStatusControllerTest.java @@ -619,7 +619,7 @@ public void testUpdateStudentFlagReadyForBatchJobByStudentIDs() { graduationStatus.setStudentGrade("12"); graduationStatus.setGpa("4"); - Mockito.when(graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs(batchJobType, stList.getStudentids())).thenReturn(Arrays.asList(graduationStatus)); + Mockito.doNothing().when(graduationStatusService).updateStudentFlagReadyForBatchJobByStudentIDs(batchJobType, stList.getStudentids()); graduationStatusController.updateStudentFlagReadyForBatchJobByStudentIDs(batchJobType, stList); Mockito.verify(graduationStatusService).updateStudentFlagReadyForBatchJobByStudentIDs(batchJobType, stList.getStudentids()); } diff --git a/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentServiceTest.java index 5ff85087..50f27a05 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GradStudentServiceTest.java @@ -6,6 +6,7 @@ import ca.bc.gov.educ.api.gradstudent.messaging.jetstream.Subscriber; import ca.bc.gov.educ.api.gradstudent.model.dto.*; import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordEntity; +import ca.bc.gov.educ.api.gradstudent.model.entity.GraduationStudentRecordView; import ca.bc.gov.educ.api.gradstudent.model.transformer.GraduationStatusTransformer; import ca.bc.gov.educ.api.gradstudent.repository.GraduationStudentRecordRepository; import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiConstants; @@ -34,13 +35,12 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; import java.util.*; import java.util.function.Consumer; import java.util.function.Function; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -340,13 +340,105 @@ public void testGetStudentFromStudentAPIGradOnly() { graduationStatusEntity.setStudentGrade(stdGrade); graduationStatusEntity.setProgram(program); graduationStatusEntity.setSchoolOfRecord(mincode); + + final GraduationStudentRecordView graduationStatusView = new GraduationStudentRecordView() { + @Override + public String getProgram() { + return program; + } + + @Override + public Date getProgramCompletionDate() { + return null; + } + + @Override + public String getGpa() { + return null; + } + + @Override + public String getHonoursStanding() { + return null; + } + + @Override + public String getRecalculateGradStatus() { + return null; + } + + @Override + public String getSchoolOfRecord() { + return mincode; + } + + @Override + public String getStudentGrade() { + return stdGrade; + } + + @Override + public String getStudentStatus() { + return gradStatus; + } + + @Override + public UUID getStudentID() { + return studentID; + } + + @Override + public String getSchoolAtGrad() { + return null; + } + + @Override + public String getRecalculateProjectedGrad() { + return null; + } + + @Override + public Long getBatchId() { + return null; + } + + @Override + public String getConsumerEducationRequirementMet() { + return null; + } + + @Override + public String getStudentCitizenship() { + return null; + } + + @Override + public Date getAdultStartDate() { + return null; + } + + @Override + public String getStudentProjectedGradData() { + return null; + } + + @Override + public LocalDateTime getCreateDate() { + return null; + } + + @Override + public LocalDateTime getUpdateDate() { + return null; + } + }; List studentSubList = new ArrayList<>(); - studentSubList.add(graduationStatusEntity.getStudentID()); + studentSubList.add(graduationStatusView.getStudentID()); when(this.graduationStatusRepository.findByStudentID(studentID)).thenReturn(graduationStatusEntity); when(this.graduationStatusTransformer.transformToDTOWithModifiedProgramCompletionDate(graduationStatusEntity)).thenReturn(graduationStatus); - when(this.graduationStatusRepository.findByStudentIDIn(studentSubList)).thenReturn(List.of(graduationStatusEntity)); + when(this.graduationStatusRepository.findByStudentIDIn(studentSubList)).thenReturn(List.of(graduationStatusView)); RestResponsePage response = new RestResponsePage<>(List.of(student)); final ParameterizedTypeReference> studentResponseType = new ParameterizedTypeReference<>() { }; diff --git a/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusServiceTest.java index 766ba3d1..275b7ee6 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/gradstudent/service/GraduationStatusServiceTest.java @@ -6,15 +6,12 @@ import ca.bc.gov.educ.api.gradstudent.messaging.jetstream.Publisher; import ca.bc.gov.educ.api.gradstudent.messaging.jetstream.Subscriber; import ca.bc.gov.educ.api.gradstudent.model.dto.*; +import ca.bc.gov.educ.api.gradstudent.model.dto.messaging.GraduationStudentRecordGradStatus; import ca.bc.gov.educ.api.gradstudent.model.entity.*; import ca.bc.gov.educ.api.gradstudent.repository.*; -import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiConstants; -import ca.bc.gov.educ.api.gradstudent.util.EducGradStudentApiUtils; -import ca.bc.gov.educ.api.gradstudent.util.GradBusinessRuleException; -import ca.bc.gov.educ.api.gradstudent.util.GradValidation; +import ca.bc.gov.educ.api.gradstudent.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.val; import org.apache.commons.lang3.time.DateUtils; import org.junit.After; import org.junit.Before; @@ -39,6 +36,7 @@ import reactor.core.publisher.Mono; import java.sql.Date; +import java.time.LocalDateTime; import java.util.*; import java.util.function.Consumer; import java.util.function.Function; @@ -61,6 +59,7 @@ public class GraduationStatusServiceTest { @MockBean GradStudentService gradStudentService; @MockBean HistoryService historyService; @Autowired GradStudentReportService gradStudentReportService; + @Autowired JsonTransformer jsonTransformer; @MockBean GraduationStudentRecordRepository graduationStatusRepository; @MockBean StudentOptionalProgramRepository gradStudentOptionalProgramRepository; @MockBean StudentCareerProgramRepository gradStudentCareerProgramRepository; @@ -142,6 +141,25 @@ public void testGetGraduationStatus_givenNotFound_ExpectEntityNotFoundExcetpion( }); } + @Test + public void testGetGraduationStatusProjection_GivenValidProgramCompletionDate_ExpectTrue() throws EntityNotFoundException { + UUID studentID = UUID.randomUUID(); + GraduationStudentRecordEntity graduationStatusEntity = new GraduationStudentRecordEntity(); + graduationStatusEntity.setProgramCompletionDate(new java.util.Date()); + when(graduationStatusRepository.findByStudentID(studentID, GraduationStudentRecordGradStatus.class)).thenReturn(new GraduationStudentRecordGradStatus(studentID, "2018-EN", new java.util.Date())); + GraduationStudentRecordGradStatus result = graduationStatusService.getGraduationStatusProjection(studentID); + assertNotNull(result); + } + + @Test + public void testGetGraduationStatusProjection_givenNotFound_ExpectEntityNotFoundExcetpion() { + UUID studentID = UUID.randomUUID(); + when(graduationStatusRepository.findByStudentID(studentID, GraduationStudentRecordGradStatus.class)).thenReturn(null); + assertThrows(EntityNotFoundException.class, () -> { + graduationStatusService.getGraduationStatusProjection(studentID); + }); + } + @Test public void testGetGraduationStatusForAlgorithm() { // ID @@ -2204,7 +2222,7 @@ public void testSaveStudentRecord_DistributionRun() { public void testGetStudentDataByStudentIds() { // ID List sList = Arrays.asList(UUID.randomUUID()); - List histList = new ArrayList<>(); + List histList = new ArrayList<>(); GradSearchStudent serObj = new GradSearchStudent(); serObj.setPen("123123"); @@ -2214,26 +2232,98 @@ public void testGetStudentDataByStudentIds() { GraduationData gd = new GraduationData(); gd.setGradStudent(serObj); - GraduationStudentRecordEntity graduationStatusEntity = new GraduationStudentRecordEntity(); - graduationStatusEntity.setStudentID(sList.get(0)); - graduationStatusEntity.setStudentStatus("A"); - try { - graduationStatusEntity.setStudentGradData(new ObjectMapper().writeValueAsString(gd)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - graduationStatusEntity.setRecalculateGradStatus("Y"); - graduationStatusEntity.setProgram("2018-EN"); - graduationStatusEntity.setSchoolOfRecord("223333"); - graduationStatusEntity.setGpa("4"); - graduationStatusEntity.setBatchId(4000L); - graduationStatusEntity.setPen("123123"); - graduationStatusEntity.setLegalFirstName("Asdad"); - graduationStatusEntity.setLegalMiddleNames("Adad"); - graduationStatusEntity.setLegalLastName("sadad"); - graduationStatusEntity.setProgramCompletionDate(new Date(System.currentTimeMillis())); - histList.add(graduationStatusEntity); + GraduationStudentRecordView graduationStatusEntity = new GraduationStudentRecordView() { + @Override + public String getProgram() { + return null; + } + + @Override + public java.util.Date getProgramCompletionDate() { + return null; + } + + @Override + public String getGpa() { + return null; + } + + @Override + public String getHonoursStanding() { + return null; + } + + @Override + public String getRecalculateGradStatus() { + return null; + } + + @Override + public String getSchoolOfRecord() { + return null; + } + + @Override + public String getStudentGrade() { + return null; + } + + @Override + public String getStudentStatus() { + return null; + } + + @Override + public UUID getStudentID() { + return null; + } + + @Override + public String getSchoolAtGrad() { + return null; + } + + @Override + public String getRecalculateProjectedGrad() { + return null; + } + + @Override + public Long getBatchId() { + return null; + } + + @Override + public String getConsumerEducationRequirementMet() { + return null; + } + + @Override + public String getStudentCitizenship() { + return null; + } + + @Override + public java.util.Date getAdultStartDate() { + return null; + } + + @Override + public String getStudentProjectedGradData() { + return null; + } + + @Override + public LocalDateTime getCreateDate() { + return null; + } + @Override + public LocalDateTime getUpdateDate() { + return null; + } + }; + histList.add(graduationStatusEntity); when(graduationStatusRepository.findByStudentIDIn(sList)).thenReturn(histList); List list = graduationStatusService.getStudentDataByStudentIDs(sList); assertThat(list).isNotEmpty().hasSize(1); @@ -2615,23 +2705,99 @@ public Page map(Function converter) { @Test public void testGetStudentsForSchoolReport() { String mincode = "123213123"; - GraduationStudentRecordEntity graduationStatus = new GraduationStudentRecordEntity(); - graduationStatus.setStudentID(new UUID(1,1)); - graduationStatus.setSchoolOfRecord(mincode); - GraduationData gradData = new GraduationData(); - GradSearchStudent gS = new GradSearchStudent(); - gS.setPen("123123123123"); - gS.setLegalFirstName("sadas"); - gS.setLegalMiddleNames("fdf"); - gS.setLegalLastName("rrw"); - gradData.setGradStudent(gS); - graduationStatus.setStudentStatus("CUR"); - try { - graduationStatus.setStudentGradData(new ObjectMapper().writeValueAsString(gradData)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - when(graduationStatusRepository.findBySchoolOfRecord(mincode)).thenReturn(List.of(graduationStatus)); + GraduationStudentRecordView graduationStatus = new GraduationStudentRecordView() { + + @Override + public String getProgram() { + return null; + } + + @Override + public java.util.Date getProgramCompletionDate() { + return null; + } + + @Override + public String getGpa() { + return null; + } + + @Override + public String getHonoursStanding() { + return null; + } + + @Override + public String getRecalculateGradStatus() { + return null; + } + + @Override + public String getSchoolOfRecord() { + return mincode; + } + + @Override + public String getStudentGrade() { + return "AD"; + } + + @Override + public String getStudentStatus() { + return "CUR"; + } + + @Override + public UUID getStudentID() { + return new UUID(1,1); + } + + @Override + public String getSchoolAtGrad() { + return mincode; + } + + @Override + public String getRecalculateProjectedGrad() { + return null; + } + + @Override + public Long getBatchId() { + return null; + } + + @Override + public String getConsumerEducationRequirementMet() { + return null; + } + + @Override + public String getStudentCitizenship() { + return null; + } + + @Override + public java.util.Date getAdultStartDate() { + return null; + } + + @Override + public String getStudentProjectedGradData() { + return null; + } + + @Override + public LocalDateTime getCreateDate() { + return null; + } + + @Override + public LocalDateTime getUpdateDate() { + return null; + } + }; + when(graduationStatusRepository.findBySchoolOfRecordAndStudentStatus(mincode, "CUR")).thenReturn(List.of(graduationStatus)); var result = graduationStatusService.getStudentsForSchoolReport(mincode); assertThat(result).isNotNull().hasSize(1); GraduationStudentRecord responseGraduationStatus = result.get(0); @@ -2735,25 +2901,98 @@ private List amalgamatedReports(String type,boolean isGraduated) { projectedRunClob.setGraduated(isGraduated); projectedRunClob.setNonGradReasons(null); - GraduationStudentRecordEntity graduationStatusEntity = new GraduationStudentRecordEntity(); - graduationStatusEntity.setStudentID(UUID.randomUUID()); - graduationStatusEntity.setStudentStatus("A"); - try { - graduationStatusEntity.setStudentProjectedGradData(new ObjectMapper().writeValueAsString(projectedRunClob)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - graduationStatusEntity.setRecalculateGradStatus("Y"); - graduationStatusEntity.setProgram("2018-EN"); - graduationStatusEntity.setSchoolOfRecord("21313121"); - graduationStatusEntity.setGpa("4"); - graduationStatusEntity.setBatchId(4000L); - graduationStatusEntity.setPen("123123"); - graduationStatusEntity.setLegalFirstName("Asdad"); - graduationStatusEntity.setLegalMiddleNames("Adad"); - graduationStatusEntity.setLegalLastName("sadad"); + GraduationStudentRecordView graduationStatusEntity = new GraduationStudentRecordView() { + @Override + public String getProgram() { + return "2018-EN"; + } + + @Override + public java.util.Date getProgramCompletionDate() { + return null; + } + + @Override + public String getGpa() { + return "4"; + } + + @Override + public String getHonoursStanding() { + return null; + } + + @Override + public String getRecalculateGradStatus() { + return "Y"; + } + + @Override + public String getSchoolOfRecord() { + return "21313121"; + } + + @Override + public String getStudentGrade() { + return null; + } + + @Override + public String getStudentStatus() { + return "A"; + } + + @Override + public UUID getStudentID() { + return UUID.randomUUID(); + } + + @Override + public String getSchoolAtGrad() { + return null; + } - Mockito.when(graduationStatusRepository.findBySchoolOfRecordAmalgamated(mincode)).thenReturn(List.of(graduationStatusEntity)); + @Override + public String getRecalculateProjectedGrad() { + return "Y"; + } + + @Override + public Long getBatchId() { + return 4000L; + } + + @Override + public String getConsumerEducationRequirementMet() { + return null; + } + + @Override + public String getStudentCitizenship() { + return "C"; + } + + @Override + public java.util.Date getAdultStartDate() { + return null; + } + + @Override + public String getStudentProjectedGradData() { + return jsonTransformer.marshall(projectedRunClob); + } + + @Override + public LocalDateTime getCreateDate() { + return null; + } + + @Override + public LocalDateTime getUpdateDate() { + return null; + } + }; + Mockito.when(graduationStatusRepository.findBySchoolOfRecordAndStudentStatusAndStudentGradeIn(mincode, "CUR", List.of("AD", "12"))).thenReturn(List.of(graduationStatusEntity)); return graduationStatusService.getStudentsForAmalgamatedSchoolReport(mincode,type); } @@ -2795,14 +3034,8 @@ public void testUpdateStudentFlagReadyForBatchJobByStudentIDs_when_relcalculateG Mockito.when(graduationStatusRepository.findById(studentID1)).thenReturn(Optional.of(graduationStatusEntity1)); Mockito.when(graduationStatusRepository.findById(studentID2)).thenReturn(Optional.of(graduationStatusEntity2)); - val results = graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs("REGALG", studentIDs); - assertThat(results).hasSize(1); - - // result is updated - GraduationStudentRecord result = results.get(0); - assertThat(result.getStudentID()).isEqualTo(studentID1); - assertThat(result.getRecalculateGradStatus()).isEqualTo("Y"); - assertThat(result.getRecalculateProjectedGrad()).isEqualTo("Y"); + graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs("REGALG", studentIDs); + assertThat(studentIDs).hasSize(2); } @Test @@ -2842,14 +3075,8 @@ public void testUpdateStudentFlagReadyForBatchJobByStudentIDs_when_relcalculateP Mockito.when(graduationStatusRepository.findById(studentID1)).thenReturn(Optional.of(graduationStatusEntity1)); Mockito.when(graduationStatusRepository.findById(studentID2)).thenReturn(Optional.of(graduationStatusEntity2)); - val results = graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs("TVRRUN", studentIDs); - assertThat(results).hasSize(1); - - // result is updated - GraduationStudentRecord result = results.get(0); - assertThat(result.getStudentID()).isEqualTo(studentID2); - assertThat(result.getRecalculateGradStatus()).isEqualTo("Y"); - assertThat(result.getRecalculateProjectedGrad()).isEqualTo("Y"); + graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs("TVRRUN", studentIDs); + assertThat(studentIDs).hasSize(2); } @Test @@ -2887,8 +3114,8 @@ public void testUpdateStudentFlagReadyForBatchJobByStudentIDs_when_batchID_is_nu Mockito.when(graduationStatusRepository.findById(studentID1)).thenReturn(Optional.of(graduationStatusEntity1)); Mockito.when(graduationStatusRepository.findById(studentID2)).thenReturn(Optional.of(graduationStatusEntity2)); - val results = graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs("TVRRUN", studentIDs); - assertThat(results).isEmpty(); + graduationStatusService.updateStudentFlagReadyForBatchJobByStudentIDs("TVRRUN", studentIDs); + assertThat(studentIDs).isNotEmpty(); } @Test