Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package uk.gov.hmcts.ccd.endpoint.std;

import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import au.com.dius.pact.provider.junitsupport.IgnoreNoPactsToVerify;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.VersionSelector;
import au.com.dius.pact.provider.spring.junit5.MockMvcTestTarget;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import uk.gov.hmcts.ccd.domain.model.search.CaseSearchResult;
import uk.gov.hmcts.ccd.domain.model.search.global.GlobalSearchResponsePayload;
import uk.gov.hmcts.ccd.domain.service.globalsearch.GlobalSearchParser;
import uk.gov.hmcts.ccd.domain.service.search.elasticsearch.CaseSearchOperation;
import uk.gov.hmcts.ccd.domain.service.search.global.GlobalSearchService;

import java.util.Collections;
import java.util.List;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;

/**
* Provider PACT verification for POST /globalSearch (GlobalSearchEndpoint). Verifies the consumer
* contract published by xui_webapp (state "Search for case id").
*/
@Provider("ccdDataStoreAPI_search")
@PactBroker(url = "${PACT_BROKER_FULL_URL:http://localhost:9292}",
consumerVersionSelectors = {@VersionSelector(tag = "${PACT_BRANCH_NAME:Dev}")},
providerTags = "${pactbroker.providerTags:master}",
enablePendingPacts = "${pactbroker.enablePending:true}")
@IgnoreNoPactsToVerify
@ExtendWith(SpringExtension.class)
public class GlobalSearchProviderTest {

@Mock
private CaseSearchOperation caseSearchOperation;

@Mock
private GlobalSearchService globalSearchService;

@Mock
private GlobalSearchParser globalSearchParser;


@BeforeEach
void before(PactVerificationContext context) {
MockMvcTestTarget testTarget = new MockMvcTestTarget();
testTarget.setControllers(new GlobalSearchEndpoint(
caseSearchOperation, globalSearchService, globalSearchParser));
if (context != null) {
context.setTarget(testTarget);
}
}

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
if (context != null) {
context.verifyInteraction();
}
}


