Skip to content

Commit

Permalink
CIV-13703 Stitch DQ and defendant response doc (#4750)
Browse files Browse the repository at this point in the history
* CIV-13703 changes

* CIV-13703 Testcase updated

* CIV-13703 added more logs

* CIV-13703 testcase updated

* CIV-13703 added more logs

* CIV-13703 added logs

* CIV-13703 stitch doc changes

* CIV-13703 checkstyle fixed

* CIV-13703 Stitch doc changes

* CIV-13703 stitch doc changes

* CIV-13703 stitch doc changes

* CIV-13703 stitch doc changes

* reverted local changes

* updated doc name

* caseData updated

* reverted code

* removed added logs

* stitch doc size check added

---------

Co-authored-by: jarekPierchala <[email protected]>
  • Loading branch information
kalachandrasekar1 and jarekPierchala committed Jun 5, 2024
1 parent fcd4a37 commit 4458bf0
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import uk.gov.hmcts.reform.ccd.client.model.AboutToStartOrSubmitCallbackResponse;
import uk.gov.hmcts.reform.ccd.client.model.CallbackResponse;
Expand All @@ -11,18 +12,26 @@
import uk.gov.hmcts.reform.civil.callback.CallbackType;
import uk.gov.hmcts.reform.civil.callback.CaseEvent;
import uk.gov.hmcts.reform.civil.documentmanagement.model.CaseDocument;
import uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType;
import uk.gov.hmcts.reform.civil.enums.DocCategory;
import uk.gov.hmcts.reform.civil.model.CaseData;
import uk.gov.hmcts.reform.civil.model.documents.DocumentMetaData;
import uk.gov.hmcts.reform.civil.service.SystemGeneratedDocumentService;
import uk.gov.hmcts.reform.civil.service.docmosis.sealedclaim.SealedClaimLipResponseFormGenerator;
import uk.gov.hmcts.reform.civil.service.stitching.CivilDocumentStitchingService;
import uk.gov.hmcts.reform.civil.utils.AssignCategoryId;
import uk.gov.hmcts.reform.civil.utils.ElementUtils;
import uk.gov.hmcts.reform.civil.service.FeatureToggleService;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import static uk.gov.hmcts.reform.civil.callback.CallbackParams.Params.BEARER_TOKEN;
import static uk.gov.hmcts.reform.civil.callback.CaseEvent.GENERATE_RESPONSE_CUI_SEALED;
import static uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType.DEFENDANT_DEFENCE;

@Service
@RequiredArgsConstructor
Expand All @@ -34,6 +43,10 @@ public class GenerateCUIResponseSealedFormCallBackHandler extends CallbackHandle
private final SealedClaimLipResponseFormGenerator formGenerator;
private final SystemGeneratedDocumentService systemGeneratedDocumentService;
private final AssignCategoryId assignCategoryId;
private final CivilDocumentStitchingService civilDocumentStitchingService;
private final FeatureToggleService featureToggleService;
@Value("${stitching.enabled}")
private boolean stitchEnabled;

private final Map<String, Callback> callbackMap = Map.of(
callbackKey(CallbackType.ABOUT_TO_SUBMIT), this::prepareSealedForm
Expand All @@ -55,16 +68,56 @@ private CallbackResponse prepareSealedForm(CallbackParams callbackParams) {
caseData,
callbackParams.getParams().get(BEARER_TOKEN).toString()
);
CaseData updatedCaseData = caseData.toBuilder()
.respondent1ClaimResponseDocumentSpec(sealedForm)
.systemGeneratedCaseDocuments(systemGeneratedDocumentService.getSystemGeneratedDocumentsWithAddedDocument(
sealedForm,
caseData
))
.build();
CaseData.CaseDataBuilder<?, ?> caseDataBuilder = caseData.toBuilder();
caseDataBuilder.respondent1ClaimResponseDocumentSpec(sealedForm)
.systemGeneratedCaseDocuments(systemGeneratedDocumentService.getSystemGeneratedDocumentsWithAddedDocument(
sealedForm,
caseData
));
assignCategoryId.assignCategoryIdToCaseDocument(sealedForm, DocCategory.DEF1_DEFENSE_DQ.getValue());

if (stitchEnabled && caseData.isLipvLipOneVOne() && featureToggleService.isLipVLipEnabled()) {
List<DocumentMetaData> documentMetaDataList = fetchDocumentsToStitch(caseData, sealedForm);
if (documentMetaDataList.size() > 1) {
CaseDocument stitchedDocument = civilDocumentStitchingService.bundle(
documentMetaDataList,
callbackParams.getParams().get(CallbackParams.Params.BEARER_TOKEN).toString(),
sealedForm.getDocumentName(),
sealedForm.getDocumentName(),
caseData
);
assignCategoryId.assignCategoryIdToCaseDocument(stitchedDocument, DocCategory.DEF1_DEFENSE_DQ.getValue());
CaseDocument updatedStitchedDoc = stitchedDocument.toBuilder().documentType(DEFENDANT_DEFENCE).build();
caseDataBuilder.respondent1ClaimResponseDocumentSpec(updatedStitchedDoc)
.systemGeneratedCaseDocuments(systemGeneratedDocumentService.getSystemGeneratedDocumentsWithAddedDocument(
updatedStitchedDoc,
caseData
));
}
}
return AboutToStartOrSubmitCallbackResponse.builder()
.data(updatedCaseData.toMap(objectMapper))
.data(caseDataBuilder.build().toMap(objectMapper))
.build();
}

private List<DocumentMetaData> fetchDocumentsToStitch(CaseData caseData, CaseDocument sealedForm) {
List<DocumentMetaData> documents = new ArrayList<>();

documents.add(new DocumentMetaData(
sealedForm.getDocumentLink(),
"Sealed Claim form",
LocalDate.now().toString()
));
ElementUtils.unwrapElements(caseData.getSystemGeneratedCaseDocuments()).stream()
.filter(cd -> DocumentType.DIRECTIONS_QUESTIONNAIRE.equals(cd.getDocumentType()))
.map(cd ->
new DocumentMetaData(
cd.getDocumentLink(),
"Directions Questionnaire",
LocalDate.now().toString()
)
).forEach(documents::add);

return documents;
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,46 @@
package uk.gov.hmcts.reform.civil.handler.callback.camunda.docmosis;

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.ArgumentMatchers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.util.ReflectionTestUtils;
import uk.gov.hmcts.reform.ccd.client.model.AboutToStartOrSubmitCallbackResponse;
import uk.gov.hmcts.reform.civil.documentmanagement.model.CaseDocument;
import uk.gov.hmcts.reform.civil.documentmanagement.model.Document;
import uk.gov.hmcts.reform.civil.enums.YesOrNo;
import uk.gov.hmcts.reform.civil.handler.callback.BaseCallbackHandlerTest;
import uk.gov.hmcts.reform.civil.model.CaseData;
import uk.gov.hmcts.reform.civil.model.common.Element;
import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder;
import uk.gov.hmcts.reform.civil.service.FeatureToggleService;
import uk.gov.hmcts.reform.civil.service.SystemGeneratedDocumentService;
import uk.gov.hmcts.reform.civil.service.docmosis.sealedclaim.SealedClaimLipResponseFormGenerator;
import uk.gov.hmcts.reform.civil.service.stitching.CivilDocumentStitchingService;
import uk.gov.hmcts.reform.civil.utils.AssignCategoryId;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static uk.gov.hmcts.reform.civil.callback.CallbackType.ABOUT_TO_SUBMIT;
import static uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType.DEFENDANT_DEFENCE;
import static uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType.DIRECTIONS_QUESTIONNAIRE;
import static uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType.SEALED_CLAIM;
import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.N1;
import static uk.gov.hmcts.reform.civil.utils.ElementUtils.element;

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {
Expand All @@ -42,29 +59,111 @@ public class GenerateCUIResponseSealedFormCallBackHandlerTest extends BaseCallba

@MockBean
private SystemGeneratedDocumentService systemGeneratedDocumentService;
@MockBean
private CivilDocumentStitchingService civilDocumentStitchingService;
@MockBean
private FeatureToggleService featureToggleService;

@MockBean
private AssignCategoryId assignCategoryId;

private static final CaseDocument FORM = CaseDocument.builder()
.createdBy("John")
.documentName("document name")
.documentSize(0L)
.documentType(DEFENDANT_DEFENCE)
.createdDatetime(LocalDateTime.now())
.documentLink(Document.builder()
.documentUrl("fake-url")
.documentFileName("file-name")
.documentBinaryUrl("binary-url")
.build())
.build();
private static final CaseDocument FORM =
CaseDocument.builder()
.createdBy("John")
.documentName("document name")
.documentSize(0L)
.documentType(DEFENDANT_DEFENCE)
.createdDatetime(LocalDateTime.now())
.documentLink(Document.builder()
.documentUrl("fake-url")
.documentFileName("file-name")
.documentBinaryUrl("binary-url")
.build())
.build();
private static final CaseDocument DIRECTIONS_QUESTIONNAIRE_DOC =
CaseDocument.builder()
.createdBy("John")
.documentName(String.format(N1.getDocumentTitle(), "000MC001"))
.documentSize(0L)
.documentType(DIRECTIONS_QUESTIONNAIRE)
.createdDatetime(LocalDateTime.now())
.documentLink(Document.builder()
.documentUrl("fake-url")
.documentFileName("file-name")
.documentBinaryUrl("binary-url")
.build())
.build();
private static final CaseDocument STITCHED_DOC =
CaseDocument.builder()
.createdBy("John")
.documentName("Stitched document")
.documentSize(0L)
.documentType(SEALED_CLAIM)
.createdDatetime(LocalDateTime.now())
.documentLink(Document.builder()
.documentUrl("fake-url")
.documentFileName("file-name")
.documentBinaryUrl("binary-url")
.build())
.build();
private static final String BEARER_TOKEN = "BEARER_TOKEN";

@BeforeEach
void setup() {
when(featureToggleService.isLipVLipEnabled()).thenReturn(false);
ReflectionTestUtils.setField(handler, "stitchEnabled", false);
}

@Test
void shouldGenerateForm_whenAboutToSubmitCalled() {
given(formGenerator.generate(any(CaseData.class), anyString())).willReturn(FORM);
CaseData caseData = CaseData.builder().build();
handler.handle(callbackParamsOf(caseData, ABOUT_TO_SUBMIT));
verify(formGenerator).generate(caseData, BEARER_TOKEN);
}

@Test
void shouldGenerateForm_whenIsLipVLipEnabledStitchingDisabled() {
//Given
given(formGenerator.generate(any(CaseData.class), anyString())).willReturn(FORM);
CaseData caseData = CaseData.builder().build();
when(featureToggleService.isLipVLipEnabled()).thenReturn(true);

//When
handler.handle(callbackParamsOf(caseData, ABOUT_TO_SUBMIT));

//Then
verify(formGenerator).generate(caseData, BEARER_TOKEN);
}

@Test
void shouldGenerateForm_whenIsLipVLipEnabledStitchingEnabled() {
//Given
List<Element<CaseDocument>> documents = List.of(
element(CaseDocument.builder().documentName("Stitched document").build()),
element(CaseDocument.builder().documentName("document name").build()));
given(systemGeneratedDocumentService.getSystemGeneratedDocumentsWithAddedDocument(any(CaseDocument.class), any(CaseData.class))).willReturn(documents);
when(civilDocumentStitchingService.bundle(ArgumentMatchers.anyList(), anyString(), anyString(), anyString(), any(CaseData.class)))
.thenReturn(STITCHED_DOC);
given(formGenerator.generate(any(CaseData.class), anyString())).willReturn(FORM);
List<Element<CaseDocument>> systemGeneratedCaseDocuments = new ArrayList<>();
systemGeneratedCaseDocuments.add(element(DIRECTIONS_QUESTIONNAIRE_DOC));
CaseData caseData = CaseDataBuilder.builder()
.applicant1Represented(YesOrNo.NO)
.respondent1Represented(YesOrNo.NO)
.systemGeneratedCaseDocuments(systemGeneratedCaseDocuments).build();
when(featureToggleService.isLipVLipEnabled()).thenReturn(true);
ReflectionTestUtils.setField(handler, "stitchEnabled", true);

//When
var response = (AboutToStartOrSubmitCallbackResponse)handler.handle(callbackParamsOf(caseData, ABOUT_TO_SUBMIT));
CaseData updatedData = mapper.convertValue(response.getData(), CaseData.class);

//Then
assertThat(updatedData.getSystemGeneratedCaseDocuments().stream()
.filter(caseDocumentElement -> caseDocumentElement.getValue()
.getDocumentName().equals(STITCHED_DOC.getDocumentName())).count()).isEqualTo(1);

verify(formGenerator).generate(caseData, BEARER_TOKEN);
}
}

0 comments on commit 4458bf0

Please sign in to comment.