diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/endpoint/std/GlobalSearchProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/endpoint/std/GlobalSearchProviderTest.java new file mode 100644 index 0000000000..7ff17cf758 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/endpoint/std/GlobalSearchProviderTest.java @@ -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); + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseDataValidatorProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseDataValidatorProviderTest.java new file mode 100644 index 0000000000..1bee9717a8 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseDataValidatorProviderTest.java @@ -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()); + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseDocumentProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseDocumentProviderTest.java new file mode 100644 index 0000000000..83119e2e83 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseDocumentProviderTest.java @@ -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. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseFileViewProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseFileViewProviderTest.java new file mode 100644 index 0000000000..ee8b402a57 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseFileViewProviderTest.java @@ -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. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseSupplementaryDataProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseSupplementaryDataProviderTest.java new file mode 100644 index 0000000000..9333551996 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseSupplementaryDataProviderTest.java @@ -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"))); + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseUserProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseUserProviderTest.java new file mode 100644 index 0000000000..faf47f89ca --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/CaseUserProviderTest.java @@ -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.data.casedetails.CaseDetailsRepository; +import uk.gov.hmcts.ccd.domain.service.caseaccess.CaseAccessOperation; +import uk.gov.hmcts.ccd.domain.service.common.UIDService; +import uk.gov.hmcts.ccd.infrastructure.user.UserAuthorisation; + +/** + * Provider PACT verification for PUT /cases/{caseReference}/users (CaseUserController). + */ +@Provider("ccdDataStoreAPI_caseUsers") +@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 CaseUserProviderTest { + + @Mock + private UIDService caseReferenceService; + + @Mock + private UserAuthorisation userAuthorisation; + + @Mock + private CaseDetailsRepository caseRepository; + + @Mock + private CaseAccessOperation caseAccessOperation; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new CaseUserController( + caseReferenceService, userAuthorisation, caseRepository, caseAccessOperation)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A case user role is updated") + public void caseUserRoleUpdated() { + // State setup (mock caseAccessOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/DocumentProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/DocumentProviderTest.java new file mode 100644 index 0000000000..e9e0736b5f --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/DocumentProviderTest.java @@ -0,0 +1,60 @@ +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.common.UIDService; +import uk.gov.hmcts.ccd.domain.service.stdapi.DocumentsOperation; + +/** + * Provider PACT verification for GET /cases/{caseId}/documents (DocumentController). + */ +@Provider("ccdDataStoreAPI_documents") +@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 DocumentProviderTest { + + @Mock + private UIDService caseReferenceService; + + @Mock + private DocumentsOperation documentsOperation; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new DocumentController(caseReferenceService, documentsOperation)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("Case documents exist for a case") + public void caseDocumentsExist() { + // State setup (mock documentsOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/GetCaseByIdProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/GetCaseByIdProviderTest.java new file mode 100644 index 0000000000..f6924bbd0d --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/GetCaseByIdProviderTest.java @@ -0,0 +1,117 @@ +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 org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import uk.gov.hmcts.ccd.data.casedetails.SecurityClassification; +import uk.gov.hmcts.ccd.domain.model.definition.CaseDetails; +import uk.gov.hmcts.ccd.v2.V2; + +import java.util.Optional; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +/** + * Provider PACT verification for GET /cases/{caseId} (CaseController). Verifies the consumer + * contract published by wa_task_management_api (state "a case exists"). The endpoint requires the + * experimental header, which the contract does not declare; it is injected into every replayed + * request via a standalone MockMvc default request header. + */ +@Provider("ccd_data_store_get_case_by_id") +@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 GetCaseByIdProviderTest { + + @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) { + CaseController caseController = new CaseController( + getCaseOperation, createEventOperation, createCaseOperation, caseReferenceService, + getEventsOperation, supplementaryDataUpdateOperation, requestValidator, caseLinkRetrievalService, + getLinkedCasesResponseCreator); + MockMvc mockMvc = MockMvcBuilders.standaloneSetup(caseController) + .defaultRequest(MockMvcRequestBuilders.get("/").header(V2.EXPERIMENTAL_HEADER, "true")) + .build(); + MockMvcTestTarget testTarget = new MockMvcTestTarget(mockMvc); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("a case exists") + public void caseExists() { + when(caseReferenceService.validateUID(anyString())).thenReturn(true); + + CaseDetails caseDetails = new CaseDetails(); + caseDetails.setReference(1593694526480034L); + caseDetails.setJurisdiction("IA"); + caseDetails.setCaseTypeId("Asylum"); + caseDetails.setSecurityClassification(SecurityClassification.PRIVATE); + caseDetails.setState("appealStarted"); + + when(getCaseOperation.execute(anyString())).thenReturn(Optional.of(caseDetails)); + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/StartEventProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/StartEventProviderTest.java new file mode 100644 index 0000000000..025ef1bdd5 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/external/controller/StartEventProviderTest.java @@ -0,0 +1,60 @@ +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.common.UIDService; +import uk.gov.hmcts.ccd.domain.service.startevent.StartEventOperation; + +/** + * Provider PACT verification for the v2 start-event trigger endpoints (StartEventController). + */ +@Provider("ccdDataStoreAPI_startEvent") +@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 StartEventProviderTest { + + @Mock + private StartEventOperation startEventOperation; + + @Mock + private UIDService caseReferenceService; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new StartEventController(startEventOperation, caseReferenceService)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A start event trigger is requested") + public void startEventTriggerRequested() { + // State setup (mock startEventOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseProviderTest.java new file mode 100644 index 0000000000..2ccbac4ecb --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseProviderTest.java @@ -0,0 +1,69 @@ +package uk.gov.hmcts.ccd.v2.internal.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.aggregated.GetCaseHistoryViewOperation; +import uk.gov.hmcts.ccd.domain.service.aggregated.GetCaseViewOperation; +import uk.gov.hmcts.ccd.domain.service.casedataaccesscontrol.CaseDataAccessControl; +import uk.gov.hmcts.ccd.domain.service.common.UIDService; + +/** + * Provider PACT verification for GET /internal/cases/{cid} (UICaseController). + */ +@Provider("ccdDataStoreAPI_caseView") +@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 UICaseProviderTest { + + @Mock + private GetCaseViewOperation getCaseViewOperation; + + @Mock + private GetCaseHistoryViewOperation getCaseHistoryOperation; + + @Mock + private UIDService caseReferenceService; + + @Mock + private CaseDataAccessControl caseDataAccessControl; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new UICaseController( + getCaseViewOperation, getCaseHistoryOperation, caseReferenceService, caseDataAccessControl)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A case is requested for dynamic display") + public void caseRequestedForDynamicDisplay() { + // State setup (mock getCaseViewOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseSearchProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseSearchProviderTest.java new file mode 100644 index 0000000000..292658f496 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseSearchProviderTest.java @@ -0,0 +1,69 @@ +package uk.gov.hmcts.ccd.v2.internal.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.search.CaseSearchResultViewGenerator; +import uk.gov.hmcts.ccd.domain.service.search.elasticsearch.CaseSearchOperation; +import uk.gov.hmcts.ccd.domain.service.search.elasticsearch.ElasticsearchQueryHelper; +import uk.gov.hmcts.ccd.domain.service.search.elasticsearch.ElasticsearchSortService; + +/** + * Provider PACT verification for POST /internal/searchCases (UICaseSearchController). + */ +@Provider("ccdDataStoreAPI_internalSearch") +@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 UICaseSearchProviderTest { + + @Mock + private CaseSearchOperation caseSearchOperation; + + @Mock + private ElasticsearchQueryHelper elasticsearchQueryHelper; + + @Mock + private CaseSearchResultViewGenerator caseSearchResultViewGenerator; + + @Mock + private ElasticsearchSortService elasticsearchSortService; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new UICaseSearchController( + caseSearchOperation, elasticsearchQueryHelper, caseSearchResultViewGenerator, elasticsearchSortService)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A search for cases is requested") + public void searchForCasesRequested() { + // State setup (mock caseSearchOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIDefinitionProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIDefinitionProviderTest.java new file mode 100644 index 0000000000..f107b8e580 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIDefinitionProviderTest.java @@ -0,0 +1,69 @@ +package uk.gov.hmcts.ccd.v2.internal.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.aggregated.GetBannerOperation; +import uk.gov.hmcts.ccd.domain.service.aggregated.GetCriteriaOperation; +import uk.gov.hmcts.ccd.domain.service.aggregated.GetJurisdictionUiConfigOperation; +import uk.gov.hmcts.ccd.domain.service.aggregated.GetUserProfileOperation; + +/** + * Provider PACT verification for the internal UI definition endpoints (UIDefinitionController). + */ +@Provider("ccdDataStoreAPI_uiDefinition") +@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 UIDefinitionProviderTest { + + @Mock + private GetCriteriaOperation getCriteriaOperation; + + @Mock + private GetBannerOperation getBannerOperation; + + @Mock + private GetUserProfileOperation getUserProfileOperation; + + @Mock + private GetJurisdictionUiConfigOperation getJurisdictionUiConfigOperation; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new UIDefinitionController( + getCriteriaOperation, getBannerOperation, getUserProfileOperation, getJurisdictionUiConfigOperation)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("UI definition information is requested for jurisdictions") + public void uiDefinitionRequested() { + // State setup (mock the get operations) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIDraftsProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIDraftsProviderTest.java new file mode 100644 index 0000000000..e36da3e615 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIDraftsProviderTest.java @@ -0,0 +1,64 @@ +package uk.gov.hmcts.ccd.v2.internal.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.data.draft.DraftGateway; +import uk.gov.hmcts.ccd.domain.service.aggregated.GetCaseViewOperation; +import uk.gov.hmcts.ccd.domain.service.upsertdraft.UpsertDraftOperation; + +/** + * Provider PACT verification for the internal drafts endpoints (UIDraftsController). + */ +@Provider("ccdDataStoreAPI_drafts") +@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 UIDraftsProviderTest { + + @Mock + private UpsertDraftOperation upsertDraftOperation; + + @Mock + private GetCaseViewOperation getDraftViewOperation; + + @Mock + private DraftGateway draftGateway; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new UIDraftsController(upsertDraftOperation, getDraftViewOperation, draftGateway)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A draft is requested for display") + public void draftRequested() { + // State setup (mock getDraftViewOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIStartTriggerProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIStartTriggerProviderTest.java new file mode 100644 index 0000000000..5089d0dc54 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIStartTriggerProviderTest.java @@ -0,0 +1,60 @@ +package uk.gov.hmcts.ccd.v2.internal.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.aggregated.GetEventTriggerOperation; +import uk.gov.hmcts.ccd.domain.service.common.UIDService; + +/** + * Provider PACT verification for the internal start-trigger endpoints (UIStartTriggerController). + */ +@Provider("ccdDataStoreAPI_startTrigger") +@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 UIStartTriggerProviderTest { + + @Mock + private GetEventTriggerOperation getEventTriggerOperation; + + @Mock + private UIDService caseReferenceService; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new UIStartTriggerController(getEventTriggerOperation, caseReferenceService)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A start trigger is requested for dynamic display") + public void startTriggerRequested() { + // State setup (mock getEventTriggerOperation) to be completed when a consumer contract is published. + } +} diff --git a/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIUserProfileProviderTest.java b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIUserProfileProviderTest.java new file mode 100644 index 0000000000..9346d51434 --- /dev/null +++ b/src/contractTest/java/uk/gov/hmcts/ccd/v2/internal/controller/UIUserProfileProviderTest.java @@ -0,0 +1,56 @@ +package uk.gov.hmcts.ccd.v2.internal.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.aggregated.GetUserProfileOperation; + +/** + * Provider PACT verification for GET /internal/profile (UIUserProfileController). + */ +@Provider("ccdDataStoreAPI_userProfile") +@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 UIUserProfileProviderTest { + + @Mock + private GetUserProfileOperation getUserProfileOperation; + + + @BeforeEach + void before(PactVerificationContext context) { + MockMvcTestTarget testTarget = new MockMvcTestTarget(); + testTarget.setControllers(new UIUserProfileController(getUserProfileOperation)); + if (context != null) { + context.setTarget(testTarget); + } + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void pactVerificationTestTemplate(PactVerificationContext context) { + if (context != null) { + context.verifyInteraction(); + } + } + + + @State("A user profile is requested") + public void userProfileRequested() { + // State setup (mock getUserProfileOperation) to be completed when a consumer contract is published. + } +}