diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessor.java index 1d356105c6..2faa6fc579 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessor.java @@ -4,7 +4,6 @@ import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom; import static uk.gov.justice.services.messaging.JsonEnvelope.metadataFrom; -import uk.gov.justice.json.schemas.domains.sjp.queries.CaseDetails; import uk.gov.justice.services.common.converter.JsonObjectToObjectConverter; import uk.gov.justice.services.core.annotation.Handles; import uk.gov.justice.services.core.annotation.ServiceComponent; @@ -12,9 +11,6 @@ import uk.gov.justice.services.fileservice.api.FileServiceException; import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.moj.cpp.sjp.event.decision.ApplicationDecisionSetAside; -import uk.gov.moj.cpp.sjp.event.processor.service.SjpService; -import uk.gov.moj.cpp.sjp.event.processor.service.models.CaseDetailsDecorator; -import uk.gov.moj.cpp.sjp.event.processor.service.notification.EndorsementRemovalNotificationService; import javax.inject.Inject; @@ -32,32 +28,14 @@ public class ApplicationSetAsideProcessor { @ServiceComponent(EVENT_PROCESSOR) @Inject private Sender sender; - @Inject - private SjpService sjpService; - @Inject - private EndorsementRemovalNotificationService endorsementRemovalNotificationService; @Handles(ApplicationDecisionSetAside.EVENT_NAME) public void handleApplicationDecisionSetAside(final JsonEnvelope envelope) throws FileServiceException { sendApplicationSetAsidePublicEvent(envelope); - sendNotificationToDvlaToRemoveEndorsements(envelope); } private void sendApplicationSetAsidePublicEvent(final JsonEnvelope envelope) { LOGGER.info("Sending public.sjp.application-decision-set-aside for caseId: {}", envelope.payloadAsJsonObject().getString("caseId")); sender.send(envelopeFrom(metadataFrom(envelope.metadata()).withName(PUBLIC_APPLICATION_SET_ASIDE_EVENT), envelope.payload())); } - - private void sendNotificationToDvlaToRemoveEndorsements(final JsonEnvelope envelope) throws FileServiceException { - final ApplicationDecisionSetAside decision = converter.convert(envelope.payloadAsJsonObject(), ApplicationDecisionSetAside.class); - final CaseDetails caseDetails = sjpService.getCaseDetails(decision.getCaseId(), envelope); - final CaseDetailsDecorator caseDetailsDecorator = new CaseDetailsDecorator(caseDetails); - - if (endorsementRemovalNotificationService.hasEndorsementsToBeRemoved(caseDetailsDecorator)) { - LOGGER.info("Case has endorsements to be removed. Preparing notification to DVLA for caseId: {}", decision.getCaseId()); - endorsementRemovalNotificationService.generateNotification(caseDetailsDecorator, envelope); - } else { - LOGGER.info("Case noes not have endorsements to be removed for caseId: {}", decision.getCaseId()); - } - } } diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessor.java index 4c0231dc56..4ac552f1da 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessor.java @@ -59,12 +59,15 @@ public void hearingResultReceived(final JsonEnvelope jsonEnvelope) { } hearing.getCourtApplications().stream().forEach(courtApplication -> { final String applicationType = courtApplication.getType().getType(); + final String applicationCode = courtApplication.getType().getCode(); final String applicationId = courtApplication.getId().toString(); - courtApplication.getCourtApplicationCases().stream().filter(CourtApplicationCase::getIsSJP).forEach(courtApplicationCase -> { - final String sjpCaseId = courtApplicationCase.getProsecutionCaseId().toString(); - final String applicationStatus = getApplicationStatus(courtApplication, applicationType); - sendMessage(jsonEnvelope, applicationId, sjpCaseId, applicationStatus); - }); + if(courtApplication.getCourtApplicationCases() != null && courtApplication.getJudicialResults() != null) { + courtApplication.getCourtApplicationCases().stream().filter(CourtApplicationCase::getIsSJP).forEach(courtApplicationCase -> { + final String sjpCaseId = courtApplicationCase.getProsecutionCaseId().toString(); + final String applicationStatus = getApplicationStatus(courtApplication, applicationType, applicationCode); + sendMessage(jsonEnvelope, applicationId, sjpCaseId, applicationStatus); + }); + } }); } @@ -81,13 +84,13 @@ private void sendMessage(final JsonEnvelope jsonEnvelope, final String applicati sender.send(envelopeToSend); } - private String getApplicationStatus(final CourtApplication courtApplication, final String applicationType) { + private String getApplicationStatus(final CourtApplication courtApplication, final String applicationType, final String applicationCode) { final Optional applicationStatus = courtApplication .getJudicialResults() .stream() - .map(judicialResult -> ApplicationResultStatusResolver.getApplicationStatus(applicationType, judicialResult.getJudicialResultTypeId())) + .map(judicialResult -> ApplicationResultStatusResolver.getApplicationStatus(applicationType, judicialResult.getJudicialResultTypeId(), applicationCode)) .filter(Objects::nonNull) .findFirst(); diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessor.java index 6ed07b592d..6d06b34c21 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessor.java @@ -65,15 +65,16 @@ public void hearingResultReceived(final JsonEnvelope jsonEnvelope) { hearing.getCourtApplications().stream().forEach(courtApplication -> { final String applicationType = courtApplication.getType().getType(); + final String applicationCode = courtApplication.getType().getCode(); final String applicationId = courtApplication.getId().toString(); - if(courtApplication.getCourtApplicationCases() != null ) { + if(courtApplication.getCourtApplicationCases() != null && courtApplication.getJudicialResults() != null) { courtApplication .getCourtApplicationCases() .stream() .filter(CourtApplicationCase::getIsSJP) .forEach(courtApplicationCase -> { final String sjpCaseId = courtApplicationCase.getProsecutionCaseId().toString(); - final String applicationStatus = getApplicationStatus(courtApplication, applicationType); + final String applicationStatus = getApplicationStatus(courtApplication, applicationType, applicationCode); sendMessage(jsonEnvelope, applicationId, sjpCaseId, applicationStatus); }); } @@ -93,13 +94,13 @@ private void sendMessage(final JsonEnvelope jsonEnvelope, final String applicati sender.send(envelopeToSend); } - private String getApplicationStatus(final CourtApplication courtApplication, final String applicationType) { + private String getApplicationStatus(final CourtApplication courtApplication, final String applicationType, final String applicationCode) { final Optional applicationStatus = courtApplication .getJudicialResults() .stream() - .map(judicialResult -> ApplicationResultStatusResolver.getApplicationStatus(applicationType, judicialResult.getJudicialResultTypeId())) + .map(judicialResult -> ApplicationResultStatusResolver.getApplicationStatus(applicationType, judicialResult.getJudicialResultTypeId(), applicationCode)) .filter(Objects::nonNull) .findFirst(); diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResult.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResult.java index 0515b408f5..6a86605716 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResult.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResult.java @@ -22,7 +22,9 @@ public enum ApplicationResult { APA("48b8ff83-2d5d-4891-bab1-b0f5edcd3822"), // Appeal withdrawn - AW("453539d1-c1a0-475d-9a02-16a659e6bc34"); + AW("453539d1-c1a0-475d-9a02-16a659e6bc34"), + + DISM("14d66587-8fbe-424f-a369-b1144f1684e3"); private final String resultId; diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolver.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolver.java index 499955adf8..ac087e9de4 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolver.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolver.java @@ -1,5 +1,16 @@ package uk.gov.moj.cpp.sjp.event.processor.utils; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_ABANDONED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_ALLOWED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_DISMISSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_REFUSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_WITHDRAWN; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.REOPENING_GRANTED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.REOPENING_REFUSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.REOPENING_WITHDRAWN; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.STATUTORY_DECLARATION_GRANTED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.STATUTORY_DECLARATION_REFUSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.STATUTORY_DECLARATION_WITHDRAWN; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AACA; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AACD; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AASA; @@ -8,14 +19,19 @@ import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.APA; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.ASV; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AW; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.DISM; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.G; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.RFSD; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.ROPENED; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.STDEC; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.WDRN; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE_AND_CONVICTION; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPLICATION_TO_REOPEN_CASE; @@ -23,31 +39,78 @@ import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.UUID; public class ApplicationResultStatusResolver { - + //retaining the existing behaviour of using applicationType to look up the result for backward compatibility. private static final Map resultToActionMap = new HashMap(); - + //using applicationTypeCode to look up the result instead of type where code exists. + private static final Map resultToActionByCodeMap = new ApplicationStatusByCodeMapBuilder() + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACA, APPEAL_ALLOWED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASA, APPEAL_ALLOWED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, ACSD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, DISM, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, WDRN, APPEAL_WITHDRAWN) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AW, APPEAL_WITHDRAWN) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, RFSD, APPEAL_REFUSED) + .add(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, APA, APPEAL_ABANDONED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACA, APPEAL_ALLOWED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASA, APPEAL_ALLOWED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, ACSD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, DISM, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, WDRN, APPEAL_WITHDRAWN) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AW, APPEAL_WITHDRAWN) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, RFSD, APPEAL_REFUSED) + .add(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, APA, APPEAL_ABANDONED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AACA, APPEAL_ALLOWED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AASA, APPEAL_ALLOWED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AACD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AASD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, ACSD, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, DISM, APPEAL_DISMISSED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, WDRN, APPEAL_WITHDRAWN) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AW, APPEAL_WITHDRAWN) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, RFSD, APPEAL_REFUSED) + .add(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, APA, APPEAL_ABANDONED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, G, STATUTORY_DECLARATION_GRANTED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, STDEC, STATUTORY_DECLARATION_GRANTED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, RFSD, STATUTORY_DECLARATION_REFUSED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, WDRN, STATUTORY_DECLARATION_WITHDRAWN) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, G, STATUTORY_DECLARATION_GRANTED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, STDEC, STATUTORY_DECLARATION_GRANTED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, RFSD, STATUTORY_DECLARATION_REFUSED) + .add(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, WDRN, STATUTORY_DECLARATION_WITHDRAWN) + .add(APPLICATION_TO_REOPEN_CASE, G, REOPENING_GRANTED) + .add(APPLICATION_TO_REOPEN_CASE, ROPENED, REOPENING_GRANTED) + .add(APPLICATION_TO_REOPEN_CASE, RFSD, REOPENING_REFUSED) + .add(APPLICATION_TO_REOPEN_CASE, WDRN, REOPENING_WITHDRAWN) + .build(); + + // mapping by application type for backward compatibility. static { - resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); - resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + STDEC.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); - resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + RFSD.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_REFUSED); - resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + WDRN.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_WITHDRAWN); + resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + G.getResultId(), STATUTORY_DECLARATION_GRANTED); + resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + STDEC.getResultId(), STATUTORY_DECLARATION_GRANTED); + resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + RFSD.getResultId(), STATUTORY_DECLARATION_REFUSED); + resultToActionMap.put(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType() + WDRN.getResultId(), STATUTORY_DECLARATION_WITHDRAWN); - resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + G.getResultId(), ApplicationStatus.REOPENING_GRANTED); - resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + ROPENED.getResultId(), ApplicationStatus.REOPENING_GRANTED); - resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + RFSD.getResultId(), ApplicationStatus.REOPENING_REFUSED); - resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + WDRN.getResultId(), ApplicationStatus.REOPENING_WITHDRAWN); + resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + G.getResultId(), REOPENING_GRANTED); + resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + ROPENED.getResultId(), REOPENING_GRANTED); + resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + RFSD.getResultId(), REOPENING_REFUSED); + resultToActionMap.put(APPLICATION_TO_REOPEN_CASE.getApplicationType() + WDRN.getResultId(), REOPENING_WITHDRAWN); // APPEAL_ALLOWED - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AACA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AASA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AACA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AASA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AACA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AASA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AACA.getResultId(), APPEAL_ALLOWED); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AASA.getResultId(), APPEAL_ALLOWED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AACA.getResultId(), APPEAL_ALLOWED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AASA.getResultId(), APPEAL_ALLOWED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AACA.getResultId(), APPEAL_ALLOWED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AASA.getResultId(), APPEAL_ALLOWED); // APPEAL REFUSED resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + RFSD.getResultId(), ApplicationStatus.APPEAL_REFUSED); @@ -55,42 +118,61 @@ public class ApplicationResultStatusResolver { resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + RFSD.getResultId(), ApplicationStatus.APPEAL_REFUSED); // APPEAL WITHDRAWN - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + WDRN.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AW.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + WDRN.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AW.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + WDRN.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AW.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + WDRN.getResultId(), APPEAL_WITHDRAWN); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AW.getResultId(), APPEAL_WITHDRAWN); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + WDRN.getResultId(), APPEAL_WITHDRAWN); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AW.getResultId(), APPEAL_WITHDRAWN); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + WDRN.getResultId(), APPEAL_WITHDRAWN); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AW.getResultId(), APPEAL_WITHDRAWN); // APPEAL DISMISSED - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AACD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AASD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + ACSD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AACD.getResultId(), APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + AASD.getResultId(), APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + ACSD.getResultId(), APPEAL_DISMISSED); resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + ASV.getResultId(), ApplicationStatus.APPLICATION_DISMISSED_SENTENCE_VARIED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AACD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AASD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + ACSD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AACD.getResultId(), APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + AASD.getResultId(), APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + ACSD.getResultId(), APPEAL_DISMISSED); resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + ASV.getResultId(), ApplicationStatus.APPLICATION_DISMISSED_SENTENCE_VARIED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AACD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AASD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + ACSD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AACD.getResultId(), APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + AASD.getResultId(), APPEAL_DISMISSED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + ACSD.getResultId(), APPEAL_DISMISSED); resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + ASV.getResultId(), ApplicationStatus.APPLICATION_DISMISSED_SENTENCE_VARIED); // APPEAL ABANDONED - resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + APA.getResultId(), ApplicationStatus.APPEAL_ABANDONED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + APA.getResultId(), ApplicationStatus.APPEAL_ABANDONED); - resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + APA.getResultId(), ApplicationStatus.APPEAL_ABANDONED); - + resultToActionMap.put(APPEAL_AGAINST_CONVICTION.getApplicationType() + APA.getResultId(), APPEAL_ABANDONED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE.getApplicationType() + APA.getResultId(), APPEAL_ABANDONED); + resultToActionMap.put(APPEAL_AGAINST_SENTENCE_AND_CONVICTION.getApplicationType() + APA.getResultId(), APPEAL_ABANDONED); } private ApplicationResultStatusResolver() { } - public static String getApplicationStatus(String courtApplicationType, UUID resultDefinitionId) { + public static String getApplicationStatus(String courtApplicationType, UUID resultDefinitionId, String courtApplicationCode) { - final ApplicationStatus applicationStatus = resultToActionMap.get(courtApplicationType + resultDefinitionId.toString()); + final ApplicationStatus applicationStatus = Optional.ofNullable(resultToActionMap.get(courtApplicationType + resultDefinitionId.toString())). + orElse(resultToActionByCodeMap.get(courtApplicationCode + resultDefinitionId.toString())); return applicationStatus == null ? ApplicationStatus.APPLICATION_STATUS_NOT_KNOWN.toString() : String.valueOf(applicationStatus); } -} + private static final class ApplicationStatusByCodeMapBuilder { + private final Map mappings = new HashMap<>(); + + private ApplicationStatusByCodeMapBuilder add(SjpApplicationTypes courtApplicationType, + ApplicationResult applicationResult, + ApplicationStatus applicationStatus) { + mappings.put(buildCodeKey(courtApplicationType, applicationResult), applicationStatus); + return this; + } + + private String buildCodeKey(SjpApplicationTypes courtApplicationType, ApplicationResult applicationResult) { + return courtApplicationType.getApplicationCode() + applicationResult.getResultId(); + } + + private Map build() { + return mappings; + } + } + +} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/SjpApplicationTypes.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/SjpApplicationTypes.java index 9551c0868c..f7d2d93bf6 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/SjpApplicationTypes.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/utils/SjpApplicationTypes.java @@ -1,20 +1,34 @@ package uk.gov.moj.cpp.sjp.event.processor.utils; +import com.microsoft.applicationinsights.core.dependencies.apachecommons.lang3.StringUtils; + public enum SjpApplicationTypes { - APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP("Appearance to make statutory declaration (SJP case)"), - APPLICATION_TO_REOPEN_CASE("Application to reopen case"), - APPEAL_AGAINST_CONVICTION("Appeal against conviction"), - APPEAL_AGAINST_SENTENCE("Appeal against Sentence"), - APPEAL_AGAINST_SENTENCE_AND_CONVICTION("Appeal against Sentence and Conviction"); + APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP("Appearance to make statutory declaration (SJP case)","MC80528"), + APPLICATION_TO_REOPEN_CASE("Application to reopen case","MC80524"), + APPEAL_AGAINST_CONVICTION("Appeal against conviction", StringUtils.EMPTY), + APPEAL_AGAINST_SENTENCE("Appeal against Sentence", StringUtils.EMPTY), + APPEAL_AGAINST_SENTENCE_AND_CONVICTION("Appeal against Sentence and Conviction", StringUtils.EMPTY), + APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT("Appeal against sentence by a Magistrates' Court to the Crown Court","MC80803"), + APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP("Appearance to make statutory declaration (other than SJP)","MC80527"), + APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT("Appeal against conviction and sentence by a Magistrates' Court to the Crown Court","MC80801"), + APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT("Appeal against conviction by a Magistrates' Court to the Crown Court","MC80802"); + private String applicationType; - private SjpApplicationTypes(final String applicationType) { + private String applicationCode; + + private SjpApplicationTypes(final String applicationType, final String applicationCode) { this.applicationType = applicationType; + this.applicationCode = applicationCode; } public String getApplicationType() { return applicationType; } + + public String getApplicationCode() { + return applicationCode; + } } diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessorTest.java index 0a55148e1a..7f57432ea1 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/ApplicationSetAsideProcessorTest.java @@ -1,45 +1,16 @@ package uk.gov.moj.cpp.sjp.event.processor; -import static java.time.ZonedDateTime.now; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; import static java.util.UUID.randomUUID; import static javax.json.Json.createObjectBuilder; import static org.hamcrest.Matchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static uk.gov.justice.services.test.utils.core.converter.JsonObjectToObjectConverterFactory.createJsonObjectToObjectConverter; - -import uk.gov.justice.json.schemas.domains.sjp.Address; -import uk.gov.justice.json.schemas.domains.sjp.ApplicationType; -import uk.gov.justice.json.schemas.domains.sjp.Gender; -import uk.gov.justice.json.schemas.domains.sjp.PersonalDetails; -import uk.gov.justice.json.schemas.domains.sjp.queries.CaseDecision; -import uk.gov.justice.json.schemas.domains.sjp.queries.CaseDetails; -import uk.gov.justice.json.schemas.domains.sjp.queries.DecisionType; -import uk.gov.justice.json.schemas.domains.sjp.queries.Defendant; -import uk.gov.justice.json.schemas.domains.sjp.queries.Offence; -import uk.gov.justice.json.schemas.domains.sjp.queries.QueryApplicationDecision; -import uk.gov.justice.json.schemas.domains.sjp.queries.QueryOffenceDecision; -import uk.gov.justice.json.schemas.domains.sjp.queries.Session; -import uk.gov.justice.services.common.converter.JsonObjectToObjectConverter; import uk.gov.justice.services.core.sender.Sender; import uk.gov.justice.services.fileservice.api.FileServiceException; import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.moj.cpp.sjp.event.decision.ApplicationDecisionSetAside; -import uk.gov.moj.cpp.sjp.event.processor.service.SjpService; -import uk.gov.moj.cpp.sjp.event.processor.service.models.CaseDetailsDecorator; -import uk.gov.moj.cpp.sjp.event.processor.service.notification.EndorsementRemovalNotificationService; import uk.gov.moj.cpp.sjp.event.processor.utils.builders.ApplicationDecisionSetAsideEnvelope; -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.List; import java.util.UUID; import javax.json.JsonObject; @@ -51,23 +22,11 @@ import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) public class ApplicationSetAsideProcessorTest { - private static final String OFFENCE_CODE = "OFFENCE_CODE"; - private static final LocalDate OFFENCE_START_DATE = LocalDate.of(2020, 1, 1); - private static final String LOCAL_JUSTICE_AREA_NATIONAL_COURT_CODE = "2577"; - private static final ZonedDateTime ORIGINAL_CONVICTION_DATE = ZonedDateTime.of(2020, 1, 2, 0, 0, 0, 0, ZoneId.systemDefault()); - - @Spy - private JsonObjectToObjectConverter converter = createJsonObjectToObjectConverter(); - @Mock - private EndorsementRemovalNotificationService endorsementRemovalNotificationService; - @Mock - private SjpService sjpService; @Mock private Sender sender; @InjectMocks @@ -77,20 +36,14 @@ public class ApplicationSetAsideProcessorTest { private ArgumentCaptor envelopeCaptor; private UUID caseId; - private UUID sessionId; private UUID applicationId; private UUID applicationDecisionId; - private Session session; private JsonEnvelope envelope; - private ZonedDateTime applicationSavedAt; - private CaseDetails caseDetails; @BeforeEach public void setUp() { caseId = randomUUID(); - sessionId = randomUUID(); applicationId = randomUUID(); - applicationSavedAt = ZonedDateTime.of(LocalDate.of(2020, 11, 20), LocalTime.now(), ZoneId.systemDefault()); applicationDecisionId = randomUUID(); final ApplicationDecisionSetAside applicationDecisionSetAside = new ApplicationDecisionSetAside(applicationId, caseId, "TVLXYZ01"); envelope = ApplicationDecisionSetAsideEnvelope.of(applicationDecisionSetAside); @@ -104,8 +57,6 @@ public void shouldPublishPublicEventOnApplicationSetAside() throws FileServiceEx .add("caseUrn", "TVLXYZ01") .build(); envelope = ApplicationDecisionSetAsideEnvelope.of(payload); - givenCaseWithoutEndorsementsToBeRemoved(); - processor.handleApplicationDecisionSetAside(envelope); verify(sender).send(envelopeCaptor.capture()); @@ -113,120 +64,4 @@ public void shouldPublishPublicEventOnApplicationSetAside() throws FileServiceEx assertThat(envelopeCaptor.getValue().payloadAsJsonObject(), is(payload)); assertThat(envelopeCaptor.getValue().payloadAsJsonObject().getString("caseUrn"), is("TVLXYZ01")); } - - @Test - public void shouldRequestFileGenerationWhenThereAreEndorsementsToBeRemoved() throws FileServiceException { - givenCaseWithEndorsementsToBeRemoved(); - final CaseDetailsDecorator decoratedCaseDetails = new CaseDetailsDecorator(caseDetails); - when(endorsementRemovalNotificationService.hasEndorsementsToBeRemoved(decoratedCaseDetails)).thenReturn(true); - - processor.handleApplicationDecisionSetAside(envelope); - - verify(endorsementRemovalNotificationService).generateNotification(decoratedCaseDetails, envelope); - } - - @Test - public void shouldNotRequestFileGenerationWhenThereAreNoEndorsementsToBeRemoved() throws FileServiceException { - givenCaseWithoutEndorsementsToBeRemoved(); - when(endorsementRemovalNotificationService.hasEndorsementsToBeRemoved(new CaseDetailsDecorator(caseDetails))).thenReturn(false); - - processor.handleApplicationDecisionSetAside(envelope); - - verify(endorsementRemovalNotificationService, never()).generateNotification(new CaseDetailsDecorator(caseDetails), envelope); - } - - private Offence.Builder createOffence() { - return Offence.offence() - .withId(randomUUID()) - .withOffenceCode(OFFENCE_CODE) - .withStartDate(OFFENCE_START_DATE.toString()); - } - - private CaseDecision statDecGrantedDecision(final ZonedDateTime previousFinalDecision) { - return CaseDecision.caseDecision() - .withId(applicationDecisionId) - .withSavedAt(applicationSavedAt) - .withApplicationDecision(applicationDecision(previousFinalDecision).build()) - .withSession(session) - .build(); - } - - private CaseDecision.Builder financialPenaltyDecision(final UUID offenceId) { - return CaseDecision.caseDecision() - .withId(randomUUID()) - .withSavedAt(now()) - .withOffenceDecisions(singletonList( - financialPenaltyWithEndorsements(offenceId, ORIGINAL_CONVICTION_DATE.toLocalDate()))) - .withSession(session); - } - - private QueryOffenceDecision financialPenaltyWithEndorsements(final UUID offenceId, final LocalDate originalConvictionDate) { - return QueryOffenceDecision.queryOffenceDecision() - .withOffenceId(offenceId) - .withDecisionType(DecisionType.FINANCIAL_PENALTY) - .withLicenceEndorsement(true) - .withPenaltyPointsImposed(10) - .withConvictionDate(originalConvictionDate) - .build(); - } - - private void startSession() { - session = Session.session() - .withSessionId(sessionId) - .withCourtHouseCode("Court House Code") - .withCourtHouseName("Court House Name") - .withLocalJusticeAreaNationalCourtCode(LOCAL_JUSTICE_AREA_NATIONAL_COURT_CODE) - .build(); - } - - private QueryApplicationDecision.Builder applicationDecision(final ZonedDateTime previousFinalDecisionSavedAt) { - return QueryApplicationDecision.queryApplicationDecision() - .withApplicationType(ApplicationType.STAT_DEC) - .withOutOfTime(false) - .withGranted(true) - .withPreviousFinalDecision(previousFinalDecisionSavedAt); - } - - - private CaseDetails.Builder createCase(final List offences) { - final CaseDetails.Builder builder = CaseDetails.caseDetails() - .withId(caseId) - .withUrn("Case URN") - .withDefendant(Defendant.defendant() - .withPersonalDetails(PersonalDetails.personalDetails() - .withFirstName("Robert") - .withLastName("Robertson") - .withDateOfBirth(LocalDate.of(1980, 5, 21)) - .withGender(Gender.MALE) - .withDriverNumber("Driver Number") - .withAddress(Address.address() - .withAddress1("line1") - .withAddress2("line2") - .withPostcode("POSTCODE") - .build()) - .build()) - .withOffences(offences) - .build()); - - final CaseDecision caseDecision1 = financialPenaltyDecision(offences.get(0).getId()).build(); - final CaseDecision caseDecision2 = statDecGrantedDecision(caseDecision1.getSavedAt()); - builder.withCaseDecisions(asList(caseDecision1, caseDecision2)); - - return builder; - } - - private void givenCaseWithEndorsementsToBeRemoved() { - startSession(); - - final Offence offence = createOffence().build(); - caseDetails = createCase(singletonList(offence)).build(); - when(sjpService.getCaseDetails(caseId, envelope)).thenReturn(caseDetails); - } - - private void givenCaseWithoutEndorsementsToBeRemoved() { - caseDetails = CaseDetails.caseDetails() - .withCaseDecisions(emptyList()) - .build(); - when(sjpService.getCaseDetails(caseId, envelope)).thenReturn(caseDetails); - } } diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessorTest.java index c3e9ae5ced..29aead51a4 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultReceivedProcessorTest.java @@ -1,11 +1,43 @@ package uk.gov.moj.cpp.sjp.event.processor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.microsoft.applicationinsights.core.dependencies.apachecommons.lang3.StringUtils; +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.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.justice.core.courts.CourtApplication; +import uk.gov.justice.core.courts.CourtApplicationCase; +import uk.gov.justice.core.courts.CourtApplicationType; +import uk.gov.justice.core.courts.JudicialResult; +import uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus; +import uk.gov.justice.json.schemas.domains.sjp.results.PublicHearingResulted; +import uk.gov.justice.services.common.converter.JsonObjectToObjectConverter; +import uk.gov.justice.services.common.converter.ObjectToJsonObjectConverter; +import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer; +import uk.gov.justice.services.core.sender.Sender; +import uk.gov.justice.services.messaging.Envelope; +import uk.gov.justice.services.messaging.JsonEnvelope; +import uk.gov.moj.cpp.sjp.event.CaseReceived; + +import javax.json.Json; +import javax.json.JsonArrayBuilder; +import javax.json.JsonObjectBuilder; +import javax.json.JsonValue; +import java.io.IOException; +import java.util.Arrays; +import java.util.UUID; + import static com.jayway.jsonpath.matchers.JsonPathMatchers.withJsonPath; import static java.util.Collections.singletonList; import static java.util.UUID.randomUUID; import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.Matchers.allOf; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.allOf; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; @@ -29,50 +61,22 @@ import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.APA; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.ASV; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AW; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.DISM; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.G; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.RFSD; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.ROPENED; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.STDEC; import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.WDRN; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE_AND_CONVICTION; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP; import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPLICATION_TO_REOPEN_CASE; -import uk.gov.justice.core.courts.CourtApplication; -import uk.gov.justice.core.courts.CourtApplicationCase; -import uk.gov.justice.core.courts.CourtApplicationType; -import uk.gov.justice.core.courts.JudicialResult; -import uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus; -import uk.gov.justice.json.schemas.domains.sjp.results.PublicHearingResulted; -import uk.gov.justice.services.common.converter.JsonObjectToObjectConverter; -import uk.gov.justice.services.common.converter.ObjectToJsonObjectConverter; -import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer; -import uk.gov.justice.services.core.sender.Sender; -import uk.gov.justice.services.messaging.Envelope; -import uk.gov.justice.services.messaging.JsonEnvelope; -import uk.gov.moj.cpp.sjp.event.CaseReceived; - -import java.io.IOException; -import java.util.Arrays; -import java.util.UUID; - -import javax.json.Json; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObjectBuilder; -import javax.json.JsonValue; - -import com.fasterxml.jackson.databind.ObjectMapper; -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.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - @ExtendWith(MockitoExtension.class) public class HearingResultReceivedProcessorTest { @@ -111,8 +115,8 @@ private JsonEnvelope populateHearing(String applicationType, UUID caseId, boolea .withProsecutionCaseId(caseId) .build(); CourtApplicationType courtApplicationType = new CourtApplicationType.Builder() - .withType(applicationType) - + .withType(applicationType.startsWith("MC80") ? StringUtils.EMPTY : applicationType) + .withCode(applicationType.startsWith("MC80") ? applicationType : StringUtils.EMPTY) .build(); CourtApplication courtApplication = courtApplication() .withId(randomUUID()) @@ -134,7 +138,6 @@ private JsonEnvelope populateHearing(String applicationType, UUID caseId, boolea return hearingJsonEnvelope; } - private void runTest(String applicationType, String resultDefinitionId, ApplicationStatus applicationStatus) { JsonEnvelope hearingJsonEnvelope = populateHearing(applicationType, caseId, true, resultDefinitionId); hearingResultReceivedProcessor.hearingResultReceived(hearingJsonEnvelope); @@ -291,5 +294,63 @@ public void shouldHandleCaseReceivedEvent() { .with(method("handleCaseReceivedEvent").thatHandles(CaseReceived.EVENT_NAME))); } + @Test + public void shouldHandleJudicialResultsMatchingApplicationCodeForStatDecApplication() throws IOException { + + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), STDEC.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), RFSD.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_REFUSED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_WITHDRAWN); + + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), STDEC.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), RFSD.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_REFUSED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_WITHDRAWN); + + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP.getApplicationCode(), G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP.getApplicationCode(), STDEC.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP.getApplicationCode(), RFSD.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_REFUSED); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_WITHDRAWN); + } + + @Test + public void shouldHandleJudicialResultsMatchingApplicationCodeForAppealApplication() throws IOException { + + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AACA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AASA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AACD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AASD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), ACSD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), DISM.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + runTest(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AW.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AACA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AASA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AACD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AASD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), ACSD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), DISM.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + runTest(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AW.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AACA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AASA.getResultId(), ApplicationStatus.APPEAL_ALLOWED); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AACD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AASD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), ACSD.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), DISM.getResultId(), ApplicationStatus.APPEAL_DISMISSED); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + runTest(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT.getApplicationCode(), AW.getResultId(), ApplicationStatus.APPEAL_WITHDRAWN); + } + + @Test + public void shouldHandleJudicialResultsMatchingApplicationCodeForReopenApplication() throws IOException { + + runTest(APPLICATION_TO_REOPEN_CASE.getApplicationCode(), G.getResultId(), ApplicationStatus.REOPENING_GRANTED); + runTest(APPLICATION_TO_REOPEN_CASE.getApplicationCode(), ROPENED.getResultId(), ApplicationStatus.REOPENING_GRANTED); + runTest(APPLICATION_TO_REOPEN_CASE.getApplicationCode(), RFSD.getResultId(), ApplicationStatus.REOPENING_REFUSED); + runTest(APPLICATION_TO_REOPEN_CASE.getApplicationCode(), WDRN.getResultId(), ApplicationStatus.REOPENING_WITHDRAWN); + } } diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessorTest.java index f5e695a150..ee08a14b8d 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/HearingResultedProcessorTest.java @@ -2,6 +2,7 @@ import static java.util.Collections.singletonList; import static java.util.UUID.randomUUID; +import org.junit.jupiter.api.Assertions; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static uk.gov.justice.core.courts.CourtApplication.courtApplication; @@ -14,6 +15,7 @@ import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP; import uk.gov.justice.core.courts.CourtApplication; +import uk.gov.justice.core.courts.CourtApplicationCase; import uk.gov.justice.core.courts.CourtApplicationType; import uk.gov.justice.core.courts.Hearing; import uk.gov.justice.core.courts.JudicialResult; @@ -28,6 +30,7 @@ import uk.gov.justice.services.messaging.Envelope; import uk.gov.justice.services.messaging.JsonEnvelope; +import java.util.Arrays; import java.util.UUID; import javax.json.JsonValue; @@ -105,6 +108,29 @@ private JsonEnvelope populateHearing(String applicationType, UUID caseId, boolea objectToJsonObjectConverter.convert(publicHearingResulted)); } + private JsonEnvelope populateHearingWithNoJudicialResult(String applicationType, UUID caseId, boolean isSJP, String resultDefinitionId, final boolean hasMigration) { + + CourtApplicationType courtApplicationType = new CourtApplicationType.Builder() + .withType(applicationType) + .build(); + CourtApplicationCase courtApplicationCase = new CourtApplicationCase.Builder() + .withIsSJP(true) + .withProsecutionCaseId(caseId) + .build(); + CourtApplication courtApplication = courtApplication() + .withId(randomUUID()) + .withType(courtApplicationType) + .withCourtApplicationCases(Arrays.asList(courtApplicationCase)) + .build(); + + final PublicHearingResulted publicHearingResulted = publicHearingResulted() + .withHearing(getHearing(isSJP, courtApplication,hasMigration)) + .build(); + + + return envelopeFrom(metadataWithRandomUUID(HearingResultReceivedProcessor.PUBLIC_HEARING_RESULTED), + objectToJsonObjectConverter.convert(publicHearingResulted)); + } private Hearing getHearing(final boolean isSJP, final CourtApplication courtApplication, final boolean hasMigration) { return !hasMigration ? hearing().withCourtApplications(singletonList(courtApplication)).withProsecutionCases(singletonList(ProsecutionCase.prosecutionCase().build())).withIsSJPHearing(isSJP).build() : hearing().withCourtApplications(singletonList(courtApplication)).withProsecutionCases(singletonList(prosecutionCase)).withIsSJPHearing(isSJP).build(); @@ -123,7 +149,7 @@ private void runTest(String applicationType, String resultDefinitionId, Applicat @Test public void shouldNotThrowExceptionForEmptyApplicationCases() { - runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType(), G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED, true,false); + runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType(), G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED, true,false); } @Test @@ -131,4 +157,12 @@ public void shouldNotProceedWithMigrationSystem() { runTest(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType(), G.getResultId(), ApplicationStatus.STATUTORY_DECLARATION_GRANTED, false,true); } + + @Test + public void shouldNotProceedWithNoJudicialResults() { + + JsonEnvelope hearingJsonEnvelopeWithNoJudicialResult = populateHearingWithNoJudicialResult(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP.getApplicationType(), caseId, false, G.getResultId(), false); + Assertions.assertDoesNotThrow(() -> hearingResultReceivedProcessor.hearingResultReceived(hearingJsonEnvelopeWithNoJudicialResult)); + verify(sender, never()).send(envelopeCaptor.capture()); + } } diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolverTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolverTest.java new file mode 100644 index 0000000000..a5d8cbf60a --- /dev/null +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/utils/ApplicationResultStatusResolverTest.java @@ -0,0 +1,117 @@ +package uk.gov.moj.cpp.sjp.event.processor.utils; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus; + +import java.util.UUID; +import java.util.stream.Stream; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_ABANDONED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_ALLOWED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_DISMISSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_REFUSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.APPEAL_WITHDRAWN; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.REOPENING_GRANTED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.REOPENING_REFUSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.REOPENING_WITHDRAWN; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.STATUTORY_DECLARATION_GRANTED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.STATUTORY_DECLARATION_REFUSED; +import static uk.gov.justice.json.schemas.domains.sjp.ApplicationStatus.STATUTORY_DECLARATION_WITHDRAWN; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AACA; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AACD; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AASA; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AASD; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.ACSD; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.APA; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.AW; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.DISM; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.G; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.RFSD; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.ROPENED; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.STDEC; +import static uk.gov.moj.cpp.sjp.event.processor.utils.ApplicationResult.WDRN; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP; +import static uk.gov.moj.cpp.sjp.event.processor.utils.SjpApplicationTypes.APPLICATION_TO_REOPEN_CASE; + +class ApplicationResultStatusResolverTest { + + private static Stream statdecApplicationTypes() { + return Stream.of(Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, G, STATUTORY_DECLARATION_GRANTED), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, STDEC, STATUTORY_DECLARATION_GRANTED), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, RFSD, STATUTORY_DECLARATION_REFUSED), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_SJP, WDRN, STATUTORY_DECLARATION_WITHDRAWN), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, G, STATUTORY_DECLARATION_GRANTED), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, STDEC, STATUTORY_DECLARATION_GRANTED), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, RFSD, STATUTORY_DECLARATION_REFUSED), + Arguments.of(APPEARANCE_TO_MAKE_STATUTORY_DECLARATION_OTHER_THAN_SJP, WDRN, STATUTORY_DECLARATION_WITHDRAWN)); + } + + private static Stream reopenApplicationTypes() { + return Stream.of(Arguments.of(APPLICATION_TO_REOPEN_CASE, G, REOPENING_GRANTED), + Arguments.of(APPLICATION_TO_REOPEN_CASE, ROPENED, REOPENING_GRANTED), + Arguments.of(APPLICATION_TO_REOPEN_CASE, RFSD, REOPENING_REFUSED), + Arguments.of(APPLICATION_TO_REOPEN_CASE, WDRN, REOPENING_WITHDRAWN)); + } + + private static Stream appealApplicationTypes() { + return Stream.of(Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACA, APPEAL_ALLOWED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASA, APPEAL_ALLOWED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, ACSD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, DISM, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, WDRN, APPEAL_WITHDRAWN), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AW, APPEAL_WITHDRAWN), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, RFSD, APPEAL_REFUSED), + Arguments.of(APPEAL_AGAINST_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, APA, APPEAL_ABANDONED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACA, APPEAL_ALLOWED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASA, APPEAL_ALLOWED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AACD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AASD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, ACSD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, DISM, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, WDRN, APPEAL_WITHDRAWN), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, AW, APPEAL_WITHDRAWN), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, RFSD, APPEAL_REFUSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_AND_SENTENCE_BY_MAGISTRATE_TO_CROWN_COURT, APA, APPEAL_ABANDONED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AACA, APPEAL_ALLOWED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AASA, APPEAL_ALLOWED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AACD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AASD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, ACSD, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, DISM, APPEAL_DISMISSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, WDRN, APPEAL_WITHDRAWN), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, AW, APPEAL_WITHDRAWN), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, RFSD, APPEAL_REFUSED), + Arguments.of(APPEAL_AGAINST_CONVICTION_BY_MAGISTRATE_TO_CROWN_COURT, APA, APPEAL_ABANDONED)); + } + + @ParameterizedTest() + @MethodSource("statdecApplicationTypes") + void testApplicationStatusForStatDecApplications(SjpApplicationTypes applicationType, ApplicationResult applicationResult, ApplicationStatus expectedApplicationStatus) { + + assertThat(ApplicationResultStatusResolver.getApplicationStatus(applicationType.getApplicationType(), UUID.fromString(applicationResult.getResultId()), applicationType.getApplicationCode()), is(expectedApplicationStatus.toString())); + } + + @ParameterizedTest() + @MethodSource("reopenApplicationTypes") + void testApplicationStatusForReopenApplications(SjpApplicationTypes applicationType, ApplicationResult applicationResult, ApplicationStatus expectedApplicationStatus) { + + assertThat(ApplicationResultStatusResolver.getApplicationStatus(applicationType.getApplicationType(), UUID.fromString(applicationResult.getResultId()), applicationType.getApplicationCode()), is(expectedApplicationStatus.toString())); + } + + @ParameterizedTest() + @MethodSource("appealApplicationTypes") + void testApplicationStatusForAppealApplications(SjpApplicationTypes applicationType, ApplicationResult applicationResult, ApplicationStatus expectedApplicationStatus) { + + assertThat(ApplicationResultStatusResolver.getApplicationStatus(applicationType.getApplicationType(), UUID.fromString(applicationResult.getResultId()), applicationType.getApplicationCode()), is(expectedApplicationStatus.toString())); + } +} diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/NotificationToDvlaToRemoveEndorsementsIT.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/NotificationToDvlaToRemoveEndorsementsIT.java index 2bbf0271c9..f83e1d320e 100644 --- a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/NotificationToDvlaToRemoveEndorsementsIT.java +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/NotificationToDvlaToRemoveEndorsementsIT.java @@ -5,6 +5,7 @@ import static java.util.UUID.fromString; import static java.util.UUID.randomUUID; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.hasSize; @@ -83,7 +84,6 @@ import com.google.common.collect.Sets; import org.awaitility.Awaitility; import org.hamcrest.Matcher; -import org.json.JSONObject; import org.junit.jupiter.api.Test; public class NotificationToDvlaToRemoveEndorsementsIT extends BaseIntegrationTest { @@ -119,19 +119,8 @@ public void shouldRequestPdfEmailAttachmentGenerationViaSystemDocGeneratorAndSen "CASE_ID", "7242d476-9ca3-454a-93ee-78bf148602bf"); stubAddMapping(); - final JSONObject generationRequests = pollSysDocGenerationRequests(hasSize(1)).get(0); - assertSysDocRequest(applicationDecisionId, generationRequests); - - final UUID documentFileServiceId = randomUUID(); - final UUID sourceCorrelationId = fromString(applicationDecisionId); - sendSysDocGeneratorDocumentAvailablePublicEvent( - sourceCorrelationId, documentFileServiceId - ); - - final JsonObject notification = verifyNotification(sourceCorrelationId, dvlaEmailAddress); - assertEmailSubject(notification); - - assertStatusUpdatedInViewstore(sourceCorrelationId, documentFileServiceId, QUEUED); + // No new ENDORSEMENT_REMOVAL_NOTIFICATION are generated https://tools.hmcts.net/jira/browse/DD-42331 + assertThat(pollSysDocGenerationRequests(hasSize(1)).isEmpty(), is(true)); } @Test @@ -302,14 +291,6 @@ private void pollUntil(final Callable function, final Matcher .until(function, matcher); } - private void assertSysDocRequest(final String applicationDecisionId, final JSONObject generationRequests) { - assertThat(generationRequests.getString("originatingSource"), equalTo("sjp")); - assertThat(generationRequests.getString("sourceCorrelationId"), equalTo(applicationDecisionId)); - assertThat(generationRequests.getString("templateIdentifier"), equalTo(NOTIFICATION_TO_DVLA_TO_REMOVE_ENDORSEMENT.getValue())); - assertThat(generationRequests.getString("conversionFormat"), is("pdf")); - assertThat(generationRequests.has("payloadFileServiceId"), is(true)); - } - private void assertEmailSubject(final JsonObject notification) { final EndorsementRemovalNotificationEmailSubject subject = new EndorsementRemovalNotificationEmailSubject(NATIONAL_COURT_NAME, createCasePayloadBuilder.getDefendantBuilder().getFirstName(),