diff --git a/build.gradle b/build.gradle index 23e7046fc..b7ec378c0 100644 --- a/build.gradle +++ b/build.gradle @@ -278,10 +278,10 @@ checkstyle { } pmdTest { - maxFailures = 312 + maxFailures = 304 } pmdMain { - maxFailures = 815 + maxFailures = 799 } pmd { maxFailures = 0 diff --git a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImpl.java index 59292ed5c..af765bae3 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImpl.java @@ -17,7 +17,6 @@ import uk.gov.hmcts.juror.api.moj.domain.IJurorStatus; import uk.gov.hmcts.juror.api.moj.domain.JurorPool; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.repository.DisqualifiedCodeRepository; import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; import uk.gov.hmcts.juror.api.moj.repository.JurorStatusRepository; @@ -93,8 +92,7 @@ public boolean disqualifyJuror(String jurorId, DisqualifyCodeDto disqualifyCodeD savedResponse.setVersion(disqualifyCodeDto.getVersion()); //update response - final ProcessingStatus oldProcessingStatus = savedResponse.getProcessingStatus(); - savedResponse.setProcessingStatus(ProcessingStatus.CLOSED); + savedResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); // JDB-2685: if no staff assigned, assign current login if (null == savedResponse.getStaff()) { @@ -113,14 +111,6 @@ public boolean disqualifyJuror(String jurorId, DisqualifyCodeDto disqualifyCodeD throw new DisqualifyException.OptimisticLockingFailure(jurorId); } - //audit response status change - jurorResponseAuditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorId) - .login(login) - .oldProcessingStatus(oldProcessingStatus) - .newProcessingStatus(savedResponse.getProcessingStatus()) - .build()); - // update juror pool entry JurorPool jurorDetails = detailsRepository.findByJurorJurorNumber(savedResponse.getJurorNumber()); jurorDetails.getJuror().setResponded(true); diff --git a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImpl.java index 48ab9b37b..47a06ae24 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImpl.java @@ -18,7 +18,6 @@ import uk.gov.hmcts.juror.api.moj.domain.JurorHistory; import uk.gov.hmcts.juror.api.moj.domain.JurorPool; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.enumeration.ExcusalCodeEnum; import uk.gov.hmcts.juror.api.moj.enumeration.HistoryCodeMod; import uk.gov.hmcts.juror.api.moj.repository.JurorHistoryRepository; @@ -100,8 +99,7 @@ public boolean excuseJuror(String jurorId, ExcusalCodeDto excusalCodeDto, String savedResponse.setVersion(excusalCodeDto.getVersion()); //update response - final ProcessingStatus oldProcessingStatus = savedResponse.getProcessingStatus(); - savedResponse.setProcessingStatus(ProcessingStatus.CLOSED); + savedResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); // JDB-2685: if no staff assigned, assign current login if (null == savedResponse.getStaff()) { @@ -120,14 +118,6 @@ public boolean excuseJuror(String jurorId, ExcusalCodeDto excusalCodeDto, String throw new ExcusalException.OptimisticLockingFailure(jurorId, e); } - //audit response status change - jurorResponseAuditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorId) - .login(login) - .oldProcessingStatus(oldProcessingStatus) - .newProcessingStatus(savedResponse.getProcessingStatus()) - .build()); - // update juror pool entry JurorPool poolDetails = detailsRepository.findByJurorJurorNumber(savedResponse.getJurorNumber()); poolDetails.getJuror().setResponded(true); @@ -201,8 +191,7 @@ public boolean rejectExcusalRequest(String jurorId, ExcusalCodeDto excusalCodeDt savedResponse.setVersion(excusalCodeDto.getVersion()); //update response - final ProcessingStatus oldProcessingStatus = savedResponse.getProcessingStatus(); - savedResponse.setProcessingStatus(ProcessingStatus.CLOSED); + savedResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); // JDB-2685: if no staff assigned, assign current login if (null == savedResponse.getStaff()) { @@ -221,14 +210,6 @@ public boolean rejectExcusalRequest(String jurorId, ExcusalCodeDto excusalCodeDt throw new ExcusalException.OptimisticLockingFailure(jurorId, e); } - //audit response status change - jurorResponseAuditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorId) - .login(login) - .oldProcessingStatus(oldProcessingStatus) - .newProcessingStatus(savedResponse.getProcessingStatus()) - .build()); - // update juror pool entry JurorPool poolDetails = detailsRepository.findByJurorJurorNumber(savedResponse.getJurorNumber()); poolDetails.getJuror().setResponded(true); diff --git a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImpl.java index a580617e4..8d67a55f0 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImpl.java @@ -20,7 +20,6 @@ import uk.gov.hmcts.juror.api.moj.domain.JurorPool; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorReasonableAdjustment; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.enumeration.HistoryCodeMod; import uk.gov.hmcts.juror.api.moj.repository.JurorHistoryRepository; import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; @@ -54,6 +53,7 @@ public class ResponseStatusUpdateServiceImpl implements ResponseStatusUpdateServ private final AssignOnUpdateService assignOnUpdateService; private final JurorReasonableAdjustmentRepository specialNeedsRepository; private final WelshCourtLocationRepository welshCourtLocationRepository; + private final JurorResponseAuditRepositoryMod jurorResponseAuditRepositoryMod; /** @@ -80,10 +80,8 @@ public void updateJurorResponseStatus(final String jurorNumber, final Processing log.debug("Version: DB={}, UI={}", jurorResponse.getVersion(), version); jurorResponse.setVersion(version); - final ProcessingStatus auditProcessingStatus = jurorResponse.getProcessingStatus(); - //update response PROCESSING status - jurorResponse.setProcessingStatus(status); + jurorResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, status); // JDB-2685: if no staff assigned, assign current login if (null == jurorResponse.getStaff()) { @@ -125,17 +123,6 @@ public void updateJurorResponseStatus(final String jurorNumber, final Processing } log.info("Updated juror '{}' processing status to '{}'", jurorNumber, jurorResponse.getProcessingStatus()); - //audit response status change - JurorResponseAuditMod responseAudit = auditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorResponse.getJurorNumber()) - .login(auditorUsername) - .oldProcessingStatus(auditProcessingStatus) - .newProcessingStatus(jurorResponse.getProcessingStatus()) - .build()); - - if (log.isTraceEnabled()) { - log.trace("Audit entry: {}", responseAudit); - } } else { log.error("No juror response found for juror number {}", jurorNumber); throw new JurorResponseNotFoundException("No juror response found"); diff --git a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseUpdateServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseUpdateServiceImpl.java index 2b4edc3f1..e87757598 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseUpdateServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/bureau/service/ResponseUpdateServiceImpl.java @@ -22,7 +22,6 @@ import uk.gov.hmcts.juror.api.moj.domain.User; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorReasonableAdjustment; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseCjsEmployment; import uk.gov.hmcts.juror.api.moj.repository.ContactCodeRepository; import uk.gov.hmcts.juror.api.moj.repository.ContactLogRepository; @@ -104,7 +103,6 @@ public class ResponseUpdateServiceImpl implements ResponseUpdateService { private final JurorResponseAuditRepositoryMod responseAuditRepository; private final JurorHistoryService jurorHistoryService; - @Override @Transactional(readOnly = true) public JurorNoteDto notesByJurorNumber(final String jurorId) { @@ -424,55 +422,28 @@ public void updateResponseStatus(String jurorId, ProcessingStatus status, Intege final DigitalResponse domain = responseRepository.findByJurorNumber(jurorId); final JurorPool juror = jurorRepository.findByJurorJurorNumber(jurorId); - DigitalResponse savedResponse = null; - - if (jurorId != null) { - - savedResponse = responseRepository.findByJurorNumber(jurorId); - } - applyOptimisticLocking(domain, version); if (juror != null) { //update response if pool status = 2,5, 6 & 7 if (poolStatus.contains(juror.getStatus().getStatus())) { - domain.setProcessingStatus(ProcessingStatus.CLOSED); + domain.setProcessingStatus(responseAuditRepository, ProcessingStatus.CLOSED); domain.setProcessingComplete(Boolean.TRUE); } else if (juror.getStatus().getStatus() == IJurorStatus.ADDITIONAL_INFO) { - if (status.equals(ProcessingStatus.AWAITING_COURT_REPLY)) { - domain.setProcessingStatus(ProcessingStatus.AWAITING_COURT_REPLY); - + domain.setProcessingStatus(responseAuditRepository, ProcessingStatus.AWAITING_COURT_REPLY); } else if (status.equals(ProcessingStatus.AWAITING_CONTACT)) { - domain.setProcessingStatus(ProcessingStatus.AWAITING_CONTACT); + domain.setProcessingStatus(responseAuditRepository, ProcessingStatus.AWAITING_CONTACT); } else if (status.equals(ProcessingStatus.AWAITING_TRANSLATION)) { - domain.setProcessingStatus(ProcessingStatus.AWAITING_TRANSLATION); + domain.setProcessingStatus(responseAuditRepository, ProcessingStatus.AWAITING_TRANSLATION); } } log.trace("updating juror '{}' processing status to '{}'", jurorId, status.getDescription()); responseRepository.save(domain); log.trace("Updated juror '{}' processing status to '{}'", jurorId, status.getDescription()); - - if (savedResponse != null) { - //audit response status change - responseAuditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorId) - .login(login) - .oldProcessingStatus(savedResponse.getProcessingStatus()) - .newProcessingStatus(status) - .build()); - log.debug("response audit updated old processing status {}, new processing status {} for juror {}", - jurorId, savedResponse.getProcessingStatus().getDescription(), - domain.getProcessingStatus().getDescription() - ); - } else { - log.error("SavedResponse is null"); - } - } - } @Transactional diff --git a/src/main/java/uk/gov/hmcts/juror/api/juror/domain/ProcessingStatus.java b/src/main/java/uk/gov/hmcts/juror/api/juror/domain/ProcessingStatus.java index 333ce90db..519587059 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/juror/domain/ProcessingStatus.java +++ b/src/main/java/uk/gov/hmcts/juror/api/juror/domain/ProcessingStatus.java @@ -1,8 +1,11 @@ package uk.gov.hmcts.juror.api.juror.domain; +import lombok.Getter; + /** * Enum of values of a juror response "processing status". */ +@Getter public enum ProcessingStatus { TODO("To Do"), @@ -20,7 +23,4 @@ public enum ProcessingStatus { this.description = description; } - public String getDescription() { - return description; - } } diff --git a/src/main/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImpl.java b/src/main/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImpl.java index 5bdd0aef5..4cd21af7d 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImpl.java @@ -17,7 +17,6 @@ import uk.gov.hmcts.juror.api.moj.domain.JurorPool; import uk.gov.hmcts.juror.api.moj.domain.User; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.enumeration.HistoryCodeMod; import uk.gov.hmcts.juror.api.moj.repository.JurorHistoryRepository; import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; @@ -266,7 +265,7 @@ public void processAcceptance( "Response must be in summoned state to qualify for straight-through"); } - savedDigitalResponse.setProcessingStatus(ProcessingStatus.CLOSED); + savedDigitalResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); savedDigitalResponse.setStaff(staffMember(AUTO_USER)); savedDigitalResponse.setStaffAssignmentDate(LocalDate.now()); @@ -274,14 +273,6 @@ public void processAcceptance( // save the response mergeService.mergeResponse(savedDigitalResponse, AUTO_USER); - //audit response status change - jurorResponseAuditRepositoryMod.save(JurorResponseAuditMod.builder() - .jurorNumber(savedDigitalResponse.getJurorNumber()) - .login(AUTO_USER) - .oldProcessingStatus(ProcessingStatus.TODO) - .newProcessingStatus(savedDigitalResponse.getProcessingStatus()) - .build()); - // update juror entry // final Pool updatedDetails = detailsRepository.findByJurorNumber(savedDigitalResponse.getJurorNumber()); final JurorPool updatedJurorDetails = @@ -363,21 +354,13 @@ public void processDeceasedExcusal( } //update response - savedDigitalResponse.setProcessingStatus(ProcessingStatus.CLOSED); + savedDigitalResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); savedDigitalResponse.setStaff(staffMember(AUTO_USER)); savedDigitalResponse.setStaffAssignmentDate(LocalDate.now()); // save the response mergeService.mergeResponse(savedDigitalResponse, AUTO_USER); - //audit response status change - jurorResponseAuditRepositoryMod.save(JurorResponseAuditMod.builder() - .jurorNumber(savedDigitalResponse.getJurorNumber()) - .login(AUTO_USER) - .oldProcessingStatus(ProcessingStatus.TODO) - .newProcessingStatus(savedDigitalResponse.getProcessingStatus()) - .build()); - // update Juror jurorDetails.getJuror().setResponded(true); jurorDetails.getJuror().setExcusalDate(LocalDate.now()); @@ -464,21 +447,13 @@ public void processAgeExcusal( } //update response - savedDigitalResponse.setProcessingStatus(ProcessingStatus.CLOSED); + savedDigitalResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); savedDigitalResponse.setStaff(staffMember(AUTO_USER)); savedDigitalResponse.setStaffAssignmentDate(LocalDate.now()); // save the response mergeService.mergeResponse(savedDigitalResponse, AUTO_USER); - //audit response status change - jurorResponseAuditRepositoryMod.save(JurorResponseAuditMod.builder() - .jurorNumber(savedDigitalResponse.getJurorNumber()) - .login(AUTO_USER) - .oldProcessingStatus(ProcessingStatus.TODO) - .newProcessingStatus(savedDigitalResponse.getProcessingStatus()) - .build()); - // update Juror jurorDetails.getJuror().setResponded(true); jurorDetails.getJuror().setDisqualifyDate(LocalDate.now()); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/domain/jurorresponse/AbstractJurorResponse.java b/src/main/java/uk/gov/hmcts/juror/api/moj/domain/jurorresponse/AbstractJurorResponse.java index c8761d16c..ad92c4ece 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/domain/jurorresponse/AbstractJurorResponse.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/domain/jurorresponse/AbstractJurorResponse.java @@ -14,6 +14,7 @@ import jakarta.persistence.Version; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; +import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -25,6 +26,8 @@ import uk.gov.hmcts.juror.api.moj.domain.ContactLog; import uk.gov.hmcts.juror.api.moj.domain.Juror; import uk.gov.hmcts.juror.api.moj.domain.User; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; +import uk.gov.hmcts.juror.api.moj.utils.SecurityUtil; import uk.gov.hmcts.juror.api.validation.LocalDateOfBirth; import uk.gov.hmcts.juror.api.validation.ValidationConstants; @@ -80,6 +83,7 @@ public class AbstractJurorResponse extends Address implements Serializable { @Column(name = "processing_status") @Enumerated(EnumType.STRING) + @Setter(AccessLevel.NONE) private ProcessingStatus processingStatus = ProcessingStatus.TODO; @LocalDateOfBirth @@ -200,4 +204,21 @@ protected AbstractJurorResponse() { public boolean isClosed() { return getProcessingStatus().equals(ProcessingStatus.CLOSED); } + + public void setProcessingStatus(JurorResponseAuditRepositoryMod jurorResponseAuditRepository, + ProcessingStatus processingStatus) { + String username; + if (SecurityUtil.hasBureauJwtPayload()) { + username = SecurityUtil.getActiveLogin(); + } else { + username = SecurityUtil.AUTO_USER; + } + jurorResponseAuditRepository.save(JurorResponseAuditMod.builder() + .jurorNumber(jurorNumber) + .login(username) + .oldProcessingStatus(this.processingStatus) + .newProcessingStatus(processingStatus) + .build()); + this.processingStatus = processingStatus; + } } diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/repository/jurorresponse/JurorResponseAuditRepositoryMod.java b/src/main/java/uk/gov/hmcts/juror/api/moj/repository/jurorresponse/JurorResponseAuditRepositoryMod.java index 7de59a958..685cd6644 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/repository/jurorresponse/JurorResponseAuditRepositoryMod.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/repository/jurorresponse/JurorResponseAuditRepositoryMod.java @@ -6,6 +6,6 @@ import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditModKey; @Repository -public interface JurorResponseAuditRepositoryMod extends CrudRepository { +public interface JurorResponseAuditRepositoryMod + extends CrudRepository { } diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceImpl.java index 55a037d8e..976660df5 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceImpl.java @@ -1,6 +1,5 @@ package uk.gov.hmcts.juror.api.moj.service; -import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +28,7 @@ import uk.gov.hmcts.juror.api.moj.repository.JurorRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseCommonRepositoryMod; import uk.gov.hmcts.juror.api.moj.utils.JurorPoolUtils; import uk.gov.hmcts.juror.api.moj.utils.RepositoryUtils; @@ -45,22 +45,15 @@ public class DeceasedResponseServiceImpl implements DeceasedResponseService { private static final String DECEASED_CODE = "D"; private static final String PAPER_RESPONSE_EXISTS_TEXT = "A Paper summons reply exists."; - @NonNull private final ContactCodeRepository contactCodeRepository; - @NonNull private final JurorHistoryRepository jurorHistoryRepository; - @NonNull private final JurorPoolRepository jurorPoolRepository; - @NonNull private final JurorRepository jurorRepository; - @NonNull private final JurorPaperResponseRepositoryMod jurorPaperResponseRepository; - @NonNull private final JurorDigitalResponseRepositoryMod jurorDigitalResponseRepository; - @NonNull private final JurorResponseCommonRepositoryMod jurorResponseCommonRepositoryMod; - @NonNull private final ContactLogRepository contactLogRepository; + private final JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @Transactional @Override @@ -153,8 +146,8 @@ private void createContactLog(BureauJwtPayload payload, String jurorNumber, Stri contactLogRepository.saveAndFlush(contactLog); } - private static void setResponseToClosed(AbstractJurorResponse jurorResponse) { - jurorResponse.setProcessingStatus(ProcessingStatus.CLOSED); + private void setResponseToClosed(AbstractJurorResponse jurorResponse) { + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); jurorResponse.setProcessingComplete(true); jurorResponse.setCompletedAt(LocalDateTime.now()); } @@ -178,7 +171,8 @@ private void createMinimalPaperSummonsRecord(Juror juror, String deceasedComment jurorPaperResponse.setThirdPartyReason(deceasedComment); jurorPaperResponse.setProcessingComplete(true); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorPaperResponse = jurorPaperResponseRepository.save(jurorPaperResponse); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); jurorPaperResponse.setCompletedAt(LocalDateTime.now()); jurorPaperResponseRepository.save(jurorPaperResponse); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImpl.java index 3e06b161a..6ad5e50d1 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImpl.java @@ -30,6 +30,7 @@ import uk.gov.hmcts.juror.api.moj.repository.UserRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.utils.DataUtils; import uk.gov.hmcts.juror.api.moj.utils.JurorPoolUtils; import uk.gov.hmcts.juror.api.moj.utils.RepositoryUtils; @@ -69,6 +70,7 @@ public class ExcusalResponseServiceImpl implements ExcusalResponseService { @NonNull private final PrintDataService printDataService; private final JurorHistoryService jurorHistoryService; + private final JurorResponseAuditRepositoryMod jurorResponseAuditRepositoryMod; @Override @Transactional @@ -135,7 +137,7 @@ private void setPaperResponseProcessingStatusToClosed(BureauJwtPayload payload, log.info(String.format("PAPER response found for Juror %s", jurorNumber)); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); if (jurorPaperResponse.getStaff() == null) { log.info(String.format("No staff assigned to PAPER response for Juror %s", jurorNumber)); @@ -160,7 +162,7 @@ private void setDigitalResponseProcessingStatusToClosed(BureauJwtPayload payload log.info(String.format("DIGITAL response found for Juror %s", jurorNumber)); - jurorResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); if (jurorResponse.getStaff() == null) { log.info(String.format("No staff assigned to DIGITAL response for Juror %s", jurorNumber)); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/JurorRecordServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/JurorRecordServiceImpl.java index 0b3bd11a2..539fb287f 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/JurorRecordServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/JurorRecordServiceImpl.java @@ -16,7 +16,6 @@ import uk.gov.hmcts.juror.api.bureau.controller.response.BureauJurorDetailDto; import uk.gov.hmcts.juror.api.bureau.domain.DisCode; import uk.gov.hmcts.juror.api.bureau.service.BureauService; -import uk.gov.hmcts.juror.api.bureau.service.ResponseExcusalService; import uk.gov.hmcts.juror.api.config.bureau.BureauJwtPayload; import uk.gov.hmcts.juror.api.config.security.IsCourtUser; import uk.gov.hmcts.juror.api.juror.controller.request.JurorResponseDto; @@ -101,6 +100,7 @@ import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorReasonableAdjustmentRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseCommonRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.ReasonableAdjustmentsRepository; import uk.gov.hmcts.juror.api.moj.repository.trial.PanelRepository; @@ -170,7 +170,6 @@ public class JurorRecordServiceImpl implements JurorRecordService { private final ContactLogRepository contactLogRepository; private final JurorDetailRepositoryMod jurorDetailRepositoryMod; private final BureauService bureauService; - private final ResponseExcusalService responseExcusalService; private final JurorAuditChangeService jurorAuditChangeService; private final PrintDataService printDataService; private final GeneratePoolNumberService generatePoolNumberService; @@ -187,6 +186,7 @@ public class JurorRecordServiceImpl implements JurorRecordService { private final PanelRepository panelRepository; private final HistoryTemplateService historyTemplateService; private final WelshCourtLocationRepository welshCourtLocationRepository; + private final JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @Override @Transactional @@ -833,7 +833,7 @@ public void createJurorOpticReference(BureauJwtPayload payload, JurorOpticRefReq JurorUtils.checkOwnershipForCurrentUser(juror, owner); juror.setOpticRef(opticsRef); jurorRepository.save(juror); - response.setProcessingStatus(ProcessingStatus.AWAITING_COURT_REPLY); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.AWAITING_COURT_REPLY); if (ReplyMethod.DIGITAL.getDescription().equals(response.getReplyType().getType())) { jurorResponseRepository.save((DigitalResponse) response); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImpl.java index b0f37afba..9f4a27fe9 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImpl.java @@ -25,6 +25,7 @@ import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorReasonableAdjustmentRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseCjsEmploymentRepositoryMod; import uk.gov.hmcts.juror.api.moj.utils.DataUtils; import uk.gov.hmcts.juror.api.moj.utils.JurorPoolUtils; @@ -51,6 +52,7 @@ public class StraightThroughProcessorServiceImpl implements StraightThroughProce private final SummonsReplyMergeService mergeService; private final PrintDataService printDataService; private final JurorHistoryService jurorHistoryService; + private final JurorResponseAuditRepositoryMod jurorResponseAuditRepository; /** @@ -214,7 +216,7 @@ private void ageDisqualificationImplementation(AbstractJurorResponse jurorRespon JurorPoolUtils.checkOwnershipForCurrentUser(jurorPool, owner); - jurorResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); processJurorAgeDisqualification(jurorPool, jurorNumber, owner, username); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImpl.java index c1d5e7acf..8b1a2f54c 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImpl.java @@ -21,7 +21,6 @@ import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.AbstractJurorResponse; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorReasonableAdjustment; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.PaperResponse; import uk.gov.hmcts.juror.api.moj.enumeration.HistoryCodeMod; import uk.gov.hmcts.juror.api.moj.enumeration.ReplyMethod; @@ -40,12 +39,9 @@ import uk.gov.hmcts.juror.api.moj.utils.JurorPoolUtils; import uk.gov.hmcts.juror.api.moj.utils.RepositoryUtils; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; /** * Implementation of operations for updating the status of a Juror's response by a Bureau officer. @@ -95,6 +91,7 @@ public class SummonsReplyStatusUpdateServiceImpl implements SummonsReplyStatusUp private static final String ADDRESS = "address"; private static final String POSTCODE = "postcode"; + private final JurorResponseAuditRepositoryMod jurorResponseAuditRepositoryMod; /** * Update the processing status of a Juror response within Juror Digital. @@ -140,7 +137,7 @@ public void updateJurorResponseStatus(final String jurorNumber, final Processing // store the current processing status (to be used as the "changed from" value in the audit/history table) final ProcessingStatus initialProcessingStatus = paperResponse.getProcessingStatus(); - paperResponse.setProcessingStatus(status); + paperResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, status); // merge the changes if required/allowed if (Boolean.TRUE.equals(paperResponse.getProcessingComplete())) { @@ -207,7 +204,7 @@ public void updateDigitalJurorResponseStatus(final String jurorNumber, assignOnUpdateService.assignToCurrentLogin(jurorResponse, auditorUsername); } - jurorResponse.setProcessingStatus(status); + jurorResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, status); // merge the changes if required/allowed if (Boolean.TRUE.equals(jurorResponse.getProcessingComplete())) { @@ -230,13 +227,6 @@ public void updateDigitalJurorResponseStatus(final String jurorNumber, log.info("Updated juror '{}' processing status from '{}' to '{}'", jurorNumber, auditProcessingStatus, jurorResponse.getProcessingStatus() ); - JurorResponseAuditMod responseAudit = auditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorResponse.getJurorNumber()) - .login(auditorUsername) - .oldProcessingStatus(auditProcessingStatus) - .newProcessingStatus(jurorResponse.getProcessingStatus()) - .build()); - log.trace("Audit entry: {}", responseAudit); } /** @@ -447,110 +437,6 @@ private void mergeReasonableAdjustments(JurorPool jurorPool) { log.trace("Juror: {}. Exit mergeReasonableAdjustments", jurorNumber); } - /** - * Create a Map containing property names as keys and a boolean result indicating whether the value provided in the - * summons reply is different to the value currently stored in the juror record. - *

- * Property names are intentionally written in camelCase but with spaces separating individual words, for example, - * the lastName property is referenced by the key "last Name" - this makes it easier to utilise a single key for - * both property reference in code (remove space between words) and text descriptions in a more readable format - * for audit/history records (capitalise the first letter and maintain the spaces) - * - * @param juror the original juror record, to reference the existing juror details - * @param jurorResponse the transient paper/digital response pojo, to reference the newly provided - * juror details from a summons reply - * - * @return a Map containing juror response property names as keys and a Boolean result indicating whether the - * property values differ between the original juror record and the new juror summons reply, true means there - * is a - * difference, false means there is no difference - */ - private Map initChangedPropertyMap(Juror juror, - AbstractJurorResponse jurorResponse) { - // check for changes between the new/updated values and the juror record values - Map changedPropertiesMap = new HashMap<>(); - - // new title value CAN be null - changedPropertiesMap.put(TITLE, (juror.getTitle() != null && jurorResponse.getTitle() == null) - || hasPropertyChanged(jurorResponse.getTitle(), juror.getTitle())); - changedPropertiesMap.put( - "first Name", - hasPropertyChanged(jurorResponse.getFirstName(), juror.getFirstName()) - ); - changedPropertiesMap.put( - "last Name", - hasPropertyChanged(jurorResponse.getLastName(), juror.getLastName()) - ); - - LocalDate originalDate = setOriginalDateOfBirth(juror.getDateOfBirth()); - changedPropertiesMap.put("date Of Birth", hasPropertyChanged(jurorResponse.getDateOfBirth(), - originalDate)); - - changedPropertiesMap.put(ADDRESS, hasAddressChanged(jurorResponse, juror)); - changedPropertiesMap.put( - POSTCODE, - hasPropertyChanged(jurorResponse.getPostcode(), juror.getPostcode()) - ); - - return changedPropertiesMap; - } - - /** - * In most cases the date of birth field will be empty (null) when the Juror record was initially created from the - * voters table - the part amendment table will insert a record when the date of birth is changed, in - * the event of the initial assignment (from null to a date value) a default date is used 1901-01-01 (YYYY-MM-DD) - * for comparison (to avoid a null pointer exception). - * - * @return LocalDate object with either the Juror's date of birth or a default date value to use for Part Amendments - */ - private LocalDate setOriginalDateOfBirth(LocalDate jurorPoolDob) { - final LocalDate defaultNullReplacementDob = LocalDate.of(1901, 1, 1); - return jurorPoolDob != null ? jurorPoolDob : defaultNullReplacementDob; - } - - private boolean hasPropertyChanged(String updatedValue, String originalValue) { - if (updatedValue != null) { - if (originalValue != null) { - return updatedValue.compareTo(originalValue) != 0; - } else { - return true; - } - } - return false; - } - - private boolean hasPropertyChanged(LocalDate updatedValue, LocalDate originalValue) { - if (updatedValue != null) { - if (originalValue != null) { - return !updatedValue.isEqual(originalValue); - } else { - return true; - } - } - return false; - } - - private boolean hasAddressChanged(AbstractJurorResponse updatedDetails, Juror juror) { - String newAddress = formatForConcat(updatedDetails.getAddressLine1()) - + formatForConcat(updatedDetails.getAddressLine2()) - + formatForConcat(updatedDetails.getAddressLine3()) - + formatForConcat(updatedDetails.getAddressLine4()) - + formatForConcat(updatedDetails.getAddressLine5()); - - String oldAddress = formatForConcat(juror.getAddressLine1()) - + formatForConcat(juror.getAddressLine2()) - + formatForConcat(juror.getAddressLine3()) - + formatForConcat(juror.getAddressLine4()) - + formatForConcat(juror.getAddressLine5()); - - return oldAddress.compareToIgnoreCase(newAddress) != 0; - } - - private String formatForConcat(String property) { - String nullDefault = ""; - return Objects.toString(property, nullDefault).trim(); - } - private void applyPhoneNumberRules(Juror juror, AbstractJurorResponse summonsReply) { String primaryPhone = summonsReply.getPhoneNumber(); String secondaryPhone = summonsReply.getAltPhoneNumber(); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/deferralmaintenance/ManageDeferralsServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/deferralmaintenance/ManageDeferralsServiceImpl.java index 6272c57db..61d113eea 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/deferralmaintenance/ManageDeferralsServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/deferralmaintenance/ManageDeferralsServiceImpl.java @@ -37,7 +37,6 @@ import uk.gov.hmcts.juror.api.moj.domain.UserType; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.AbstractJurorResponse; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.PaperResponse; import uk.gov.hmcts.juror.api.moj.enumeration.HistoryCodeMod; import uk.gov.hmcts.juror.api.moj.enumeration.PoolUtilisationDescription; @@ -765,10 +764,7 @@ private void updateJurorResponse(String jurorNumber, DeferralReasonRequestDto de // there was code for digital to set up the optimistic locking, different from paper // this is not needed as it will be covered with e-tag header - - final ProcessingStatus auditStatus = jurorResponse.getProcessingStatus(); - - jurorResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); // assign staff (digital) if (deferralReasonDto.getReplyMethod() == ReplyMethod.DIGITAL) { @@ -777,15 +773,6 @@ private void updateJurorResponse(String jurorNumber, DeferralReasonRequestDto de assignOnUpdateService.assignToCurrentLogin(digitalResponse, auditorUsername); - final JurorResponseAuditMod responseAudit = - jurorResponseAuditRepositoryMod.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorResponse.getJurorNumber()) - .login(auditorUsername) - .oldProcessingStatus(auditStatus) - .newProcessingStatus(jurorResponse.getProcessingStatus()) - .build()); - - log.trace("Audit entry: {}", responseAudit); mergeService.mergeDigitalResponse(digitalResponse, auditorUsername); } else { assert jurorResponse instanceof PaperResponse; diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImpl.java b/src/main/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImpl.java index 0dcc3f054..4667a97a7 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImpl.java @@ -15,7 +15,6 @@ import uk.gov.hmcts.juror.api.moj.domain.JurorStatus; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.AbstractJurorResponse; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; -import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.JurorResponseAuditMod; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.PaperResponse; import uk.gov.hmcts.juror.api.moj.enumeration.DisqualifyCodeEnum; import uk.gov.hmcts.juror.api.moj.enumeration.ReplyMethod; @@ -28,6 +27,7 @@ import uk.gov.hmcts.juror.api.moj.service.JurorHistoryService; import uk.gov.hmcts.juror.api.moj.service.PrintDataService; import uk.gov.hmcts.juror.api.moj.service.SummonsReplyMergeService; +import uk.gov.hmcts.juror.api.moj.utils.JurorResponseUtils; import java.time.LocalDate; import java.time.LocalDateTime; @@ -41,7 +41,6 @@ import static uk.gov.hmcts.juror.api.moj.utils.DataUtils.getJurorPaperResponse; import static uk.gov.hmcts.juror.api.moj.utils.JurorPoolUtils.checkOwnershipForCurrentUser; import static uk.gov.hmcts.juror.api.moj.utils.JurorPoolUtils.getActiveJurorPoolForUser; -import static uk.gov.hmcts.juror.api.moj.utils.JurorResponseUtils.createMinimalPaperSummonsRecord; @Slf4j @Service @@ -109,18 +108,16 @@ public void disqualifyJuror(String jurorNumber, DisqualifyJurorDto disqualifyJur } //Check the status of the juror response to ensure only responses in the correct status can be updated - if (Boolean.FALSE.equals(jurorResponse.getProcessingComplete())) { + if (jurorResponse.getProcessingComplete() == null + || Boolean.FALSE.equals(jurorResponse.getProcessingComplete())) { log.debug("Juror {} - Juror response is not complete, updating response", jurorNumber); - - //Set the new status - need to copy the old status as required for the auditing steps - final ProcessingStatus oldProcessingStatus = setJurorResponseProcessingStatus(jurorResponse); - //Save the updated juror response - if (ReplyMethod.PAPER.equals(disqualifyJurorDto.getReplyMethod())) { - saveJurorPaperResponse(payload.getLogin(), (PaperResponse) jurorResponse); - } else if (ReplyMethod.DIGITAL.equals(disqualifyJurorDto.getReplyMethod())) { - saveJurorDigitalResponse(payload.getLogin(), oldProcessingStatus, (DigitalResponse) jurorResponse); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); + if (jurorResponse instanceof PaperResponse response) { + saveJurorPaperResponse(payload.getLogin(), response); + } else if (jurorResponse instanceof DigitalResponse response) { + saveJurorDigitalResponse(payload.getLogin(), response); } } } @@ -152,16 +149,16 @@ public void disqualifyJurorDueToAgeOutOfRange(String jurorNumber, if (null != digitalResponse) { checkJurorResponseStatus(digitalResponse); - final ProcessingStatus oldProcessingStatus = setJurorResponseProcessingStatus(digitalResponse); + digitalResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); digitalResponse.setProcessingComplete(true); digitalResponse.setCompletedAt(LocalDateTime.now()); - saveJurorDigitalResponse(bureauJwtPayload.getLogin(), oldProcessingStatus, digitalResponse); + saveJurorDigitalResponse(bureauJwtPayload.getLogin(), digitalResponse); processDisqualification(jurorPool, digitalResponse, bureauJwtPayload, DisqualifyCodeEnum.A); } else if (null != paperResponse) { checkJurorResponseStatus(paperResponse); paperResponse.setProcessingComplete(true); - paperResponse.setProcessingStatus(ProcessingStatus.CLOSED); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); paperResponse.setCompletedAt(LocalDateTime.now()); saveJurorPaperResponse(bureauJwtPayload.getLogin(), paperResponse); @@ -169,8 +166,9 @@ public void disqualifyJurorDueToAgeOutOfRange(String jurorNumber, } else { Juror juror = jurorPool.getJuror(); - PaperResponse minimalPaperResponse = createMinimalPaperSummonsRecord(juror, "Disqualification due to age."); - jurorPaperResponseRepository.save(minimalPaperResponse); + PaperResponse minimalPaperResponse = + JurorResponseUtils.createMinimalPaperSummonsRecord(jurorPaperResponseRepository, + jurorResponseAuditRepository, juror, "Disqualification due to age."); saveJurorPaperResponse(bureauJwtPayload.getLogin(), minimalPaperResponse); processDisqualification(jurorPool, minimalPaperResponse, bureauJwtPayload, DisqualifyCodeEnum.A); @@ -216,7 +214,6 @@ private void saveJurorPoolRecord(JurorPool jurorPool, } private void saveJurorDigitalResponse(String officerUsername, - ProcessingStatus oldProcessingStatus, DigitalResponse jurorResponse) { log.trace("Juror {} - Service method saveJurorDigitalResponse() invoked", jurorResponse.getJurorNumber()); @@ -231,14 +228,6 @@ private void saveJurorDigitalResponse(String officerUsername, //Merge the updated juror digital response summonsReplyMergeService.mergeDigitalResponse(jurorResponse, officerUsername); - - //Create an audit entry to reflect a change to the digital response related to disqualification - jurorResponseAuditRepository.save(JurorResponseAuditMod.builder() - .jurorNumber(jurorResponse.getJurorNumber()) - .login(officerUsername) - .oldProcessingStatus(oldProcessingStatus) - .newProcessingStatus(jurorResponse.getProcessingStatus()) - .build()); } private void saveJurorPaperResponse(String officerUsername, PaperResponse paperResponse) { @@ -246,18 +235,6 @@ private void saveJurorPaperResponse(String officerUsername, PaperResponse paperR summonsReplyMergeService.mergePaperResponse(paperResponse, officerUsername); } - private ProcessingStatus setJurorResponseProcessingStatus(AbstractJurorResponse jurorResponse) { - log.trace( - "Juror {} - Service method setJurorResponseProcessingStatus() invoked", - jurorResponse.getJurorNumber() - ); - - ProcessingStatus oldProcessingStatus = jurorResponse.getProcessingStatus(); - jurorResponse.setProcessingStatus(ProcessingStatus.CLOSED); - - return oldProcessingStatus; - } - private void checkJurorResponseStatus(AbstractJurorResponse jurorResponse) { log.trace("Juror {} - Service method checkJurorResponseStatus() invoked", jurorResponse.getJurorNumber()); diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtils.java b/src/main/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtils.java index 37366d838..f36152105 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtils.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtils.java @@ -8,6 +8,8 @@ import uk.gov.hmcts.juror.api.moj.domain.JurorPool; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.PaperResponse; import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDateTime; import java.util.Comparator; @@ -23,6 +25,21 @@ private JurorResponseUtils() { } + public static void updateCurrentOwnerInResponseDto(JurorPoolRepository jurorPoolRepository, + IJurorResponse responseDto) { + + // set the current owner. Need to ensure the current owner is returned as the owner can change if, for + // example, the juror is transferred to a different pool + List jurorPools = + JurorPoolUtils.getActiveJurorPoolRecords(jurorPoolRepository, responseDto.getJurorNumber()); + + Optional jurorPool = jurorPools.stream() + .filter(not(jp -> jp.getStatus().getCode().equals(IJurorStatus.TRANSFERRED))) + .sorted(Comparator.comparing(JurorPool::getDateCreated).reversed()) + .toList().stream().findFirst(); + + jurorPool.ifPresent(pool -> responseDto.setCurrentOwner(pool.getOwner())); + } /** * Creates a minimal paper response for age disqualification in cases where no response has @@ -32,7 +49,10 @@ private JurorResponseUtils() { * @param disqualifiedComment Disqualified comment * @return Return a paper response object */ - public static PaperResponse createMinimalPaperSummonsRecord(Juror juror, String disqualifiedComment) { + public static PaperResponse createMinimalPaperSummonsRecord( + JurorPaperResponseRepositoryMod jurorPaperResponseRepository, + JurorResponseAuditRepositoryMod jurorResponseAuditRepositoryMod, + Juror juror, String disqualifiedComment) { PaperResponse jurorPaperResponse = new PaperResponse(); jurorPaperResponse.setJurorNumber(juror.getJurorNumber()); // setting the received date to now @@ -44,28 +64,13 @@ public static PaperResponse createMinimalPaperSummonsRecord(Juror juror, String jurorPaperResponse.setDateOfBirth(juror.getDateOfBirth()); //set address - setUpAddress(jurorPaperResponse, juror); + JurorResponseUtils.setUpAddress(jurorPaperResponse, juror); jurorPaperResponse.setThirdPartyReason(disqualifiedComment); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.CLOSED); jurorPaperResponse.setProcessingComplete(true); jurorPaperResponse.setCompletedAt(LocalDateTime.now()); - return jurorPaperResponse; - } - - public static void updateCurrentOwnerInResponseDto(JurorPoolRepository jurorPoolRepository, - IJurorResponse responseDto) { - - // set the current owner. Need to ensure the current owner is returned as the owner can change if, for - // example, the juror is transferred to a different pool - List jurorPools = - JurorPoolUtils.getActiveJurorPoolRecords(jurorPoolRepository, responseDto.getJurorNumber()); - - Optional jurorPool = jurorPools.stream() - .filter(not(jp -> jp.getStatus().getCode().equals(IJurorStatus.TRANSFERRED))) - .sorted(Comparator.comparing(JurorPool::getDateCreated).reversed()) - .toList().stream().findFirst(); - - jurorPool.ifPresent(pool -> responseDto.setCurrentOwner(pool.getOwner())); + jurorPaperResponse = jurorPaperResponseRepository.save(jurorPaperResponse); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepositoryMod, ProcessingStatus.CLOSED); + return jurorPaperResponseRepository.save(jurorPaperResponse); } private static void setUpAddress(PaperResponse jurorPaperResponse, Juror juror) { diff --git a/src/main/java/uk/gov/hmcts/juror/api/moj/utils/SecurityUtil.java b/src/main/java/uk/gov/hmcts/juror/api/moj/utils/SecurityUtil.java index 2aa1469ba..a7ce91e88 100644 --- a/src/main/java/uk/gov/hmcts/juror/api/moj/utils/SecurityUtil.java +++ b/src/main/java/uk/gov/hmcts/juror/api/moj/utils/SecurityUtil.java @@ -15,6 +15,7 @@ public final class SecurityUtil { public static final String BUREAU_OWNER = "400"; + public static String AUTO_USER = "AUTO"; public static final String IS_MANAGER = "hasRole('ROLE_MANAGER')"; public static final String IS_SJO = "hasRole('ROLE_SENIOR_JUROR_OFFICER')"; @@ -68,6 +69,15 @@ public static BureauJwtAuthentication getActiveUsersBureauJwtAuthentication() { throw new MojException.Forbidden("User must be authorised with BureauJwtAuthentication", null); } + public static PublicJwtAuthentication getActiveUsersPublicJwtAuthentication() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + Authentication authentication = securityContext.getAuthentication(); + if (authentication instanceof PublicJwtAuthentication publicJwtAuthentication) { + return publicJwtAuthentication; + } + throw new MojException.Forbidden("User must be authorised with BureauJwtAuthentication", null); + } + public static BureauJwtPayload getActiveUsersBureauPayload() { Object principal = getActiveUsersBureauJwtAuthentication().getPrincipal(); diff --git a/src/test/java/uk/gov/hmcts/juror/api/bureau/scheduler/UrgentStatusSchedulerTest.java b/src/test/java/uk/gov/hmcts/juror/api/bureau/scheduler/UrgentStatusSchedulerTest.java index 663b7b95b..1e9e91ae8 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/bureau/scheduler/UrgentStatusSchedulerTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/bureau/scheduler/UrgentStatusSchedulerTest.java @@ -17,6 +17,7 @@ import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDateTime; import java.util.LinkedList; @@ -39,6 +40,8 @@ public class UrgentStatusSchedulerTest { private JurorDigitalResponseRepositoryMod jurorResponseRepo; @Mock private JurorPaperResponseRepositoryMod paperJurorResponseRepo; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @Mock private UserService userService; @@ -67,7 +70,7 @@ public void setUp() { jurorBureauDetail.setHearingDate(responseReceived.toLocalDate()); DigitalResponse jurorResponse = new DigitalResponse(); - jurorResponse.setProcessingStatus(uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus.TODO); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); jurorResponse.setDateReceived(responseReceived); poolDetails = new JurorPool(); @@ -79,7 +82,7 @@ public void setUp() { DigitalResponse response = new DigitalResponse(); response.setJurorNumber("12345678"); response.setDateReceived(LocalDateTime.from(now.minusHours(1))); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response.setUrgent(false); responseBacklog.add(response); diff --git a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauBacklogCountServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauBacklogCountServiceImplTest.java index 8376ae32f..988f523c0 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauBacklogCountServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauBacklogCountServiceImplTest.java @@ -10,6 +10,7 @@ import uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDateTime; import java.util.LinkedList; @@ -25,6 +26,9 @@ public class BureauBacklogCountServiceImplTest { @Mock private JurorDigitalResponseRepositoryMod responseRepo; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; + @InjectMocks private BureauBacklogCountServiceImpl backlogCountService; @@ -32,6 +36,7 @@ public class BureauBacklogCountServiceImplTest { private List backlog; + @Before public void setUp() { @@ -47,32 +52,32 @@ public void setUp() { } DigitalResponse response1 = new DigitalResponse(); response1.setUrgent(true); - response1.setProcessingStatus(ProcessingStatus.TODO); + response1.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response1.setStaff(null); backlog.add(response1); DigitalResponse response2 = new DigitalResponse(); response2.setUrgent(true); - response2.setProcessingStatus(ProcessingStatus.TODO); + response2.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response2.setStaff(null); backlog.add(response2); DigitalResponse response3 = new DigitalResponse(); response3.setUrgent(false); - response3.setProcessingStatus(ProcessingStatus.TODO); + response3.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response3.setStaff(null); backlog.add(response3); DigitalResponse response4 = new DigitalResponse(); response4.setUrgent(false); - response4.setProcessingStatus(ProcessingStatus.TODO); + response4.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response4.setStaff(null); backlog.add(response4); DigitalResponse response5 = new DigitalResponse(); response5.setUrgent(false); - response5.setProcessingStatus(ProcessingStatus.TODO); + response5.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response5.setStaff(null); backlog.add(response5); diff --git a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauJurorDetailUrgencyTest.java b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauJurorDetailUrgencyTest.java index 32944aa60..2e18cd03c 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauJurorDetailUrgencyTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/BureauJurorDetailUrgencyTest.java @@ -12,6 +12,7 @@ import uk.gov.hmcts.juror.api.moj.domain.ModJurorDetail; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.DigitalResponse; import uk.gov.hmcts.juror.api.moj.repository.AppSettingRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.DayOfWeek; import java.time.LocalDate; @@ -53,6 +54,8 @@ public class BureauJurorDetailUrgencyTest { @Mock private AppSettingRepository mockAppSettingRepository; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks private UrgencyServiceImpl urgency; @@ -77,7 +80,7 @@ public void setUp() throws Exception { testDetail.setHearingDate(hearingDateValid.toLocalDate()); jurorResponse = new DigitalResponse(); - jurorResponse.setProcessingStatus(uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus.TODO); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); jurorResponse.setDateReceived(responseReceived); poolDetails = new JurorPool(); @@ -107,7 +110,6 @@ public void testUrgentFlagUrgentThresholdJdb810() throws Exception { final LocalDate urgentHearingDate = (hearingDateUrgent.plusDays(1L).plusHours(1L).toLocalDate()); testDetail.setHearingDate(urgentHearingDate); poolDetails.setNextDate(urgentHearingDate); - // poolDetails.setReadOnly(Boolean.FALSE); poolDetails.setOwner(OWNER_IS_BUREAU); diff --git a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImplTest.java index 4de887a2e..dd2c3e662 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseDisqualifyServiceImplTest.java @@ -128,12 +128,10 @@ public void disqualifyJuror_happy() throws Exception { // assertions assertThat(result).isTrue(); verify(jurorResponseRepository).findByJurorNumber(any(String.class)); - verify(jurorResponse).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(mergeService).mergeResponse(jurorResponse, login); - verify(jurorResponseAuditRepository).save(any(JurorResponseAuditMod.class)); - - verify(poolDetails,times(3)).getJuror(); + verify(poolDetails, times(3)).getJuror(); verify(juror).setResponded(true); verify(juror).setDisqualifyDate(any(LocalDate.class)); verify(juror).setDisqualifyCode(disqualifyCode); @@ -143,7 +141,7 @@ public void disqualifyJuror_happy() throws Exception { verify(poolDetails).setNextDate(null); verify(poolRepository).save(poolDetails); - verify(jurorHistoryService).createDisqualifyHistory(poolDetails,disqualifyCode); + verify(jurorHistoryService).createDisqualifyHistory(poolDetails, disqualifyCode); verify(printDataService).printWithdrawalLetter(poolDetails); } @@ -172,7 +170,7 @@ public void disqualifyJuror_unhappy_disqualifyCodeNotValid() throws Exception { // assertions assertThat(e.getClass()).isEqualTo(DisqualifyException.RequestedCodeNotValid.class); verify(jurorResponseRepository, times(0)).findByJurorNumber(any(String.class)); - verify(jurorResponse, times(0)).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse, times(0)).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(jurorResponseRepository, times(0)).save(jurorResponse); verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); @@ -214,7 +212,7 @@ public void disqualifyJuror_unhappy_jurorNotFound() throws Exception { // assertions assertThat(e.getClass()).isEqualTo(DisqualifyException.JurorNotFound.class); verify(jurorResponseRepository, times(1)).findByJurorNumber(any(String.class)); - verify(jurorResponse, times(0)).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse, times(0)).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(jurorResponseRepository, times(0)).save(jurorResponse); verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); diff --git a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImplTest.java index 179cf38e7..da5a6f3ca 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseExcusalServiceImplTest.java @@ -125,11 +125,9 @@ public void excuseJuror_happy() throws Exception { // assertions assertThat(result).isEqualTo(true); verify(jurorResponseRepository).findByJurorNumber(any(String.class)); - verify(jurorResponse).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(mergeService).mergeResponse(jurorResponse, login); - verify(jurorResponseAuditRepository).save(any(JurorResponseAuditMod.class)); - verify(poolDetails, times(3)).getJuror(); verify(juror).setResponded(true); verify(juror).setExcusalDate(any(LocalDate.class)); @@ -168,7 +166,7 @@ public void excuseJuror_unhappy_excusalCodeNotValid() throws Exception { // assertions assertThat(e.getClass()).isEqualTo(ExcusalException.RequestedCodeNotValid.class); verify(jurorResponseRepository, times(0)).findByJurorNumber(any(String.class)); - verify(jurorResponse, times(0)).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse, times(0)).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(jurorResponseRepository, times(0)).save(jurorResponse); verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); @@ -210,7 +208,7 @@ public void excuseJuror_unhappy_jurorNotFound() throws Exception { // assertions assertThat(e.getClass()).isEqualTo(ExcusalException.JurorNotFound.class); verify(jurorResponseRepository, times(1)).findByJurorNumber(any(String.class)); - verify(jurorResponse, times(0)).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse, times(0)).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(jurorResponseRepository, times(0)).save(jurorResponse); verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); @@ -259,11 +257,9 @@ public void rejectExcusalRequest_happy() throws Exception { // assertions assertThat(result).isEqualTo(true); verify(jurorResponseRepository).findByJurorNumber(any(String.class)); - verify(jurorResponse).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(mergeService).mergeResponse(jurorResponse, login); - verify(jurorResponseAuditRepository).save(any(JurorResponseAuditMod.class)); - verify(poolDetails, times(4)).getJuror(); verify(juror).setResponded(true); verify(juror).setExcusalDate(any(LocalDate.class)); @@ -303,7 +299,7 @@ public void rejectExcusalRequest_unhappy_excusalCodeNotValid() throws Exception // assertions assertThat(e.getClass()).isEqualTo(ExcusalException.RequestedCodeNotValid.class); verify(jurorResponseRepository, times(0)).findByJurorNumber(any(String.class)); - verify(jurorResponse, times(0)).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse, times(0)).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(mergeService, times(0)).mergeResponse(jurorResponse, login); verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); @@ -342,7 +338,7 @@ public void rejectExcusalRequest_unhappy_jurorNotFound() throws Exception { } catch (ExcusalException e) { // assertions assertThat(e.getClass()).isEqualTo(ExcusalException.JurorNotFound.class); - verify(jurorResponse, times(0)).setProcessingStatus(ProcessingStatus.CLOSED); + verify(jurorResponse, times(0)).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(mergeService, times(0)).mergeResponse(jurorResponse, login); verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); diff --git a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImplTest.java index 433885b25..5b2bf9d95 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/bureau/service/ResponseStatusUpdateServiceImplTest.java @@ -90,7 +90,7 @@ public void updateResponse_awaitingContact_happy() throws Exception { // Verify mock interactions verify(entityManager).detach(mockJurorResponse); verify(mockJurorResponse).setVersion(version); - verify(mockJurorResponse).setProcessingStatus(statusToChangeTo); + verify(mockJurorResponse).setProcessingStatus(auditRepository, statusToChangeTo); verify(jurorResponseRepository).save(mockJurorResponse); // as we're not setting the status to CLOSED, we should not be merging data to Juror @@ -122,7 +122,7 @@ public void updateResponse_awaitingCourtReply_happy() throws Exception { // Verify mock interactions verify(entityManager).detach(mockJurorResponse); verify(mockJurorResponse).setVersion(version); - verify(mockJurorResponse).setProcessingStatus(statusToChangeTo); + verify(mockJurorResponse).setProcessingStatus(auditRepository, statusToChangeTo); verify(jurorResponseRepository).save(mockJurorResponse); // as we're not setting the status to CLOSED, we should not be merging data to Juror @@ -154,7 +154,7 @@ public void updateResponse_awaitingTranslation_happy() throws Exception { // Verify mock interactions verify(entityManager).detach(mockJurorResponse); verify(mockJurorResponse).setVersion(version); - verify(mockJurorResponse).setProcessingStatus(statusToChangeTo); + verify(mockJurorResponse).setProcessingStatus(auditRepository, statusToChangeTo); verify(jurorResponseRepository).save(mockJurorResponse); // as we're not setting the status to CLOSED, we should not be merging data to Juror @@ -183,7 +183,7 @@ public void updateResponse_todo_happy() throws Exception { // Verify mock interactions verify(entityManager).detach(mockJurorResponse); verify(mockJurorResponse).setVersion(version); - verify(mockJurorResponse).setProcessingStatus(statusToChangeTo); + verify(mockJurorResponse).setProcessingStatus(auditRepository, statusToChangeTo); verify(jurorResponseRepository).save(mockJurorResponse); // as we're not setting the status to CLOSED, we should not be merging data to Juror @@ -223,7 +223,7 @@ public void updateResponse_closed_happy() throws Exception { // Verify mock interactions verify(entityManager).detach(mockJurorResponse); verify(mockJurorResponse).setVersion(version); - verify(mockJurorResponse).setProcessingStatus(statusToChangeTo); + verify(mockJurorResponse).setProcessingStatus(auditRepository, statusToChangeTo); verify(jurorResponseRepository).save(mockJurorResponse); // as we're setting the status to CLOSED, we should be merging data to Juror @@ -254,7 +254,7 @@ public void updateResponse_alsoUpdatesStaffAssignment_happy() throws Exception { // Verify mock interactions verify(entityManager).detach(mockJurorResponse); verify(mockJurorResponse).setVersion(version); - verify(mockJurorResponse).setProcessingStatus(statusToChangeTo); + verify(mockJurorResponse).setProcessingStatus(auditRepository, statusToChangeTo); verify(jurorResponseRepository).save(mockJurorResponse); // as we're not setting the status to CLOSED, we should not be merging data to Juror diff --git a/src/test/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImplTest.java index 1e501d598..8805ad819 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/juror/service/StraightThroughProcessorImplTest.java @@ -8,6 +8,7 @@ import org.mockito.junit.MockitoJUnitRunner; import uk.gov.hmcts.juror.api.bureau.domain.DisCode; import uk.gov.hmcts.juror.api.bureau.service.ResponseMergeService; +import uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus; import uk.gov.hmcts.juror.api.moj.domain.IJurorStatus; import uk.gov.hmcts.juror.api.moj.domain.Juror; import uk.gov.hmcts.juror.api.moj.domain.JurorHistory; @@ -117,7 +118,7 @@ public void processDeceasedExcusal_happyPath_jurorSuccessfullyExcused() { // check excusal was successful verify(mergeService).mergeResponse(any(DigitalResponse.class), eq(AUTO_USER)); - verify(jurorResponseAuditRepository).save(any(JurorResponseAuditMod.class)); + verify(jurorResponse).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); verify(jurorPool, times(3)).getJuror(); verify(juror, times(1)).setResponded(true); @@ -224,9 +225,9 @@ public void processAgeExcusal_happyPath_jurorSuccessfullyExcused_exactlyTooOld() // process response straightThroughProcessor.processAgeExcusal(jurorResponse); + verify(jurorResponse).setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); // check excusal was successful verify(mergeService).mergeResponse(any(DigitalResponse.class), eq(AUTO_USER)); - verify(jurorResponseAuditRepository).save(any(JurorResponseAuditMod.class)); verify(jurorPool, times(3)).getJuror(); verify(juror, times(1)).setResponded(true); @@ -239,7 +240,7 @@ public void processAgeExcusal_happyPath_jurorSuccessfullyExcused_exactlyTooOld() verify(poolRepository).save(any(JurorPool.class)); verify(partHistRepository, times(1)).save(any(JurorHistory.class)); - verify(jurorHistoryService).createWithdrawHistory(jurorPool,null,"A"); + verify(jurorHistoryService).createWithdrawHistory(jurorPool, null, "A"); verify(printDataService).printWithdrawalLetter(any(JurorPool.class)); @@ -269,9 +270,9 @@ public void processAgeExcusal_happyPath_jurorSuccessfullyExcused_exactlyTooYoung // process response straightThroughProcessor.processAgeExcusal(jurorResponse); - // check excusal was successful + verify(jurorResponse).setProcessingStatus(jurorResponseAuditRepository, + ProcessingStatus.CLOSED); // check excusal was successful verify(mergeService).mergeResponse(any(DigitalResponse.class), eq(AUTO_USER)); - verify(jurorResponseAuditRepository).save(any(JurorResponseAuditMod.class)); verify(jurorPool, times(3)).getJuror(); verify(juror).setResponded(true); @@ -283,7 +284,7 @@ public void processAgeExcusal_happyPath_jurorSuccessfullyExcused_exactlyTooYoung verify(poolRepository).save(any(JurorPool.class)); verify(partHistRepository, times(1)).save(any(JurorHistory.class)); - verify(jurorHistoryService).createWithdrawHistory(jurorPool,null,"A"); + verify(jurorHistoryService).createWithdrawHistory(jurorPool, null, "A"); verify(printDataService).printWithdrawalLetter(jurorPool); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/domain/JurorPaperResponseTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/domain/JurorPaperResponseTest.java index e45a18878..2ab7a63f9 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/domain/JurorPaperResponseTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/domain/JurorPaperResponseTest.java @@ -11,12 +11,14 @@ import org.springframework.test.context.junit4.SpringRunner; import uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus; import uk.gov.hmcts.juror.api.moj.domain.jurorresponse.PaperResponse; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; import static uk.gov.hmcts.juror.api.TestUtils.buildStringToLength; @RunWith(SpringRunner.class) @@ -572,7 +574,7 @@ public void test_setProcessingStatus_valid() { response.setAddressLine1("Test"); response.setDateReceived(LocalDateTime.now()); response.setJurorNumber("123456789"); - response.setProcessingStatus(ProcessingStatus.AWAITING_CONTACT); + response.setProcessingStatus(mock(JurorResponseAuditRepositoryMod.class), ProcessingStatus.AWAITING_CONTACT); Set> violations = validator.validate(response); assertThat(violations).as("No validation violations expected").isEmpty(); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceTest.java index bb4feda04..d761fa3fd 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/DeceasedResponseServiceTest.java @@ -1,10 +1,14 @@ package uk.gov.hmcts.juror.api.moj.service; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import uk.gov.hmcts.juror.api.TestUtils; import uk.gov.hmcts.juror.api.config.bureau.BureauJwtPayload; import uk.gov.hmcts.juror.api.juror.domain.CourtLocation; import uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus; @@ -25,6 +29,7 @@ import uk.gov.hmcts.juror.api.moj.repository.JurorRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseCommonRepositoryMod; import java.time.LocalDate; @@ -46,6 +51,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@ExtendWith(SpringExtension.class) class DeceasedResponseServiceTest { @Mock private JurorHistoryRepository jurorHistoryRepository; @@ -63,8 +69,8 @@ class DeceasedResponseServiceTest { private JurorDigitalResponseRepositoryMod jurorDigitalResponseRepository; @Mock private ContactLogRepository contactLogRepository; - - public static final String UNABLE_TO_ATTEND = "UA"; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks private DeceasedResponseServiceImpl deceasedResponseService; @@ -72,25 +78,14 @@ class DeceasedResponseServiceTest { @BeforeEach void beforeEach() { - jurorHistoryRepository = mock(JurorHistoryRepository.class); - contactCodeRepository = mock(ContactCodeRepository.class); - jurorRepository = mock(JurorRepository.class); - jurorPoolRepository = mock(JurorPoolRepository.class); - jurorResponseCommonRepositoryMod = mock(JurorResponseCommonRepositoryMod.class); - jurorPaperResponseRepository = mock(JurorPaperResponseRepositoryMod.class); - jurorDigitalResponseRepository = mock(JurorDigitalResponseRepositoryMod.class); - contactLogRepository = mock(ContactLogRepository.class); - - this.deceasedResponseService = new DeceasedResponseServiceImpl( - contactCodeRepository, - jurorHistoryRepository, - jurorPoolRepository, - jurorRepository, - jurorPaperResponseRepository, - jurorDigitalResponseRepository, - jurorResponseCommonRepositoryMod, - contactLogRepository - ); + TestUtils.mockSecurityUtil(BureauJwtPayload.builder() + .login("TEST_LOGIN") + .build()); + } + + @AfterEach + void afterEach() { + TestUtils.afterAll(); } @Test @@ -141,6 +136,7 @@ void jurorRecordIsNotOwned() { verify(jurorPoolRepository, never()).save(any()); } + @Test void markJurorAsDeceasedPaperResponseExistsFlagTrue() { String owner = "400"; @@ -166,14 +162,14 @@ void markJurorAsDeceasedPaperResponseExistsFlagTrue() { IContactCode.UNABLE_TO_ATTEND.getDescription()); when(contactCodeRepository.findById( IContactCode.UNABLE_TO_ATTEND.getCode())).thenReturn(Optional.of(contactCode)); - + when(jurorPaperResponseRepository.save(any())).thenReturn(mock(PaperResponse.class)); deceasedResponseService.markAsDeceased(buildPayload(owner), markAsDeceasedDto); verify(jurorPoolRepository, times(1)) .findByJurorJurorNumberAndIsActiveOrderByPoolReturnDateDesc(any(), anyBoolean()); verify(jurorPoolRepository, times(1)).save(any()); verify(contactCodeRepository, times(1)).findById(any()); - verify(jurorPaperResponseRepository, times(1)).save(any()); + verify(jurorPaperResponseRepository, times(2)).save(any()); verify(contactLogRepository, times(1)).saveAndFlush(any()); } @@ -271,7 +267,7 @@ void markJurorAsDeceasedDigitalResponseExists() { IContactCode.UNABLE_TO_ATTEND.getDescription()); when(contactCodeRepository.findById( IContactCode.UNABLE_TO_ATTEND.getCode())).thenReturn(Optional.of(contactCode)); - + DigitalResponse jurorResponse = new DigitalResponse(); jurorResponse.setJurorNumber(jurorNumber); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImplTest.java index 166e0201b..20dcdc78b 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/ExcusalResponseServiceImplTest.java @@ -33,6 +33,7 @@ import uk.gov.hmcts.juror.api.moj.repository.UserRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDate; import java.time.LocalDateTime; @@ -73,6 +74,8 @@ public class ExcusalResponseServiceImplTest { private JurorHistoryRepository jurorHistoryRepository; @Mock private PrintDataService printDataService; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks private ExcusalResponseServiceImpl excusalResponseService; @@ -370,7 +373,7 @@ public void test_excusalRequest_paperResponse_alreadyClosed() { final ExcusalDecisionDto excusalDecisionDto = createTestExcusalDecisionRequest(); PaperResponse jurorPaperResponse = createTestJurorPaperResponse(JUROR_NUMBER); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); excusalDecisionDto.setExcusalDecision(ExcusalDecision.GRANT); Mockito.doReturn(jurorPaperResponse).when(jurorPaperResponseRepository).findByJurorNumber(JUROR_NUMBER); @@ -407,7 +410,7 @@ public void test_excusalRequest_digitalResponse_alreadyClosed() { excusalDecisionDto.setExcusalDecision(ExcusalDecision.GRANT); DigitalResponse jurorResponse = createTestJurorDigitalResponse(JUROR_NUMBER); - jurorResponse.setProcessingStatus(ProcessingStatus.CLOSED); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); Mockito.doReturn(jurorResponse).when(jurorResponseRepository).findByJurorNumber(JUROR_NUMBER); JurorPool jurorPool = new JurorPool(); @@ -785,7 +788,7 @@ private PaperResponse createTestJurorPaperResponse(String jurorNumber) { response.setConvictions(false); response.setSigned(true); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); return response; } @@ -815,7 +818,7 @@ private DigitalResponse createTestJurorDigitalResponse(String jurorNumber) { response.setBail(false); response.setConvictions(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); return response; } diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/JurorPaperResponseServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/JurorPaperResponseServiceImplTest.java index 95d0e0ce7..53cbba86f 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/JurorPaperResponseServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/JurorPaperResponseServiceImplTest.java @@ -44,6 +44,7 @@ import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorReasonableAdjustmentRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseCjsEmploymentRepositoryMod; import java.time.LocalDate; @@ -92,7 +93,8 @@ public class JurorPaperResponseServiceImplTest { private WelshCourtLocationRepository welshCourtLocationRepository; @Mock private StraightThroughProcessorService straightThroughProcessorService; - + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks private JurorPaperResponseServiceImpl jurorPaperResponseService; @@ -1503,7 +1505,7 @@ private PaperResponse createTestJurorResponse(String jurorNumber) { Mockito.doReturn(Collections.singletonList(adjustment)).when(response).getReasonableAdjustments(); response.setSigned(true); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); response.setStaff(User.builder().username("SOME_USER").build()); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImplTest.java index 5cad3d161..e6e9b6ad5 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/StraightThroughProcessorServiceImplTest.java @@ -28,6 +28,7 @@ import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorReasonableAdjustmentRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseCjsEmploymentRepositoryMod; import uk.gov.hmcts.juror.api.validation.ResponseInspector; @@ -67,6 +68,8 @@ public class StraightThroughProcessorServiceImplTest { private ResponseInspector responseInspector; @Mock private SummonsReplyMergeService mergeService; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks private StraightThroughProcessorServiceImpl straightThroughProcessorService; @@ -525,7 +528,7 @@ public void test_isValidForStraightThroughAcceptance_happyPath() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -550,7 +553,7 @@ public void test_isValidForStraightThroughAcceptance_titleChanged() { juror.setTitle(null); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -574,7 +577,7 @@ public void test_isValidForStraightThroughAcceptance_firstNameChanged() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setFirstName(""); @@ -599,7 +602,7 @@ public void test_isValidForStraightThroughAcceptance_lastNameChanged() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setLastName(null); @@ -625,7 +628,7 @@ public void test_isValidForStraightThroughAcceptance_address1Changed() { juror.setAddressLine1("Some Address 1"); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -650,7 +653,7 @@ public void test_isValidForStraightThroughAcceptance_address2Changed() { juror.setAddressLine2("Some Address 2"); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -674,7 +677,7 @@ public void test_isValidForStraightThroughAcceptance_address3Changed() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setAddressLine3("Some Address 3"); @@ -699,7 +702,7 @@ public void test_isValidForStraightThroughAcceptance_address4Changed() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setAddressLine4("Some Town/City"); @@ -725,7 +728,7 @@ public void test_isValidForStraightThroughAcceptance_address5Changed() { juror.setAddressLine5("Some Address 5"); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -749,7 +752,7 @@ public void test_isValidForStraightThroughAcceptance_postcodeChanged() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setPostcode(null); @@ -774,7 +777,7 @@ public void test_isValidForStraightThroughAcceptance_noDateOfBirth() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setDateOfBirth(null); @@ -799,7 +802,7 @@ public void test_isValidForStraightThroughAcceptance_invalidJurorAge() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -823,7 +826,7 @@ public void test_isValidForStraightThroughAcceptance_thirdParty() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setRelationship("Brother"); @@ -852,7 +855,7 @@ public void test_isValidForStraightThroughAcceptance_invalidJurorStatus() { jurorPool.setStatus(jurorStatus); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); Mockito.doReturn(Collections.singletonList(jurorPool)).when(jurorPoolRepository) @@ -876,7 +879,7 @@ public void test_isValidForStraightThroughAcceptance_invalidResidency_false() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setResidency(false); @@ -901,7 +904,7 @@ public void test_isValidForStraightThroughAcceptance_invalidResidency_null() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setResidency(null); @@ -926,7 +929,7 @@ public void test_isValidForStraightThroughAcceptance_invalidMentalHealthAct_true setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setMentalHealthAct(true); @@ -951,7 +954,7 @@ public void test_isValidForStraightThroughAcceptance_invalidMentalHealthAct_null setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setMentalHealthAct(null); @@ -976,7 +979,7 @@ public void test_isValidForStraightThroughAcceptance_invalidMentalHealthCapacity setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setMentalHealthCapacity(true); @@ -1001,7 +1004,7 @@ public void test_isValidForStraightThroughAcceptance_invalidMentalHealthCapacity setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setMentalHealthCapacity(null); @@ -1026,7 +1029,7 @@ public void test_isValidForStraightThroughAcceptance_invalidBail_true() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setBail(true); @@ -1051,7 +1054,7 @@ public void test_isValidForStraightThroughAcceptance_invalidBail_null() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setBail(null); @@ -1076,7 +1079,7 @@ public void test_isValidForStraightThroughAcceptance_invalidConvictions() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setConvictions(true); @@ -1101,7 +1104,7 @@ public void test_isValidForStraightThroughAcceptance_invalidConvictions_null() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setConvictions(null); @@ -1126,7 +1129,7 @@ public void test_isValidForStraightThroughAcceptance_invalidSignature_false() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setSigned(false); @@ -1151,7 +1154,7 @@ public void test_isValidForStraightThroughAcceptance_invalidSignature_null() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setSigned(null); @@ -1176,7 +1179,7 @@ public void test_isValidForStraightThroughAcceptance_excusalRequested() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setExcusal(true); @@ -1201,7 +1204,7 @@ public void test_isValidForStraightThroughAcceptance_deferralRequested() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setDeferral(true); @@ -1226,7 +1229,7 @@ public void test_isValidForStraightThroughAcceptance_noReplyTypeSelected() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); paperResponse.setDeferral(null); paperResponse.setExcusal(null); @@ -1252,7 +1255,7 @@ public void test_isValidForStraightThroughAcceptance_cjsEmploymentExists() { setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); JurorResponseCjsEmployment cjsEmployment = new JurorResponseCjsEmployment(); @@ -1282,7 +1285,7 @@ public void test_isValidForStraightThroughAcceptance_reasonableAdjustmentRequest setJurorPoolPersonalDetails(juror); PaperResponse paperResponse = createPaperResponse(dateOfBirth); - paperResponse.setProcessingStatus(ProcessingStatus.TODO); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); setPaperResponseDetails(paperResponse); JurorReasonableAdjustment adjustment1 = new JurorReasonableAdjustment(); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImplTest.java index 2e58d5c9d..c05f462e0 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/SummonsReplyStatusUpdateServiceImplTest.java @@ -147,7 +147,7 @@ public void test_updateJurorResponseStatus_notClosingResponse() { PaperResponse response = new PaperResponse(); response.setJurorNumber(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(auditRepository, ProcessingStatus.TODO); final BureauJwtPayload payload = buildPayload(); @@ -187,7 +187,7 @@ public void test_updateJurorResponseStatus_closingResponse_happyPath() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.CLOSED); + response.setProcessingStatus(auditRepository, ProcessingStatus.CLOSED); response.setPhoneNumber("07123456789"); response.setAltPhoneNumber("01234567890"); @@ -238,7 +238,7 @@ public void test_updateJurorResponseStatus_closingResponse_noJurorAudits() throw PaperResponse response = createPaperResponseFromJurorPool(juror); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.CLOSED); + response.setProcessingStatus(auditRepository, ProcessingStatus.CLOSED); response.setPhoneNumber("01234567890"); response.setAltPhoneNumber("07123456789"); @@ -271,7 +271,7 @@ public void test_updateJurorResponseStatus_closingResponse_alreadyProcessed() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(true); - response.setProcessingStatus(ProcessingStatus.CLOSED); + response.setProcessingStatus(auditRepository, ProcessingStatus.CLOSED); final BureauJwtPayload payload = buildPayload(); @@ -302,7 +302,7 @@ public void test_updateJurorResponseStatus_closingResponse_noJurorRecord() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.CLOSED); + response.setProcessingStatus(auditRepository, ProcessingStatus.CLOSED); BureauJwtPayload payload = buildPayload(); @@ -326,7 +326,7 @@ public void test_updateJurorResponseStatus_closingResponse_multipleJurorRecords( String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.CLOSED); + response.setProcessingStatus(auditRepository, ProcessingStatus.CLOSED); final BureauJwtPayload payload = buildPayload(); @@ -354,7 +354,7 @@ public void test_updateJurorResponseStatus_bureauUser_bureauOwnedJurorPool() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(auditRepository, ProcessingStatus.TODO); final BureauJwtPayload payload = buildPayload(); @@ -383,7 +383,7 @@ public void test_updateJurorResponseStatus_bureauUser_courtOwnedJurorPool() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(auditRepository, ProcessingStatus.TODO); final BureauJwtPayload payload = buildPayload(); @@ -436,7 +436,7 @@ public void test_updateJurorResponseStatus_courtUser_courtOwnedJurorPool() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(auditRepository, ProcessingStatus.TODO); BureauJwtPayload payload = buildPayload(); payload.setOwner("415"); @@ -470,7 +470,7 @@ public void test_updateJurorResponseStatus_courtUser_bureauOwnedJurorPool() { String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(auditRepository, ProcessingStatus.TODO); BureauJwtPayload payload = buildPayload(); payload.setOwner("415"); @@ -2275,7 +2275,7 @@ public void test_updateJurorResponseStatus_processingAlreadyComplete_NonResponde String jurorNumber = "123456789"; PaperResponse response = createPaperResponse(jurorNumber); response.setProcessingComplete(true); - response.setProcessingStatus(ProcessingStatus.CLOSED); + response.setProcessingStatus(auditRepository, ProcessingStatus.CLOSED); response.setPhoneNumber("07123456789"); response.setAltPhoneNumber("01234567890"); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/letter/RequestInformationLetterServiceTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/letter/RequestInformationLetterServiceTest.java index 7b544fa41..0e9830c23 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/letter/RequestInformationLetterServiceTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/letter/RequestInformationLetterServiceTest.java @@ -19,6 +19,7 @@ import uk.gov.hmcts.juror.api.moj.enumeration.letter.MissingInformation; import uk.gov.hmcts.juror.api.moj.exception.MojException; import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.letter.RequestLetterRepository; import uk.gov.hmcts.juror.api.moj.service.JurorHistoryService; import uk.gov.hmcts.juror.api.moj.service.PrintDataService; @@ -56,6 +57,8 @@ public class RequestInformationLetterServiceTest { private PrintDataService printDataService; @Mock private JurorHistoryService jurorHistoryService; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks RequestInformationLetterServiceImpl requestInformationLetterService; @@ -68,7 +71,7 @@ public void queueRequestLetter_BureauUser_DigitalResponse_HappyPath() { String jurorNumber = "123456789"; DigitalResponse jurorResponse = new DigitalResponse(); - jurorResponse.setProcessingStatus(ProcessingStatus.TODO); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); final BureauJwtPayload payload = TestUtils.createJwt(owner, "BUREAU_USER"); @@ -104,7 +107,7 @@ public void queueRequestLetter_BureauUser_PaperResponse_SignatureMissing() { String jurorNumber = "123456789"; PaperResponse jurorPaperResponse = new PaperResponse(); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.TODO); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); BureauJwtPayload payload = TestUtils.createJwt(owner, "BUREAU_USER"); @@ -133,7 +136,7 @@ public void queueRequestLetter_BureauUser_PaperResponse_Welsh() { String jurorNumber = "123456789"; PaperResponse jurorPaperResponse = new PaperResponse(); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.TODO); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); final BureauJwtPayload payload = TestUtils.createJwt(owner, "BUREAU_USER"); @@ -172,7 +175,7 @@ public void queueRequestLetter_BureauUser_JurorRecordDoesNotExist() { String jurorNumber = "123456789"; PaperResponse jurorPaperResponse = new PaperResponse(); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.AWAITING_CONTACT); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.AWAITING_CONTACT); // an empty list of pool members required for test List jurorPools = new ArrayList<>(); @@ -202,7 +205,7 @@ public void queueRequestLetter_BureauUser_JurorRecordNotOwned() { String jurorNumber = "123456789"; PaperResponse jurorPaperResponse = new PaperResponse(); - jurorPaperResponse.setProcessingStatus(ProcessingStatus.AWAITING_CONTACT); + jurorPaperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.AWAITING_CONTACT); // an empty list of pool members required for test Juror juror = new Juror(); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorDueToAgeServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorDueToAgeServiceImplTest.java index df4545348..bdb630ec9 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorDueToAgeServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorDueToAgeServiceImplTest.java @@ -37,6 +37,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; @@ -44,15 +45,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; -import static uk.gov.hmcts.juror.api.moj.domain.IJurorStatus.DISQUALIFIED; @RunWith(SpringRunner.class) @SuppressWarnings("PMD.TooManyMethods") public class DisqualifyJurorDueToAgeServiceImplTest { private static final String BUREAU_USER = "400"; private static final String JUROR_NUMBER = "123456789"; - private static final String OTHER_INFORMATION = "Code A"; - private static final String POOL_NUMBER = "416230101"; @Mock private JurorPoolRepository jurorPoolRepository; @@ -91,8 +89,8 @@ public void disqualifyDueToAge_bureau_partialPaperResponsePresent_happyPath() { final ArgumentCaptor jurorPoolEntityCaptor = ArgumentCaptor.forClass(JurorPool.class); BureauJwtPayload courtPayload = buildBureauPayload(); - List jurorPoolList = createJurorPoolList(JUROR_NUMBER, courtPayload.getOwner()); - PaperResponse paperResponse = createPaperResponse(JUROR_NUMBER); + List jurorPoolList = createJurorPoolList(courtPayload.getOwner()); + PaperResponse paperResponse = createPaperResponse(); when(jurorDigitalResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(null); when(jurorPaperResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(paperResponse); @@ -117,7 +115,7 @@ public void disqualifyDueToAge_bureau_partialPaperResponsePresent_happyPath() { verifySummonsReplyMergeService_Paper(jurorPaperResponseEntityCaptor, userCaptor); //verification of the JurorPoolRepository invocation - verifyJurorPoolRepository(jurorPoolEntityCaptor, Boolean.TRUE, BUREAU_USER, DISQUALIFIED); + verifyJurorPoolRepository(jurorPoolEntityCaptor); //verification of the JurorHistoryRepository invocation verify(jurorHistoryService).createDisqualifyHistory(jurorPoolList.get(0),"A"); @@ -129,7 +127,7 @@ public void disqualifyDueToAge_bureau_partialPaperResponsePresent_happyPath() { verify(assignOnUpdateService, never()).assignToCurrentLogin(any(DigitalResponse.class), anyString()); verify(summonsReplyMergeService, never()).mergeDigitalResponse(any(DigitalResponse.class), anyString()); - verify(jurorResponseAuditRepository, never()).save(any(JurorResponseAuditMod.class)); + assertThat(paperResponse.getProcessingStatus()).isEqualTo(ProcessingStatus.CLOSED); } @@ -140,21 +138,19 @@ public void disqualifyDueToAge_bureau_partialDigitalResponsePresent_happyPath() ArgumentCaptor.forClass(DigitalResponse.class); final ArgumentCaptor userCaptor = ArgumentCaptor.forClass(String.class); final ArgumentCaptor jurorPoolEntityCaptor = ArgumentCaptor.forClass(JurorPool.class); - // final ArgumentCaptor printDataServiceArgumentCaptor = - // ArgumentCaptor.forClass(PrintDataService.class); final ArgumentCaptor jurorResponseAuditArgumentCaptor = ArgumentCaptor.forClass(JurorResponseAuditMod.class); - DigitalResponse digitalResponse = createDigitalResponse(JUROR_NUMBER); + DigitalResponse digitalResponse = createDigitalResponse(); digitalResponse.setProcessingComplete(false); digitalResponse.setCompletedAt(null); - digitalResponse.setProcessingStatus(ProcessingStatus.TODO); + digitalResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); when(jurorDigitalResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(digitalResponse); when(jurorPaperResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(null); BureauJwtPayload courtPayload = buildBureauPayload(); - List jurorPoolList = createJurorPoolList(JUROR_NUMBER, courtPayload.getOwner()); + List jurorPoolList = createJurorPoolList(courtPayload.getOwner()); doReturn(jurorPoolList).when(jurorPoolRepository) .findByJurorJurorNumberAndIsActiveOrderByPoolReturnDateDesc(anyString(), anyBoolean()); @@ -187,7 +183,7 @@ public void disqualifyDueToAge_bureau_partialDigitalResponsePresent_happyPath() assertThat(userCaptor.getValue()).isEqualTo(BUREAU_USER); //verification of the JurorPoolRepository activity - verifyJurorPoolRepository(jurorPoolEntityCaptor, Boolean.TRUE, BUREAU_USER, DISQUALIFIED); + verifyJurorPoolRepository(jurorPoolEntityCaptor); //verification of the JurorHistoryRepository activity @@ -197,9 +193,9 @@ public void disqualifyDueToAge_bureau_partialDigitalResponsePresent_happyPath() // TODO - verify the printDataServiceArgumentCaptor and approach to letters for disqualification //verification of the JurorResponseAuditRepository - verify(jurorResponseAuditRepository, times(1)) + verify(jurorResponseAuditRepository, times(3)) .save(jurorResponseAuditArgumentCaptor.capture()); - verify(jurorResponseAuditRepository, times(1)).save(any(JurorResponseAuditMod.class)); + verify(jurorResponseAuditRepository, times(3)).save(any(JurorResponseAuditMod.class)); assertThat(jurorResponseAuditArgumentCaptor.getValue().getJurorNumber()).isEqualTo(JUROR_NUMBER); assertThat(jurorResponseAuditArgumentCaptor.getValue().getNewProcessingStatus()) .isEqualTo(ProcessingStatus.CLOSED); @@ -217,13 +213,11 @@ public void disqualifyJuror_bureau_noResponse_happy() { ArgumentCaptor.forClass(PaperResponse.class); final ArgumentCaptor userCaptor = ArgumentCaptor.forClass(String.class); final ArgumentCaptor jurorPoolEntityCaptor = ArgumentCaptor.forClass(JurorPool.class); - // final ArgumentCaptor printDataServiceArgumentCaptor = - // ArgumentCaptor.forClass(PrintDataService.class); final ArgumentCaptor jurorResponseAuditArgumentCaptor = ArgumentCaptor.forClass(JurorResponseAuditMod.class); BureauJwtPayload courtPayload = buildBureauPayload(); - List jurorPoolList = createJurorPoolList(JUROR_NUMBER, courtPayload.getOwner()); + List jurorPoolList = createJurorPoolList(courtPayload.getOwner()); when(jurorDigitalResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(null); when(jurorPaperResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(null); @@ -232,6 +226,9 @@ public void disqualifyJuror_bureau_noResponse_happy() { .findByJurorJurorNumberAndIsActiveOrderByPoolReturnDateDesc(anyString(), anyBoolean()); doReturn(null).when(jurorPoolRepository).save(any(JurorPool.class)); + doAnswer(invocation -> invocation.getArguments()[0]) + .when(jurorPaperResponseRepository).save(any(PaperResponse.class)); + disqualifyJurorServiceImpl.disqualifyJurorDueToAgeOutOfRange(JUROR_NUMBER, courtPayload); //verification of the JurorDigitalResponseRepository @@ -243,37 +240,33 @@ public void disqualifyJuror_bureau_noResponse_happy() { // verification of the JurorPaperResponseRepository verify(jurorPaperResponseRepository, times(1)).findByJurorNumber(jurorNumberCaptor.capture()); assertThat(jurorNumberCaptor.getValue()).isEqualTo(JUROR_NUMBER); - verify(jurorPaperResponseRepository, times(1)).save(any()); + verify(jurorPaperResponseRepository, times(2)).save(any()); //verification of the SummonsReplyMergeService invocation verifySummonsReplyMergeService_Paper(jurorPaperResponseEntityCaptor, userCaptor); //verification of the JurorPoolRepository activity - verifyJurorPoolRepository(jurorPoolEntityCaptor, Boolean.TRUE, BUREAU_USER, DISQUALIFIED); + verifyJurorPoolRepository(jurorPoolEntityCaptor); //verification of the JurorHistoryRepository activity verify(jurorHistoryService).createDisqualifyHistory(jurorPoolList.get(0),"A"); //verification of the DisqualificationLetterRepository invocation // TODO - verify the printDataServiceArgumentCaptor and approach to letters for disqualification - - //verification of the JurorResponseAuditRepository - verify(jurorResponseAuditRepository, times(0)).save(jurorResponseAuditArgumentCaptor.capture()); - verify(jurorResponseAuditRepository, times(0)).save(any(JurorResponseAuditMod.class)); } @Test public void disqualifyJurorDueToAge_bureau_completedDigitalResponse() { - DigitalResponse digitalResponse = createDigitalResponse(JUROR_NUMBER); + DigitalResponse digitalResponse = createDigitalResponse(); digitalResponse.setProcessingComplete(true); digitalResponse.setCompletedAt(LocalDateTime.now()); - digitalResponse.setProcessingStatus(ProcessingStatus.CLOSED); + digitalResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); when(jurorDigitalResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(digitalResponse); when(jurorPaperResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(null); BureauJwtPayload courtPayload = buildBureauPayload(); - List jurorPoolList = createJurorPoolList(JUROR_NUMBER, courtPayload.getOwner()); + List jurorPoolList = createJurorPoolList(courtPayload.getOwner()); doReturn(jurorPoolList).when(jurorPoolRepository) .findByJurorJurorNumberAndIsActiveOrderByPoolReturnDateDesc(anyString(), anyBoolean()); @@ -286,7 +279,7 @@ public void disqualifyJurorDueToAge_bureau_completedDigitalResponse() { verify(jurorDigitalResponseRepository, times(1)).findByJurorNumber(anyString()); verify(assignOnUpdateService, never()).assignToCurrentLogin(any(DigitalResponse.class), anyString()); verify(summonsReplyMergeService, never()).mergeDigitalResponse(any(DigitalResponse.class), anyString()); - verify(jurorResponseAuditRepository, never()).save(any(JurorResponseAuditMod.class)); + assertThat(digitalResponse.getProcessingStatus()).isEqualTo(ProcessingStatus.CLOSED); //Paper related verify(jurorPaperResponseRepository, never()).findById(anyString()); @@ -302,16 +295,16 @@ public void disqualifyJurorDueToAge_bureau_completedDigitalResponse() { @Test public void disqualifyJurorDueToAge_bureau_completedPaperResponse() { - PaperResponse paperResponse = createPaperResponse(JUROR_NUMBER); + PaperResponse paperResponse = createPaperResponse(); paperResponse.setProcessingComplete(true); paperResponse.setCompletedAt(LocalDateTime.now()); - paperResponse.setProcessingStatus(ProcessingStatus.CLOSED); + paperResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.CLOSED); when(jurorPaperResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(paperResponse); when(jurorDigitalResponseRepository.findByJurorNumber(JUROR_NUMBER)).thenReturn(null); BureauJwtPayload courtPayload = buildBureauPayload(); - List jurorPoolList = createJurorPoolList(JUROR_NUMBER, courtPayload.getOwner()); + List jurorPoolList = createJurorPoolList(courtPayload.getOwner()); doReturn(jurorPoolList).when(jurorPoolRepository) .findByJurorJurorNumberAndIsActiveOrderByPoolReturnDateDesc(anyString(), anyBoolean()); @@ -328,8 +321,8 @@ public void disqualifyJurorDueToAge_bureau_completedPaperResponse() { verify(jurorDigitalResponseRepository, never()).findById(anyString()); verify(assignOnUpdateService, never()).assignToCurrentLogin(any(DigitalResponse.class), anyString()); verify(summonsReplyMergeService, never()).mergeDigitalResponse(any(DigitalResponse.class), anyString()); - verify(jurorResponseAuditRepository, never()).save(any(JurorResponseAuditMod.class)); + assertThat(paperResponse.getProcessingStatus()).isEqualTo(ProcessingStatus.CLOSED); //Common verifyNoInteractions(printDataService); verifyNoInteractions(jurorHistoryService); @@ -377,21 +370,21 @@ private void verifySummonsReplyMergeService_Paper(ArgumentCaptor assertThat(userCaptor.getValue()).isEqualTo(BUREAU_USER); } - private void verifyJurorPoolRepository(final ArgumentCaptor jurorPoolEntityCaptor, boolean responded, - String bureauUser, int status) { + private void verifyJurorPoolRepository(final ArgumentCaptor jurorPoolEntityCaptor) { verify(jurorPoolRepository, times(1)).save(jurorPoolEntityCaptor.capture()); JurorPool capturedJurorPool = jurorPoolEntityCaptor.getValue(); Juror capturedJuror = capturedJurorPool.getJuror(); - assertThat(capturedJuror.isResponded()).isEqualTo(responded); + assertThat(capturedJuror.isResponded()).isEqualTo(true); assertThat(capturedJuror.getDisqualifyDate()).isNotNull(); - assertThat(capturedJurorPool.getUserEdtq()).isEqualTo(bureauUser); + assertThat(capturedJurorPool.getUserEdtq()).isEqualTo(DisqualifyJurorDueToAgeServiceImplTest.BUREAU_USER); assertThat(capturedJurorPool.getNextDate()).isNull(); - assertThat(capturedJurorPool.getStatus().getStatus()).isEqualTo(status); + assertThat(capturedJurorPool.getStatus().getStatus()).isEqualTo( + uk.gov.hmcts.juror.api.moj.domain.IJurorStatus.DISQUALIFIED); } - private PaperResponse createPaperResponse(String jurorNumber) { + private PaperResponse createPaperResponse() { PaperResponse response = new PaperResponse(); - response.setJurorNumber(jurorNumber); + response.setJurorNumber(DisqualifyJurorDueToAgeServiceImplTest.JUROR_NUMBER); response.setDateReceived(LocalDateTime.now()); response.setFirstName("FName"); @@ -415,15 +408,15 @@ private PaperResponse createPaperResponse(String jurorNumber) { response.setConvictions(false); response.setSigned(true); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); return response; } - private DigitalResponse createDigitalResponse(String jurorNumber) { + private DigitalResponse createDigitalResponse() { DigitalResponse response = new DigitalResponse(); - response.setJurorNumber(jurorNumber); + response.setJurorNumber(DisqualifyJurorDueToAgeServiceImplTest.JUROR_NUMBER); response.setDateReceived(LocalDateTime.now()); response.setFirstName("FName"); @@ -444,7 +437,7 @@ private DigitalResponse createDigitalResponse(String jurorNumber) { response.setMentalHealthAct(false); response.setBail(false); response.setConvictions(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); return response; } @@ -457,7 +450,7 @@ private BureauJwtPayload buildBureauPayload() { .build(); } - private List createJurorPoolList(String jurorNumber, String owner) { + private List createJurorPoolList(String owner) { final List jurorPoolList = new ArrayList<>(); @@ -476,7 +469,7 @@ private List createJurorPoolList(String jurorNumber, String owner) { poolRequest.setCourtLocation(courtLocation); Juror juror = new Juror(); - juror.setJurorNumber(jurorNumber); + juror.setJurorNumber(DisqualifyJurorDueToAgeServiceImplTest.JUROR_NUMBER); juror.setFirstName("FIRSTNAME"); juror.setLastName("LASTNAME"); juror.setPostcode("M24 4GT"); diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImplTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImplTest.java index 97baaa794..2331a9643 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/service/summonsmanagement/DisqualifyJurorServiceImplTest.java @@ -262,7 +262,6 @@ public void disqualifyJuror_bureau_paper_happy() { verify(assignOnUpdateService, never()).assignToCurrentLogin(any(DigitalResponse.class), anyString()); verify(summonsReplyMergeService, never()).mergeDigitalResponse(any(DigitalResponse.class), anyString()); - verify(jurorResponseAuditRepository, never()).save(any(JurorResponseAuditMod.class)); } @Test @@ -444,7 +443,6 @@ public void disqualifyJuror_existingProcessingStatusIsComplete() { verify(jurorDigitalResponseRepository, times(1)).findByJurorNumber(anyString()); verify(assignOnUpdateService, never()).assignToCurrentLogin(any(DigitalResponse.class), anyString()); verify(summonsReplyMergeService, never()).mergeDigitalResponse(any(DigitalResponse.class), anyString()); - verify(jurorResponseAuditRepository, never()).save(any(JurorResponseAuditMod.class)); //Paper related verify(jurorPaperResponseRepository, never()).findById(anyString()); @@ -498,7 +496,7 @@ private PaperResponse createPaperResponse(String jurorNumber) { response.setConvictions(false); response.setSigned(true); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); return response; } @@ -528,7 +526,7 @@ private DigitalResponse createDigitalResponse(String jurorNumber) { response.setBail(false); response.setConvictions(false); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); return response; } diff --git a/src/test/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtilsTest.java b/src/test/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtilsTest.java index a1ef587c4..580b5d60e 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtilsTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/moj/utils/JurorResponseUtilsTest.java @@ -15,6 +15,7 @@ import uk.gov.hmcts.juror.api.moj.exception.MojException; import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDate; import java.time.LocalDateTime; @@ -24,6 +25,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.BDDAssertions.within; +import static org.mockito.ArgumentMatchers.any; @RunWith(SpringRunner.class) public class JurorResponseUtilsTest { @@ -31,6 +33,8 @@ public class JurorResponseUtilsTest { @Mock JurorPaperResponseRepositoryMod jurorPaperResponseRepositoryMod; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @Mock JurorPoolRepository jurorPoolRepository; @@ -38,18 +42,23 @@ public class JurorResponseUtilsTest { @Test public void test_createMinimalPaperSummonsRecord() { String disqualifiedComment = "Disqualified due to age."; - Juror mockJuror = createMockJuror(JUROR_NUMBER_123456789); + Juror mockJuror = createMockJuror(); LocalDateTime mockLocalDate = LocalDateTime.now(); PaperResponse mockPaperResponse = createMockPaperResponse(mockJuror, mockLocalDate, disqualifiedComment); Mockito.doReturn(mockPaperResponse).when(jurorPaperResponseRepositoryMod) .findByJurorNumber(JUROR_NUMBER_123456789); + Mockito.doReturn(mockPaperResponse).when(jurorPaperResponseRepositoryMod).save(any()); - PaperResponse actualPaperResponse = JurorResponseUtils.createMinimalPaperSummonsRecord(mockJuror, - disqualifiedComment); + PaperResponse actualPaperResponse = + JurorResponseUtils.createMinimalPaperSummonsRecord( + jurorPaperResponseRepositoryMod, jurorResponseAuditRepository, + mockJuror, disqualifiedComment); Assertions.assertThatNoException().isThrownBy(() -> - JurorResponseUtils.createMinimalPaperSummonsRecord(mockJuror, disqualifiedComment)); + JurorResponseUtils.createMinimalPaperSummonsRecord( + jurorPaperResponseRepositoryMod, jurorResponseAuditRepository, + mockJuror, disqualifiedComment)); assertThat(actualPaperResponse.getJurorNumber()).isEqualTo(mockPaperResponse.getJurorNumber()); assertThat(actualPaperResponse.getJurorNumber()).isEqualTo(mockPaperResponse.getJurorNumber()); assertThat(actualPaperResponse.getTitle()).isEqualTo(mockPaperResponse.getTitle()); @@ -138,9 +147,9 @@ private PaperResponse createMockPaperResponse(Juror juror, LocalDateTime mockLoc return mockPaperResponse; } - private Juror createMockJuror(String jurorNumber) { + private Juror createMockJuror() { Juror juror = new Juror(); - juror.setJurorNumber(jurorNumber); + juror.setJurorNumber(JurorResponseUtilsTest.JUROR_NUMBER_123456789); juror.setTitle(null); juror.setFirstName("FNAMEONE"); juror.setLastName("LNAMEONE"); @@ -149,13 +158,12 @@ private Juror createMockJuror(String jurorNumber) { return juror; } - private Juror setMockJurorAddress(Juror juror) { + private void setMockJurorAddress(Juror juror) { juror.setAddressLine1("1 ANY STREET"); juror.setAddressLine2("ANY TOWN"); juror.setAddressLine3("ANYWHERE"); juror.setAddressLine4("ADDRESS4"); juror.setAddressLine5("ADDRESS5"); juror.setPostcode("CH1 2AN"); - return juror; } } \ No newline at end of file diff --git a/src/test/java/uk/gov/hmcts/juror/api/scheduler/UrgentStatusSchedulerTest.java b/src/test/java/uk/gov/hmcts/juror/api/scheduler/UrgentStatusSchedulerTest.java index 0ba078601..5d8bf2082 100644 --- a/src/test/java/uk/gov/hmcts/juror/api/scheduler/UrgentStatusSchedulerTest.java +++ b/src/test/java/uk/gov/hmcts/juror/api/scheduler/UrgentStatusSchedulerTest.java @@ -19,6 +19,7 @@ import uk.gov.hmcts.juror.api.moj.repository.JurorPoolRepository; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorDigitalResponseRepositoryMod; import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorPaperResponseRepositoryMod; +import uk.gov.hmcts.juror.api.moj.repository.jurorresponse.JurorResponseAuditRepositoryMod; import java.time.LocalDate; import java.time.LocalDateTime; @@ -33,12 +34,8 @@ public class UrgentStatusSchedulerTest { private static final String NON_CLOSED_STATUS = ProcessingStatus.TODO.name(); - private ModJurorDetail jurorBureauDetail; - private DigitalResponse jurorResponse; private JurorPool poolDetails; - private LocalDateTime responseReceived; - @Mock private JurorDigitalResponseRepositoryMod jurorResponseRepo; @Mock @@ -52,6 +49,8 @@ public class UrgentStatusSchedulerTest { @Mock private UrgencyService urgencyService; + @Mock + private JurorResponseAuditRepositoryMod jurorResponseAuditRepository; @InjectMocks UrgentStatusScheduler urgentStatusScheduler; @@ -62,18 +61,18 @@ public class UrgentStatusSchedulerTest { @Before public void setUp() { - responseReceived = LocalDateTime.now(); + LocalDateTime responseReceived = LocalDateTime.now(); //set up some known static dates relative to a start point final LocalDate hearingDateValid = LocalDate.now().plusDays(35); - jurorBureauDetail = new ModJurorDetail(); + ModJurorDetail jurorBureauDetail = new ModJurorDetail(); jurorBureauDetail.setProcessingStatus(NON_CLOSED_STATUS); jurorBureauDetail.setDateReceived(responseReceived.toLocalDate()); jurorBureauDetail.setHearingDate(hearingDateValid); - jurorResponse = new DigitalResponse(); - jurorResponse.setProcessingStatus(uk.gov.hmcts.juror.api.juror.domain.ProcessingStatus.TODO); + DigitalResponse jurorResponse = new DigitalResponse(); + jurorResponse.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); jurorResponse.setDateReceived(responseReceived); poolDetails = new JurorPool(); @@ -87,7 +86,7 @@ public void setUp() { response.setJurorNumber("12345678"); response.setDateReceived(LocalDateTime.now()); - response.setProcessingStatus(ProcessingStatus.TODO); + response.setProcessingStatus(jurorResponseAuditRepository, ProcessingStatus.TODO); responseBacklog.add(response); }