@State("Search for case id")
public void searchForCaseId() {
when(caseSearchOperation.execute(any(), anyBoolean()))
.thenReturn(new CaseSearchResult(1L, Collections.emptyList()));
when(globalSearchParser.filterCases(anyList(), any())).thenReturn(Collections.emptyList());

GlobalSearchResponsePayload.Result result = GlobalSearchResponsePayload.Result.builder()
.stateId("PREPARE_FOR_HEARING")
.processForAccess("SPECIFIC")
.caseReference("1675871084353511")
.otherReferences(Collections.emptyList())
.ccdJurisdictionId("PUBLICLAW")
.ccdJurisdictionName("Public Law")
.ccdCaseTypeId("CARE_SUPERVISION_EPO")
.ccdCaseTypeName("Public Law Applications")
.build();

GlobalSearchResponsePayload payload = GlobalSearchResponsePayload.builder()
.resultInfo(GlobalSearchResponsePayload.ResultInfo.builder()
.casesReturned(1)
.caseStartRecord(1)
.moreResultsToGo(false)
.build())
.results(List.of(result))
.build();

when(globalSearchService.transformResponse(any(), any(), anyList())).thenReturn(payload);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package uk.gov.hmcts.ccd.v2.external.controller;

import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import au.com.dius.pact.provider.junitsupport.IgnoreNoPactsToVerify;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.VersionSelector;
import au.com.dius.pact.provider.spring.junit5.MockMvcTestTarget;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import uk.gov.hmcts.ccd.domain.service.validate.OperationContext;
import uk.gov.hmcts.ccd.domain.service.validate.ValidateCaseFieldsOperation;

import java.util.Collections;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

/**
* Provider PACT verification for POST /case-types/{caseTypeId}/validate (CaseDataValidatorController).
*/
@Provider("ccdDataStoreAPI_validateCaseData")
@PactBroker(url = "${PACT_BROKER_FULL_URL:http://localhost:9292}",
consumerVersionSelectors = {@VersionSelector(tag = "${PACT_BRANCH_NAME:Dev}")},
providerTags = "${pactbroker.providerTags:master}",
enablePendingPacts = "${pactbroker.enablePending:true}")
@IgnoreNoPactsToVerify
@ExtendWith(SpringExtension.class)
public class CaseDataValidatorProviderTest {

@Mock
private ValidateCaseFieldsOperation validateCaseFieldsOperation;


@BeforeEach
void before(PactVerificationContext context) {
MockMvcTestTarget testTarget = new MockMvcTestTarget();
testTarget.setControllers(new CaseDataValidatorController(validateCaseFieldsOperation));
if (context != null) {
context.setTarget(testTarget);
}
}

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
if (context != null) {
context.verifyInteraction();
}
}


@State("A request to validate case data")
public void setUpValidateCaseData() {
when(validateCaseFieldsOperation.validateCaseDetails(any(OperationContext.class)))
.thenReturn(Collections.emptyMap());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package uk.gov.hmcts.ccd.v2.external.controller;

import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import au.com.dius.pact.provider.junitsupport.IgnoreNoPactsToVerify;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.VersionSelector;
import au.com.dius.pact.provider.spring.junit5.MockMvcTestTarget;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import uk.gov.hmcts.ccd.domain.service.getcasedocument.GetCaseDocumentOperation;

/**
* Provider PACT verification for GET /cases/{caseId}/documents/{documentId} (CaseDocumentController).
*/
@Provider("ccdDataStoreAPI_caseDocument")
@PactBroker(url = "${PACT_BROKER_FULL_URL:http://localhost:9292}",
consumerVersionSelectors = {@VersionSelector(tag = "${PACT_BRANCH_NAME:Dev}")},
providerTags = "${pactbroker.providerTags:master}",
enablePendingPacts = "${pactbroker.enablePending:true}")
@IgnoreNoPactsToVerify
@ExtendWith(SpringExtension.class)
public class CaseDocumentProviderTest {

@Mock
private GetCaseDocumentOperation getCaseDocumentOperation;


@BeforeEach
void before(PactVerificationContext context) {
MockMvcTestTarget testTarget = new MockMvcTestTarget();
testTarget.setControllers(new CaseDocumentController(getCaseDocumentOperation));
if (context != null) {
context.setTarget(testTarget);
}
}

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
if (context != null) {
context.verifyInteraction();
}
}


@State("A case document metadata request")
public void caseDocumentMetadataRequest() {
// State setup (mock getCaseDocumentOperation) to be completed when a consumer contract is published.
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package uk.gov.hmcts.ccd.v2.external.controller;

import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import au.com.dius.pact.provider.junitsupport.IgnoreNoPactsToVerify;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.VersionSelector;
import au.com.dius.pact.provider.spring.junit5.MockMvcTestTarget;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import uk.gov.hmcts.ccd.domain.service.casefileview.CategoriesAndDocumentsService;
import uk.gov.hmcts.ccd.domain.service.common.UIDService;
import uk.gov.hmcts.ccd.domain.service.createevent.CreateEventOperation;
import uk.gov.hmcts.ccd.domain.service.getcase.GetCaseOperation;

/**
* Provider PACT verification for GET /categoriesAndDocuments/{cid} (CaseFileViewController).
*/
@Provider("ccdDataStoreAPI_caseFileView")
@PactBroker(url = "${PACT_BROKER_FULL_URL:http://localhost:9292}",
consumerVersionSelectors = {@VersionSelector(tag = "${PACT_BRANCH_NAME:Dev}")},
providerTags = "${pactbroker.providerTags:master}",
enablePendingPacts = "${pactbroker.enablePending:true}")
@IgnoreNoPactsToVerify
@ExtendWith(SpringExtension.class)
public class CaseFileViewProviderTest {

@Mock
private GetCaseOperation getCaseOperation;

@Mock
private UIDService caseReferenceService;

@Mock
private CreateEventOperation createEventOperation;

@Mock
private CategoriesAndDocumentsService categoriesAndDocumentsService;


@BeforeEach
void before(PactVerificationContext context) {
MockMvcTestTarget testTarget = new MockMvcTestTarget();
testTarget.setControllers(new CaseFileViewController(
getCaseOperation, caseReferenceService, createEventOperation, categoriesAndDocumentsService));
if (context != null) {
context.setTarget(testTarget);
}
}

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
if (context != null) {
context.verifyInteraction();
}
}


@State("Categories and documents exist for a case")
public void categoriesAndDocumentsExist() {
// State setup (mock categoriesAndDocumentsService) to be completed when a consumer contract is published.
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package uk.gov.hmcts.ccd.v2.external.controller;

import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import au.com.dius.pact.provider.junitsupport.IgnoreNoPactsToVerify;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.VersionSelector;
import au.com.dius.pact.provider.spring.junit5.MockMvcTestTarget;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import uk.gov.hmcts.ccd.domain.model.std.validator.SupplementaryDataUpdateRequestValidator;
import uk.gov.hmcts.ccd.domain.service.caselinking.CaseLinkRetrievalService;
import uk.gov.hmcts.ccd.domain.service.caselinking.GetLinkedCasesResponseCreator;
import uk.gov.hmcts.ccd.domain.service.common.UIDService;
import uk.gov.hmcts.ccd.domain.service.createcase.CreateCaseOperation;
import uk.gov.hmcts.ccd.domain.service.createevent.CreateEventOperation;
import uk.gov.hmcts.ccd.domain.service.getcase.GetCaseOperation;
import uk.gov.hmcts.ccd.domain.service.getevents.GetEventsOperation;
import uk.gov.hmcts.ccd.domain.service.supplementarydata.SupplementaryDataUpdateOperation;
import uk.gov.hmcts.ccd.domain.model.std.SupplementaryData;

import java.util.Map;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;

/**
* Provider PACT verification for POST /cases/{caseId}/supplementary-data (CaseController).
* Verifies consumer contracts from ia-case-api / ia-bail-case-api
* (state "Supplementary data updated successfully"). NB: the endpoint wraps the updated values in a
* supplementary_data object; a contract expecting root-level values will surface as genuine feedback.
*/
@Provider("ccdDataStoreAPI_supplementaryUpdate")
@PactBroker(url = "${PACT_BROKER_FULL_URL:http://localhost:9292}",
consumerVersionSelectors = {@VersionSelector(tag = "${PACT_BRANCH_NAME:Dev}")},
providerTags = "${pactbroker.providerTags:master}",
enablePendingPacts = "${pactbroker.enablePending:true}")
@IgnoreNoPactsToVerify
@ExtendWith(SpringExtension.class)
public class CaseSupplementaryDataProviderTest {

@Mock
private GetCaseOperation getCaseOperation;

@Mock
private CreateEventOperation createEventOperation;

@Mock
private CreateCaseOperation createCaseOperation;

@Mock
private UIDService caseReferenceService;

@Mock
private GetEventsOperation getEventsOperation;

@Mock
private SupplementaryDataUpdateOperation supplementaryDataUpdateOperation;

@Mock
private SupplementaryDataUpdateRequestValidator requestValidator;

@Mock
private CaseLinkRetrievalService caseLinkRetrievalService;

@Mock
private GetLinkedCasesResponseCreator getLinkedCasesResponseCreator;


@BeforeEach
void before(PactVerificationContext context) {
MockMvcTestTarget testTarget = new MockMvcTestTarget();
testTarget.setControllers(new CaseController(
getCaseOperation, createEventOperation, createCaseOperation, caseReferenceService,
getEventsOperation, supplementaryDataUpdateOperation, requestValidator, caseLinkRetrievalService,
getLinkedCasesResponseCreator));
if (context != null) {
context.setTarget(testTarget);
}
}

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
if (context != null) {
context.verifyInteraction();
}
}


@State("Supplementary data updated successfully")
public void supplementaryDataUpdated() {
when(caseReferenceService.validateUID(anyString())).thenReturn(true);
when(supplementaryDataUpdateOperation.updateSupplementaryData(anyString(), any()))
.thenReturn(new SupplementaryData(Map.of("HMCTSServiceId", "some-id")));
}
}
Loading