Skip to content

Commit

Permalink
Fixed an issue with blank decision notice (#3535)
Browse files Browse the repository at this point in the history
Co-authored-by: Andrei Trushkov <andrei.trushkov@hmcts.net>
Co-authored-by: NickHill111 <47982351+nickhill111@users.noreply.github.com>
  • Loading branch information
3 people committed Nov 28, 2023
1 parent 499dbf4 commit 373eb22
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 90 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,14 @@ protected boolean isBenefitTypeValidToHideNino(Optional<Benefit> benefitType) {
|| SscsType.SSCS5.equals(benefit.getSscsType())).isPresent();
}

protected PreSubmitCallbackResponse<SscsCaseData> issueDocument(Callback<SscsCaseData> callback, DocumentType documentType, String templateId, GenerateFile generateFile, String userAuthorisation) {
protected PreSubmitCallbackResponse<SscsCaseData> issueDocument(Callback<SscsCaseData> callback, DocumentType documentType,
String templateId, GenerateFile generateFile, String userAuthorisation) {
return issueDocument(callback, documentType, templateId, generateFile, userAuthorisation, false, false);
}

protected PreSubmitCallbackResponse<SscsCaseData> issueDocument(Callback<SscsCaseData> callback, DocumentType documentType, String templateId, GenerateFile generateFile, String userAuthorisation, boolean isPostHearingsEnabled, boolean isPostHearingsBEnabled) {
protected PreSubmitCallbackResponse<SscsCaseData> issueDocument(Callback<SscsCaseData> callback, DocumentType documentType,
String templateId, GenerateFile generateFile, String userAuthorisation,
boolean isPostHearingsEnabled, boolean isPostHearingsBEnabled) {
SscsCaseData caseData = callback.getCaseDetails().getCaseData();

if ((ADJOURNMENT_NOTICE.equals(documentType) || DRAFT_ADJOURNMENT_NOTICE.equals(documentType))
Expand All @@ -136,16 +139,12 @@ protected PreSubmitCallbackResponse<SscsCaseData> issueDocument(Callback<SscsCas
}

String documentUrl = Optional.ofNullable(getDocumentFromCaseData(caseData)).map(DocumentLink::getDocumentUrl).orElse(null);

LocalDate dateAdded = Optional.ofNullable(caseData.getDocumentStaging().getDateAdded()).orElse(LocalDate.now());

String documentTypeLabel = getDocumentTypeLabel(caseData, documentType, isPostHearingsEnabled);

String embeddedDocumentTypeLabel = getEmbeddedDocumentTypeLabel(caseData, documentType, documentTypeLabel, isPostHearingsEnabled);
boolean isScottish = Optional.ofNullable(caseData.getRegionalProcessingCenter()).map(f -> equalsIgnoreCase(f.getName(), GLASGOW)).orElse(false);

PreSubmitCallbackResponse<SscsCaseData> response = new PreSubmitCallbackResponse<>(caseData);

FormPayload formPayload = createPayload(response, caseData, embeddedDocumentTypeLabel, dateAdded, LocalDate.now(), isScottish, isPostHearingsEnabled, isPostHearingsBEnabled, userAuthorisation);

if (!response.getErrors().isEmpty()) {
Expand All @@ -160,11 +159,8 @@ protected PreSubmitCallbackResponse<SscsCaseData> issueDocument(Callback<SscsCas
.build();

log.info(String.format("Generating %s document isScottish = %s", documentTypeLabel, isScottish));

final String generatedFileUrl = generateFile.assemble(params);

documentTypeLabel = documentTypeLabel + ((DRAFT_CORRECTED_NOTICE.equals(documentType) || DRAFT_DECISION_NOTICE.equals(documentType) || DRAFT_ADJOURNMENT_NOTICE.equals(documentType)) ? " generated" : " issued");

final String filename = String.format("%s on %s.pdf", documentTypeLabel, dateAdded.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")));

DocumentLink previewFile = DocumentLink.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,12 @@ public PreSubmitCallbackResponse<SscsCaseData> preview(Callback<SscsCaseData> ca
return preview(callback, documentType, userAuthorisation, showIssueDate, false, false);
}

public PreSubmitCallbackResponse<SscsCaseData> preview(Callback<SscsCaseData> callback, DocumentType documentType, String userAuthorisation, boolean showIssueDate, boolean isPostHearingsEnabled, boolean isPostHearingsBEnabled) {

public PreSubmitCallbackResponse<SscsCaseData> preview(Callback<SscsCaseData> callback, DocumentType documentType,
String userAuthorisation, boolean showIssueDate,
boolean isPostHearingsEnabled, boolean isPostHearingsBEnabled) {
this.showIssueDate = showIssueDate;

SscsCaseData sscsCaseData = callback.getCaseDetails().getCaseData();

PreSubmitCallbackResponse<SscsCaseData> preSubmitCallbackResponse = new PreSubmitCallbackResponse<>(sscsCaseData);

setGeneratedDateIfRequired(sscsCaseData, callback.getEvent());

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,14 @@ public PreSubmitCallbackResponse<SscsCaseData> handle(CallbackType callbackType,
// Given the user selects No to generate notice option and has uploaded their custom adjournment notice document.
// Then don't generate the system default adjournment notice document.
if (YesNo.isYes(sscsCaseData.getAdjournment().getGenerateNotice())) {

if (sscsCaseData.getAdjournment().getGeneratedDate() == null) {
response.addError("Adjourn case generated date not found. Please use 'Adjourn case' event or upload your adjourn case document.");
} else {
previewService.preview(callback, DocumentType.ADJOURNMENT_NOTICE, userAuthorisation, true);
}

} else if (sscsCaseData.getAdjournment().getPreviewDocument() == null) {
response.addError("No draft adjournment notice found on case. Please use 'Adjourn case' event or upload your adjourn case document.");
}

return response;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import uk.gov.hmcts.reform.sscs.ccd.domain.DocumentLink;
import uk.gov.hmcts.reform.sscs.ccd.domain.EventType;
import uk.gov.hmcts.reform.sscs.ccd.domain.SscsCaseData;
import uk.gov.hmcts.reform.sscs.ccd.domain.YesNo;
import uk.gov.hmcts.reform.sscs.ccd.presubmit.PreSubmitCallbackHandler;
import uk.gov.hmcts.reform.sscs.ccd.presubmit.writefinaldecision.WriteFinalDecisionBenefitTypeHelper;
import uk.gov.hmcts.reform.sscs.ccd.presubmit.writefinaldecision.WriteFinalDecisionPreviewDecisionServiceBase;
Expand Down Expand Up @@ -62,7 +63,10 @@ public PreSubmitCallbackResponse<SscsCaseData> handle(CallbackType callbackType,
DocumentType docType = SscsUtil.getIssueFinalDecisionDocumentType(sscsCaseData, isPostHearingsEnabled);

WriteFinalDecisionPreviewDecisionServiceBase previewDecisionService = decisionNoticeService.getPreviewService(benefitType);
previewDecisionService.preview(callback, docType, userAuthorisation, true, isPostHearingsEnabled, isPostHearingsBEnabled);

if (YesNo.isYes(sscsCaseData.getSscsFinalDecisionCaseData().getWriteFinalDecisionGenerateNotice())) {
previewDecisionService.preview(callback, docType, userAuthorisation, true, isPostHearingsEnabled, isPostHearingsBEnabled);
}
} else {
response.addError("No draft final decision notice found on case. Please use 'Write final decision' event before trying to issue.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ public PreSubmitCallbackResponse<SscsCaseData> handle(CallbackType callbackType,

outcomeService.validate(preSubmitCallbackResponse, sscsCaseData);

if (!(State.READY_TO_LIST.equals(state)
|| State.WITH_DWP.equals(sscsCaseData.getState()))) {
if (!(State.READY_TO_LIST.equals(state) || State.WITH_DWP.equals(sscsCaseData.getState()))) {
sscsCaseData.setPreviousState(state);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package uk.gov.hmcts.reform.sscs.ccd.presubmit.issuefinaldecision;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.mockito.Mockito.when;
import static uk.gov.hmcts.reform.sscs.ccd.callback.CallbackType.ABOUT_TO_START;
import static uk.gov.hmcts.reform.sscs.ccd.domain.YesNo.NO;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import uk.gov.hmcts.reform.sscs.ccd.callback.Callback;
import uk.gov.hmcts.reform.sscs.ccd.domain.CaseDetails;
import uk.gov.hmcts.reform.sscs.ccd.domain.DocumentLink;
import uk.gov.hmcts.reform.sscs.ccd.domain.EventType;
import uk.gov.hmcts.reform.sscs.ccd.domain.SscsCaseData;
import uk.gov.hmcts.reform.sscs.ccd.domain.SscsFinalDecisionCaseData;
import uk.gov.hmcts.reform.sscs.service.DecisionNoticeService;

@ExtendWith(MockitoExtension.class)
public class IssueFinalDecisionAboutToStartHandlerTest {

private static final String USER_AUTHORISATION = "Bearer token";
private IssueFinalDecisionAboutToStartHandler handler;

@Mock
private Callback<SscsCaseData> callback;

@Mock
private CaseDetails<SscsCaseData> caseDetails;

@Mock
private DecisionNoticeService decisionNoticeService;

private SscsCaseData sscsCaseData;

@BeforeEach
void setup() {
handler = new IssueFinalDecisionAboutToStartHandler(decisionNoticeService, true, true);

sscsCaseData = SscsCaseData.builder()
.ccdCaseId("ccdId")
.finalDecisionCaseData(SscsFinalDecisionCaseData.builder()
.writeFinalDecisionGeneratedDate("2018-01-01")
.writeFinalDecisionGenerateNotice(NO)
.writeFinalDecisionPreviewDocument(DocumentLink.builder().documentFilename("filename").build())
.build())
.build();
}

@Test
void whenGenerateNoticeIsNo_thenDoNotGeneratePreviewNotice() {
when(callback.getEvent()).thenReturn(EventType.ISSUE_FINAL_DECISION);
when(callback.getCaseDetails()).thenReturn(caseDetails);
when(caseDetails.getCaseData()).thenReturn(sscsCaseData);

assertDoesNotThrow(() -> handler.handle(ABOUT_TO_START, callback, USER_AUTHORISATION));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
Expand All @@ -27,7 +27,6 @@
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import uk.gov.hmcts.reform.sscs.ccd.callback.Callback;
import uk.gov.hmcts.reform.sscs.ccd.callback.CallbackType;
Expand Down Expand Up @@ -97,28 +96,26 @@ public class EsaIssueFinalDecisionAboutToStartHandlerTest {
public void setUp() throws IOException {
openMocks(this);

Mockito.when(previewDecisionService.getBenefitType()).thenReturn("ESA");
Mockito.when(esaDecisionNoticeOutcomeService.getBenefitType()).thenReturn("ESA");
when(previewDecisionService.getBenefitType()).thenReturn("ESA");
when(esaDecisionNoticeOutcomeService.getBenefitType()).thenReturn("ESA");

decisionNoticeService =
new DecisionNoticeService(Arrays.asList(),
Arrays.asList(esaDecisionNoticeOutcomeService), Arrays.asList(previewDecisionService));
new DecisionNoticeService(List.of(), List.of(esaDecisionNoticeOutcomeService), List.of(previewDecisionService));

handler = new IssueFinalDecisionAboutToStartHandler(decisionNoticeService, false, false);

when(callback.getEvent()).thenReturn(EventType.ISSUE_FINAL_DECISION);
when(callback.getCaseDetails()).thenReturn(caseDetails);

when(userDetailsService.buildLoggedInUserName("Bearer token")).thenReturn("Judge Full Name");


capture = ArgumentCaptor.forClass(GenerateFileParams.class);

sscsCaseData = SscsCaseData.builder()
.ccdCaseId("ccdId")
.finalDecisionCaseData(SscsFinalDecisionCaseData.builder()
.writeFinalDecisionGeneratedDate("2018-01-01")
.writeFinalDecisionPreviewDocument(DocumentLink.builder().documentFilename("filename").build())
.writeFinalDecisionGenerateNotice(YES)
.build())
.appeal(Appeal.builder()
.benefitType(BenefitType.builder().code("ESA").build())
Expand Down Expand Up @@ -160,16 +157,12 @@ public void givenANonCallbackType_thenReturnFalse(CallbackType callbackType) {

@Test
public void givenAboutToStartRequest_willGeneratePreviewFile() {

PreSubmitCallbackResponse<SscsCaseData> response = new PreSubmitCallbackResponse<>(sscsCaseData);
when(esaDecisionNoticeOutcomeService.getBenefitType()).thenReturn("ESA");

PreSubmitCallbackResponse response = new PreSubmitCallbackResponse(sscsCaseData);

when(previewDecisionService.preview(callback, DocumentType.FINAL_DECISION_NOTICE, USER_AUTHORISATION, true)).thenReturn(response);
handler.handle(ABOUT_TO_START, callback, USER_AUTHORISATION);

handler.handle(ABOUT_TO_START, callback, USER_AUTHORISATION);
verify(previewDecisionService).preview(callback, DocumentType.FINAL_DECISION_NOTICE, USER_AUTHORISATION, true, false, false);

}

@Test
Expand All @@ -185,7 +178,7 @@ public void givenAboutToStartRequestDescriptorFlow_willGeneratePreviewFileWithou
when(generateFile.assemble(any())).thenReturn(URL);

sscsCaseData.getSscsFinalDecisionCaseData().setWriteFinalDecisionAllowedOrRefused("refused");
sscsCaseData.getSscsEsaCaseData().setEsaWriteFinalDecisionPhysicalDisabilitiesQuestion(Arrays.asList("mobilisingUnaided"));
sscsCaseData.getSscsEsaCaseData().setEsaWriteFinalDecisionPhysicalDisabilitiesQuestion(List.of("mobilisingUnaided"));
sscsCaseData.getSscsEsaCaseData().setEsaWriteFinalDecisionMobilisingUnaidedQuestion("mobilisingUnaided1e");
sscsCaseData.setWcaAppeal(YES);
sscsCaseData.setSupportGroupOnlyAppeal("No");
Expand All @@ -200,7 +193,7 @@ public void givenAboutToStartRequestDescriptorFlow_willGeneratePreviewFileWithou
// CHeck that the document has the correct (updated) issued date.
assertNotNull(previewResponse.getData().getSscsFinalDecisionCaseData().getWriteFinalDecisionPreviewDocument());
assertEquals(DocumentLink.builder()
.documentFilename(String.format("Final Decision Notice issued on %s.pdf", LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-YYYY"))))
.documentFilename(String.format("Final Decision Notice issued on %s.pdf", LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))))
.documentBinaryUrl(URL + "/binary")
.documentUrl(URL)
.build(), previewResponse.getData().getSscsFinalDecisionCaseData().getWriteFinalDecisionPreviewDocument());
Expand Down Expand Up @@ -237,7 +230,7 @@ public void givenAboutToStartRequestNonDescriptorFlow_willGeneratePreviewFileWit
// CHeck that the document has the correct (updated) issued date.
assertNotNull(previewResponse.getData().getSscsFinalDecisionCaseData().getWriteFinalDecisionPreviewDocument());
assertEquals(DocumentLink.builder()
.documentFilename(String.format("Final Decision Notice issued on %s.pdf", LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-YYYY"))))
.documentFilename(String.format("Final Decision Notice issued on %s.pdf", LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))))
.documentBinaryUrl(URL + "/binary")
.documentUrl(URL)
.build(), previewResponse.getData().getSscsFinalDecisionCaseData().getWriteFinalDecisionPreviewDocument());
Expand Down
Loading

0 comments on commit 373eb22

Please sign in to comment.