From 6ab4e63886d47c8b86f0333b25d49a99f28b36b2 Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 21 Mar 2025 08:25:08 +0000 Subject: [PATCH 01/21] FT changes for CCD-6207 --- .../F-065a.feature | 52 +++++ ...65a_Test_Data_Access_Metadata_Base.td.json | 31 +++ .../S-065a-Prerequisite.td.json | 44 +++++ .../S-065a-Prerequisite_Case_Update.td.json | 184 ++++++++++++++++++ .../S-065a.1.td.json | 31 +++ .../S-065a.2.td.json | 33 ++++ .../S-065a.3.td.json | 32 +++ ...5_Get_Organisation_Identifier_Base.td.json | 4 +- ...1_Get_Organisation_Identifier_Base.td.json | 4 +- src/main/java/uk/gov/hmcts/ccd/v2/V2.java | 3 + .../internal/controller/UICaseController.java | 51 ++++- .../resource/CaseMetadataResource.java | 21 ++ .../controller/UICaseControllerTest.java | 52 +++++ 13 files changed, 535 insertions(+), 7 deletions(-) create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a_Test_Data_Access_Metadata_Base.td.json create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite.td.json create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite_Case_Update.td.json create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json create mode 100644 src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.3.td.json create mode 100644 src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseMetadataResource.java diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature b/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature new file mode 100644 index 0000000000..da27458118 --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature @@ -0,0 +1,52 @@ +#========================================================== +@F-065a + Feature: F-065a: Retrieve access metadata for a given case ID +#========================================================== + +Background: Load test data for the scenario + Given an appropriate test context as detailed in the test data source + +#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + @S-065a.1 + Scenario: must return case access metadata when the case reference exists + + Given a case that has just been created as in [Standard_Full_Case_Creation_Data], + And a user with [an active profile in CCD], + And a successful call [to get an event token for just created case] as in [S-065a-Prerequisite], + And another successful call [to update case with the token just created] as in [S-065a-Prerequisite_Case_Update], + + When a request is prepared with appropriate values, + And the request [contains a case that has just been created as in Standard_Full_Case_Creation_Data], + And it is submitted to call the [Retrieve access metadata for a given case ID] operation of [CCD Data Store], + + Then a positive response is received, + And the response [contains details of the case just created, along with an HTTP-200 OK], + And the response [contains the case access metadata], + And the response has all other details as expected. + +#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + @S-065a.2 + Scenario: must return 404 when case reference does NOT exist + + Given a user with [an active profile in CCD], + + When a request is prepared with appropriate values, + And the request [uses case-reference which does not exist in CCD], + And it is submitted to call the [Retrieve access metadata for a given case ID] operation of [CCD Data Store], + + Then a positive response is received, + And the response [has an HTTP-200 OK], + And the response [contains the case access metadata with null], + +#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + @S-065a.3 + Scenario: must return 400 when case reference is invalid + + Given a user with [an active profile in CCD], + + When a request is prepared with appropriate values, + And the request [uses an invalid case-reference], + And it is submitted to call the [Retrieve access metadata for a given case ID] operation of [CCD Data Store], + + Then a negative response is received, + And the response [has an HTTP-400 code] diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a_Test_Data_Access_Metadata_Base.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a_Test_Data_Access_Metadata_Base.td.json new file mode 100644 index 0000000000..5749551637 --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a_Test_Data_Access_Metadata_Base.td.json @@ -0,0 +1,31 @@ +{ + "_guid_": "F-065a_Test_Data_Access_Metadata_Base", + + "productName": "CCD Data Store", + "operationName": "Retrieve access metadata for a given case ID", + + "method": "GET", + "uri": "/internal/cases/{cid}/access-metadata", + + "user": { + "_extends_": "Common_User_For_Request" + }, + + "request": { + "_extends_": "Common_Request", + "headers": { + "experimental": true + }, + "pathVariables": { + "cid": "1234567890123456" + } + }, + + "expectedResponse": { + "headers": { + "_extends_": "Common_Response_Headers", + "Content-Type": "[[ANYTHING_PRESENT]]", + "Content-Encoding": "gzip" + } + } +} diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite.td.json new file mode 100644 index 0000000000..ffc823cb5f --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite.td.json @@ -0,0 +1,44 @@ +{ + "_guid_": "S-065a-Prerequisite", + "title": "should create an event token for correct inputs", + + "productName": "CCD Data Store", + "operationName": "Retrieve a create token", + + "method": "GET", + "uri": "/caseworkers/{uid}/jurisdictions/{jid}/case-types/{ctid}/cases/{cid}/event-triggers/{etid}/token", + + "specs": [ + "to get an event token for just created case" + ], + + "user": { + "_extends_": "Common_User_For_Request" + }, + + "request": { + "headers": { + "_extends_": "Common_Request_Headers" + }, + "pathVariables": { + "uid": "[[DEFAULT_AUTO_VALUE]]", + "jid": "AUTOTEST1", + "ctid": "AAT_AUTH_15", + "cid": "${[scenarioContext][parentContext][childContexts][Standard_Full_Case_Creation_Data][testData][actualResponse][body][id]}", + "etid": "UPDATE" + } + }, + + "expectedResponse": { + "_extends_": "Common_200_Response", + "headers": { + "Content-Encoding": "gzip", + "Content-Length": "[[ANYTHING_PRESENT]]" + }, + "body": { + "token": "[[ANYTHING_PRESENT]]", + "case_details": "[[ANYTHING_PRESENT]]", + "event_id": "UPDATE" + } + } +} diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite_Case_Update.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite_Case_Update.td.json new file mode 100644 index 0000000000..02cabcf186 --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a-Prerequisite_Case_Update.td.json @@ -0,0 +1,184 @@ +{ + "_guid_": "S-065a-Prerequisite_Case_Update", + "title": "should update an existing case with correct inputs", + + "productName": "CCD Data Store", + "operationName": "Submit update case event", + + "method": "POST", + "uri": "/caseworkers/{uid}/jurisdictions/{jid}/case-types/{ctid}/cases/{cid}/events", + + "specs": [ + "to update case with the token just created" + ], + + "user": { + "_extends_": "Common_User_For_Request" + }, + + "request": { + "headers": { + "_extends_": "Common_Request_Headers" + }, + "pathVariables": { + "uid": "[[DEFAULT_AUTO_VALUE]]", + "jid": "AUTOTEST1", + "ctid": "AAT_AUTH_15", + "cid": "${[scenarioContext][parentContext][childContexts][Standard_Full_Case_Creation_Data][testData][actualResponse][body][id]}" + }, + "body": { + "data": { + "MoneyGBPField": "4300", + "FixedListField": "VALUE3", + "AddressUKField": { + "County": "Greater London", + "Country": "UK", + "PostCode": "SW1H 9AJ", + "PostTown": "Westminster", + "AddressLine1": "102 Petty France", + "AddressLine2": "CCD", + "AddressLine3": "c/o HMCTS Reform" + }, + "ComplexField": { + "ComplexTextField": "Nested text", + "ComplexFixedListField": "VALUE2" + }, + "DateTimeField": "1988-07-07T22:20:00", + "PhoneUKField": "07123456789", + "NumberField": "164528", + "MultiSelectListField": [ + "OPTION2", + "OPTION4" + ], + "YesOrNoField": "Yes", + "EmailField": "ccd@hmcts.net", + "TextField": "Some Text", + "DateField": "2017-02-13", + "TextAreaField": "Line1\nLine2", + "CollectionField": [ + { + "id": "4926d94c-1fa3-4c16-b5ba-5a122d8c622d", + "value": "Alias 1" + }, + { + "id": "936b6a65-a179-474f-bdff-1d4f961e9a8c", + "value": "Alias 2" + } + ] + }, + "event": { + "id": "UPDATE", + "summary": "", + "description": "" + }, + "event_token": "${[scenarioContext][parentContext][childContexts][S-065a-Prerequisite][testData][actualResponse][body][token]}", + "ignore_warning": false + } + }, + + "expectedResponse": { + "_extends_": "Common_201_Response", + "headers": { + "vary": "accept-encoding", + "Content-Length": "[[ANYTHING_PRESENT]]", + "Content-Encoding": "gzip" + }, + "body": { + "id": "[[ANYTHING_PRESENT]]", + "jurisdiction": "AUTOTEST1", + "state": "TODO", + "version": 1, + "case_type_id": "AAT_AUTH_15", + "last_state_modified_date": "[[ANYTHING_PRESENT]]", + "created_date": "[[ANYTHING_PRESENT]]", + "last_modified": "[[ANYTHING_PRESENT]]", + "security_classification": "PUBLIC", + "case_data": { + "MoneyGBPField": "[[ANYTHING_PRESENT]]", + "FixedListField": "VALUE3", + "AddressUKField": { + "County": "Greater London", + "Country": "UK", + "PostCode": "SW1H 9AJ", + "PostTown": "Westminster", + "AddressLine1": "102 Petty France", + "AddressLine2": "CCD", + "AddressLine3": "c/o HMCTS Reform" + }, + "ComplexField": { + "ComplexTextField": "Nested text", + "ComplexFixedListField": "VALUE2" + }, + "DateTimeField": "[[ANYTHING_PRESENT]]", + "PhoneUKField": "07123456789", + "NumberField": "164528", + "MultiSelectListField": [ + "OPTION2", + "OPTION4" + ], + "YesOrNoField": "Yes", + "EmailField": "ccd@hmcts.net", + "TextField": "Some Text", + "DateField": "2017-02-13", + "TextAreaField": "Line1\nLine2", + "CollectionField": [ + { + "value": "Alias 1", + "id": "[[ANYTHING_PRESENT]]" + }, + { + "value": "Alias 2", + "id": "[[ANYTHING_PRESENT]]" + } + ] + }, + "data_classification": { + "MoneyGBPField": "PUBLIC", + "FixedListField": "PUBLIC", + "AddressUKField": { + "classification": "PUBLIC", + "value": { + "County": "PUBLIC", + "Country": "PUBLIC", + "PostCode": "PUBLIC", + "PostTown": "PUBLIC", + "AddressLine1": "PUBLIC", + "AddressLine2": "PUBLIC", + "AddressLine3": "PUBLIC" + } + }, + "DateTimeField": "PUBLIC", + "PhoneUKField": "PUBLIC", + "NumberField": "PUBLIC", + "MultiSelectListField": "PUBLIC", + "YesOrNoField": "PUBLIC", + "EmailField": "PUBLIC", + "TextField": "PUBLIC", + "DateField": "PUBLIC", + "TextAreaField": "PUBLIC", + "CollectionField": { + "classification": "PUBLIC", + "value": [ + { + "__ordering__": "ordered" + }, + { + "id": "[[ANYTHING_PRESENT]]", + "classification": "PUBLIC" + }, + { + "id": "[[ANYTHING_PRESENT]]", + "classification": "PUBLIC" + } + ] + } + }, + "supplementary_data": null, + "after_submit_callback_response": null, + "callback_response_status_code": null, + "callback_response_status": null, + "delete_draft_response_status_code": null, + "delete_draft_response_status": null + } + } +} diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json new file mode 100644 index 0000000000..516a47da04 --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json @@ -0,0 +1,31 @@ +{ + "_guid_": "S-065a.1", + "_extends_": "F-065a_Test_Data_Access_Metadata_Base", + "title": "must return case view history when the case reference exists", + + "specs": [ + "an active profile in CCD", + "contains a case that has just been created as in Standard_Full_Case_Creation_Data", + "contains details of the case just created, along with an HTTP-200 OK", + "contains the case access metadata" + ], + + "request": { + "pathVariables": { + "cid": "${[scenarioContext][childContexts][Standard_Full_Case_Creation_Data][testData][actualResponse][body][id]}" + } + }, + + "expectedResponse": { + "_extends_": "Common_200_Response", + "headers": { + "Vary": "Accept-Encoding", + "Transfer-Encoding": "chunked", + "Content-Type": "application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-access-metadata.v2+json;charset=UTF-8" + }, + "body": { + "accessGrants" : [ "STANDARD" ], + "accessProcess" : "NONE" + } + } +} diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json new file mode 100644 index 0000000000..ee89d3c157 --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json @@ -0,0 +1,33 @@ +{ + "_guid_": "S-065a.2", + "_extends_": "F-065a_Test_Data_Access_Metadata_Base", + "title": "must return 404 when case reference does NOT exist", + + "specs": [ + "an active profile in CCD", + "uses case-reference which does not exist in CCD", + "has an HTTP-200 OK", + "contains the case access metadata with null" + ], + + "request": { + "pathVariables": { + "cid": "1234123412341238" + } + }, + + "expectedResponse": { + "_extends_": "Common_404_Response", + "headers": { + "Content-Length": "[[ANY_INTEGER_NOT_NULLABLE]]" + }, + "body": { + "exception": "uk.gov.hmcts.ccd.endpoint.exceptions.ResourceNotFoundException", + "message": "No case found", + "path": "/internal/cases/1234123412341238", + "details": null, + "callbackErrors": null, + "callbackWarnings": null + } + } +} diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.3.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.3.td.json new file mode 100644 index 0000000000..8a59dcf8c8 --- /dev/null +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.3.td.json @@ -0,0 +1,32 @@ +{ + "_guid_": "S-065a.3", + "_extends_": "F-065a_Test_Data_Access_Metadata_Base", + "title": "must return 400 when case reference is invalid", + + "specs": [ + "an active profile in CCD", + "uses an invalid case-reference", + "has an HTTP-400 code" + ], + + "request": { + "pathVariables": { + "cid": "dummyid" + } + }, + + "expectedResponse": { + "_extends_": "Common_400_Response", + "headers": { + "Content-Length": "[[ANY_INTEGER_NOT_NULLABLE]]" + }, + "body": { + "exception": "uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException", + "message": "Case ID is not valid", + "path": "/internal/cases/dummyid", + "details": null, + "callbackErrors": null, + "callbackWarnings": null + } + } +} diff --git a/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json b/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json index 3d7c9c3b81..21c4aa7696 100644 --- a/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json +++ b/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json @@ -31,9 +31,7 @@ }, "body": { "organisationIdentifier": "[[ANYTHING_PRESENT]]", - "users": "[[ANYTHING_PRESENT]]", - "organisationStatus": "[[ANYTHING_PRESENT]]", - "organisationProfileIds": "[[ANYTHING_PRESENT]]" + "users": "[[ANYTHING_PRESENT]]" } } } diff --git a/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json b/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json index 8023ae15b3..a9999a1ac4 100644 --- a/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json +++ b/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json @@ -31,9 +31,7 @@ }, "body": { "organisationIdentifier": "[[ANYTHING_PRESENT]]", - "users": "[[ANYTHING_PRESENT]]", - "organisationStatus": "[[ANYTHING_PRESENT]]", - "organisationProfileIds": "[[ANYTHING_PRESENT]]" + "users": "[[ANYTHING_PRESENT]]" } } } diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/V2.java b/src/main/java/uk/gov/hmcts/ccd/v2/V2.java index 13931e5ac7..86332ff872 100644 --- a/src/main/java/uk/gov/hmcts/ccd/v2/V2.java +++ b/src/main/java/uk/gov/hmcts/ccd/v2/V2.java @@ -65,6 +65,9 @@ private MediaType() { public static final String CASE_EVENTS = "application/vnd.uk.gov.hmcts.ccd-data-store-api.case-events.v2+json;charset=UTF-8"; + public static final String UI_CASE_ACCESS_METADATA = + "application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-access-metadata.v2+json;charset=UTF-8"; + } public final class Error { diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java index abd477b68f..c4c7c65d20 100644 --- a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java +++ b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java @@ -13,14 +13,17 @@ import uk.gov.hmcts.ccd.auditlog.LogAudit; import uk.gov.hmcts.ccd.domain.model.aggregated.CaseHistoryView; import uk.gov.hmcts.ccd.domain.model.aggregated.CaseView; +import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.CaseAccessMetadata; import uk.gov.hmcts.ccd.domain.service.aggregated.AuthorisedGetCaseHistoryViewOperation; import uk.gov.hmcts.ccd.domain.service.aggregated.AuthorisedGetCaseViewOperation; 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; import uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException; import uk.gov.hmcts.ccd.v2.V2; import uk.gov.hmcts.ccd.v2.internal.resource.CaseHistoryViewResource; +import uk.gov.hmcts.ccd.v2.internal.resource.CaseMetadataResource; import uk.gov.hmcts.ccd.v2.internal.resource.CaseViewResource; import static uk.gov.hmcts.ccd.auditlog.AuditOperationType.CASE_ACCESSED; @@ -34,16 +37,19 @@ public class UICaseController { private final GetCaseViewOperation getCaseViewOperation; private final GetCaseHistoryViewOperation getCaseHistoryViewOperation; private final UIDService caseReferenceService; + private final CaseDataAccessControl caseDataAccessControl; @Autowired public UICaseController( @Qualifier(AuthorisedGetCaseViewOperation.QUALIFIER) GetCaseViewOperation getCaseViewOperation, @Qualifier(AuthorisedGetCaseHistoryViewOperation.QUALIFIER) GetCaseHistoryViewOperation getCaseHistoryOperation, - UIDService caseReferenceService + UIDService caseReferenceService, + CaseDataAccessControl caseDataAccessControl ) { this.getCaseViewOperation = getCaseViewOperation; this.getCaseHistoryViewOperation = getCaseHistoryOperation; this.caseReferenceService = caseReferenceService; + this.caseDataAccessControl = caseDataAccessControl; } @GetMapping( @@ -126,4 +132,47 @@ public ResponseEntity getCaseHistoryView(@PathVariable( return ResponseEntity.ok(new CaseHistoryViewResource(caseHistoryView, caseId)); } + + @GetMapping( + path = "/{caseId}/access-metadata", + headers = { + V2.EXPERIMENTAL_HEADER + }, + produces = { + V2.MediaType.UI_CASE_ACCESS_METADATA + } + ) + @ApiOperation( + value = "Retrieve access metadata for a given case ID", + notes = V2.EXPERIMENTAL_WARNING + ) + @ApiResponses({ + @ApiResponse( + code = 200, + message = "Success", + response = CaseMetadataResource.class + ), + @ApiResponse( + code = 400, + message = ERROR_CASE_ID_INVALID + ), + @ApiResponse( + code = 404, + message = "Case not found" + ) + }) + @LogAudit(operationType = CASE_ACCESSED, caseId = "#caseId", + caseType = "#result.body.caseType.id") + public ResponseEntity getCaseAccessMetadata(@PathVariable("caseId") String caseId) { + if (!caseReferenceService.validateUID(caseId)) { + throw new BadRequestException(ERROR_CASE_ID_INVALID); + } + + final CaseAccessMetadata caseaccessMetadata = caseDataAccessControl.generateAccessMetadata(caseId); + CaseMetadataResource caseMetadataResource = new CaseMetadataResource(); + caseMetadataResource.setAccessGrants(caseaccessMetadata.getAccessGrants()); + caseMetadataResource.setAccessProcess(caseaccessMetadata.getAccessProcess()); + + return ResponseEntity.ok(caseMetadataResource); + } } diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseMetadataResource.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseMetadataResource.java new file mode 100644 index 0000000000..4449ab5524 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseMetadataResource.java @@ -0,0 +1,21 @@ +package uk.gov.hmcts.ccd.v2.internal.resource; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.AccessProcess; +import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.enums.GrantType; + +import java.util.List; + +@Data +@NoArgsConstructor +public class CaseMetadataResource { + + @JsonProperty("accessGrants") + private List accessGrants; + + @JsonProperty("accessProcess") + private AccessProcess accessProcess; + +} diff --git a/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java b/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java index 0707079561..99345a28f6 100644 --- a/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java +++ b/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java @@ -12,19 +12,28 @@ import uk.gov.hmcts.ccd.domain.model.aggregated.CaseHistoryView; import uk.gov.hmcts.ccd.domain.model.aggregated.CaseView; import uk.gov.hmcts.ccd.domain.model.aggregated.CaseViewEvent; +import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.AccessProcess; +import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.CaseAccessMetadata; +import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.enums.GrantType; 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; import uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException; import uk.gov.hmcts.ccd.v2.internal.resource.CaseHistoryViewResource; +import uk.gov.hmcts.ccd.v2.internal.resource.CaseMetadataResource; import uk.gov.hmcts.ccd.v2.internal.resource.CaseViewResource; +import java.util.List; + import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; @DisplayName("UICaseController") @@ -41,6 +50,9 @@ class UICaseControllerTest { @Mock private UIDService caseReferenceService; + @Mock + private CaseDataAccessControl caseDataAccessControl; + @Mock private CaseView caseView; @@ -62,6 +74,7 @@ void setUp() { when(caseHistoryView.getEvent()).thenReturn(caseViewEvent); when(caseViewEvent.getId()).thenReturn(EVENT_ID); + when(caseDataAccessControl.generateAccessMetadata(CASE_REFERENCE)).thenReturn(new CaseAccessMetadata()); when(caseReferenceService.validateUID(CASE_REFERENCE)).thenReturn(TRUE); when(getCaseViewOperation.execute(CASE_REFERENCE)).thenReturn(caseView); when(getCaseHistoryViewOperation.execute(CASE_REFERENCE, EVENT_ID)).thenReturn(caseHistoryView); @@ -137,4 +150,43 @@ void shouldPropagateExceptionWhenThrown() { } } + @Nested + @DisplayName("GET /internal/cases/{caseId}/access-metadata") + class GetCaseAccessMetadataForId { + + @Test + @DisplayName("should return 200 when metadata found") + void accessMetadataFound() { + CaseAccessMetadata caseAccessMetadata = new CaseAccessMetadata(); + caseAccessMetadata.setAccessGrants(List.of(GrantType.STANDARD, GrantType.SPECIFIC, GrantType.CHALLENGED)); + caseAccessMetadata.setAccessProcess(AccessProcess.NONE); + doReturn(caseAccessMetadata).when(caseDataAccessControl).generateAccessMetadata(CASE_REFERENCE); + + final ResponseEntity response = caseController.getCaseAccessMetadata(CASE_REFERENCE); + + assertAll( + () -> assertThat(response.getStatusCode(), is(HttpStatus.OK)), + () -> assertThat(response.getBody().getAccessGrants(), hasItem(GrantType.STANDARD)), + () -> assertThat(response.getBody().getAccessProcess(), is(AccessProcess.NONE)) + ); + } + + @Test + @DisplayName("should propagate BadRequestException when case reference not valid") + void caseReferenceNotValid() { + when(caseReferenceService.validateUID(CASE_REFERENCE)).thenReturn(FALSE); + + assertThrows(BadRequestException.class, + () -> caseController.getCaseAccessMetadata(CASE_REFERENCE)); + } + + @Test + @DisplayName("should propagate exception") + void shouldPropagateExceptionWhenThrown() { + when(caseDataAccessControl.generateAccessMetadata(CASE_REFERENCE)).thenThrow(RuntimeException.class); + + assertThrows(Exception.class, + () -> caseController.getCaseAccessMetadata(CASE_REFERENCE)); + } + } } From cf47b0d93bdf25593385d2afab21f043dd8b1679 Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 21 Mar 2025 09:24:47 +0000 Subject: [PATCH 02/21] fix Version of java helm chart below 5.3.0 is deprecated, please upgrade to latest release https://github.com/hmcts/chart-java/releases This configuration will stop working by 31/03/2025 ( in 10 days ) --- charts/ccd-data-store-api/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/ccd-data-store-api/Chart.yaml b/charts/ccd-data-store-api/Chart.yaml index 20703c0259..3f8b688dff 100644 --- a/charts/ccd-data-store-api/Chart.yaml +++ b/charts/ccd-data-store-api/Chart.yaml @@ -8,8 +8,8 @@ maintainers: email: ccd-devops@HMCTS.NET dependencies: - name: java - version: 5.2.0 - repository: 'https://hmctspublic.azurecr.io/helm/v1/repo/' + version: 5.3.0 + repository: 'oci://hmctspublic.azurecr.io/helm' - name: elasticsearch version: 7.17.3 repository: 'https://helm.elastic.co' From 9871159ceb52784388de60295c0f30859c44188a Mon Sep 17 00:00:00 2001 From: hmcts-jenkins-a-to-c <62422075+hmcts-jenkins-a-to-c[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 09:26:55 +0000 Subject: [PATCH 03/21] Bumping chart version/ fixing aliases --- charts/ccd-data-store-api/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/ccd-data-store-api/Chart.yaml b/charts/ccd-data-store-api/Chart.yaml index 3f8b688dff..bea840b3ca 100644 --- a/charts/ccd-data-store-api/Chart.yaml +++ b/charts/ccd-data-store-api/Chart.yaml @@ -2,7 +2,7 @@ description: Helm chart for the HMCTS CCD Data Store name: ccd-data-store-api apiVersion: v2 home: https://github.com/hmcts/ccd-data-store-api -version: 2.0.32 +version: 2.0.33 maintainers: - name: HMCTS CCD Dev Team email: ccd-devops@HMCTS.NET From 002063de2664d531fd08542d3d6ab60f5060fd2e Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 21 Mar 2025 10:08:48 +0000 Subject: [PATCH 04/21] empty commit to trigger build From a3d4f19bf9d5c473836da9513545daad0a4b74c0 Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 21 Mar 2025 10:55:45 +0000 Subject: [PATCH 05/21] empty commit to trigger build From ae4b646c5d6e7d9bb9d1f87d3de0140abe6ed5fa Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 21 Mar 2025 15:46:36 +0000 Subject: [PATCH 06/21] Added "organisationStatus", "organisationProfileIds" to expected response. --- .../common/F-105_Get_Organisation_Identifier_Base.td.json | 4 +++- .../common/F-111_Get_Organisation_Identifier_Base.td.json | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json b/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json index 21c4aa7696..3d7c9c3b81 100644 --- a/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json +++ b/src/aat/resources/features/F-105 - Add Case-Assigned Users and Roles/With Organisation Context/common/F-105_Get_Organisation_Identifier_Base.td.json @@ -31,7 +31,9 @@ }, "body": { "organisationIdentifier": "[[ANYTHING_PRESENT]]", - "users": "[[ANYTHING_PRESENT]]" + "users": "[[ANYTHING_PRESENT]]", + "organisationStatus": "[[ANYTHING_PRESENT]]", + "organisationProfileIds": "[[ANYTHING_PRESENT]]" } } } diff --git a/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json b/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json index a9999a1ac4..8023ae15b3 100644 --- a/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json +++ b/src/aat/resources/features/F-111 - Remove Case-Assigned Users and Roles/With Organisation Context/common/common/F-111_Get_Organisation_Identifier_Base.td.json @@ -31,7 +31,9 @@ }, "body": { "organisationIdentifier": "[[ANYTHING_PRESENT]]", - "users": "[[ANYTHING_PRESENT]]" + "users": "[[ANYTHING_PRESENT]]", + "organisationStatus": "[[ANYTHING_PRESENT]]", + "organisationProfileIds": "[[ANYTHING_PRESENT]]" } } } From 035fa0bc5ccfae23728bb9e60f55bcc0df64a467 Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 21 Mar 2025 16:21:33 +0000 Subject: [PATCH 07/21] empty commit to trigger build --- ...{CaseMetadataResource.java => CaseAccessMetadataResource.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/{CaseMetadataResource.java => CaseAccessMetadataResource.java} (100%) diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseMetadataResource.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java similarity index 100% rename from src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseMetadataResource.java rename to src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java From 2e582460728bc8024813c22fd5a3344e62f5a54e Mon Sep 17 00:00:00 2001 From: patelila Date: Mon, 24 Mar 2025 08:51:27 +0000 Subject: [PATCH 08/21] empty commit to trigger build From 80fc27bd8f66f5c5328e8212e9a5e8bd1970a5bb Mon Sep 17 00:00:00 2001 From: patelila Date: Mon, 24 Mar 2025 09:01:44 +0000 Subject: [PATCH 09/21] renamed caseMetadataResource to CaseAccessMetadataResource --- .../ccd/v2/internal/controller/UICaseController.java | 8 ++++---- .../v2/internal/resource/CaseAccessMetadataResource.java | 2 +- .../ccd/v2/internal/controller/UICaseControllerTest.java | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java index c4c7c65d20..4981c9be1f 100644 --- a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java +++ b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java @@ -23,7 +23,7 @@ import uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException; import uk.gov.hmcts.ccd.v2.V2; import uk.gov.hmcts.ccd.v2.internal.resource.CaseHistoryViewResource; -import uk.gov.hmcts.ccd.v2.internal.resource.CaseMetadataResource; +import uk.gov.hmcts.ccd.v2.internal.resource.CaseAccessMetadataResource; import uk.gov.hmcts.ccd.v2.internal.resource.CaseViewResource; import static uk.gov.hmcts.ccd.auditlog.AuditOperationType.CASE_ACCESSED; @@ -150,7 +150,7 @@ public ResponseEntity getCaseHistoryView(@PathVariable( @ApiResponse( code = 200, message = "Success", - response = CaseMetadataResource.class + response = CaseAccessMetadataResource.class ), @ApiResponse( code = 400, @@ -163,13 +163,13 @@ public ResponseEntity getCaseHistoryView(@PathVariable( }) @LogAudit(operationType = CASE_ACCESSED, caseId = "#caseId", caseType = "#result.body.caseType.id") - public ResponseEntity getCaseAccessMetadata(@PathVariable("caseId") String caseId) { + public ResponseEntity getCaseAccessMetadata(@PathVariable("caseId") String caseId) { if (!caseReferenceService.validateUID(caseId)) { throw new BadRequestException(ERROR_CASE_ID_INVALID); } final CaseAccessMetadata caseaccessMetadata = caseDataAccessControl.generateAccessMetadata(caseId); - CaseMetadataResource caseMetadataResource = new CaseMetadataResource(); + CaseAccessMetadataResource caseMetadataResource = new CaseAccessMetadataResource(); caseMetadataResource.setAccessGrants(caseaccessMetadata.getAccessGrants()); caseMetadataResource.setAccessProcess(caseaccessMetadata.getAccessProcess()); diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java index 4449ab5524..17ebe9d515 100644 --- a/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java +++ b/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java @@ -10,7 +10,7 @@ @Data @NoArgsConstructor -public class CaseMetadataResource { +public class CaseAccessMetadataResource { @JsonProperty("accessGrants") private List accessGrants; diff --git a/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java b/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java index 99345a28f6..e902b911c1 100644 --- a/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java +++ b/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java @@ -21,7 +21,7 @@ import uk.gov.hmcts.ccd.domain.service.common.UIDService; import uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException; import uk.gov.hmcts.ccd.v2.internal.resource.CaseHistoryViewResource; -import uk.gov.hmcts.ccd.v2.internal.resource.CaseMetadataResource; +import uk.gov.hmcts.ccd.v2.internal.resource.CaseAccessMetadataResource; import uk.gov.hmcts.ccd.v2.internal.resource.CaseViewResource; import java.util.List; @@ -162,7 +162,8 @@ void accessMetadataFound() { caseAccessMetadata.setAccessProcess(AccessProcess.NONE); doReturn(caseAccessMetadata).when(caseDataAccessControl).generateAccessMetadata(CASE_REFERENCE); - final ResponseEntity response = caseController.getCaseAccessMetadata(CASE_REFERENCE); + final ResponseEntity response + = caseController.getCaseAccessMetadata(CASE_REFERENCE); assertAll( () -> assertThat(response.getStatusCode(), is(HttpStatus.OK)), From caf5de1cc84bb5c7e47f4ea3dd3893341982bf47 Mon Sep 17 00:00:00 2001 From: patelila Date: Mon, 24 Mar 2025 10:10:25 +0000 Subject: [PATCH 10/21] use caseAccessMetadata instead --- .../internal/controller/UICaseController.java | 13 ++++++------ .../resource/CaseAccessMetadataResource.java | 21 ------------------- .../controller/UICaseControllerTest.java | 3 +-- 3 files changed, 7 insertions(+), 30 deletions(-) delete mode 100644 src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java index 4981c9be1f..c8bb1660f2 100644 --- a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java +++ b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java @@ -23,7 +23,6 @@ import uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException; import uk.gov.hmcts.ccd.v2.V2; import uk.gov.hmcts.ccd.v2.internal.resource.CaseHistoryViewResource; -import uk.gov.hmcts.ccd.v2.internal.resource.CaseAccessMetadataResource; import uk.gov.hmcts.ccd.v2.internal.resource.CaseViewResource; import static uk.gov.hmcts.ccd.auditlog.AuditOperationType.CASE_ACCESSED; @@ -150,7 +149,7 @@ public ResponseEntity getCaseHistoryView(@PathVariable( @ApiResponse( code = 200, message = "Success", - response = CaseAccessMetadataResource.class + response = CaseAccessMetadata.class ), @ApiResponse( code = 400, @@ -163,16 +162,16 @@ public ResponseEntity getCaseHistoryView(@PathVariable( }) @LogAudit(operationType = CASE_ACCESSED, caseId = "#caseId", caseType = "#result.body.caseType.id") - public ResponseEntity getCaseAccessMetadata(@PathVariable("caseId") String caseId) { + public ResponseEntity getCaseAccessMetadata(@PathVariable("caseId") String caseId) { if (!caseReferenceService.validateUID(caseId)) { throw new BadRequestException(ERROR_CASE_ID_INVALID); } final CaseAccessMetadata caseaccessMetadata = caseDataAccessControl.generateAccessMetadata(caseId); - CaseAccessMetadataResource caseMetadataResource = new CaseAccessMetadataResource(); - caseMetadataResource.setAccessGrants(caseaccessMetadata.getAccessGrants()); - caseMetadataResource.setAccessProcess(caseaccessMetadata.getAccessProcess()); + CaseAccessMetadata caseAccessMetadata = new CaseAccessMetadata(); + caseAccessMetadata.setAccessGrants(caseaccessMetadata.getAccessGrants()); + caseAccessMetadata.setAccessProcess(caseaccessMetadata.getAccessProcess()); - return ResponseEntity.ok(caseMetadataResource); + return ResponseEntity.ok(caseAccessMetadata); } } diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java deleted file mode 100644 index 17ebe9d515..0000000000 --- a/src/main/java/uk/gov/hmcts/ccd/v2/internal/resource/CaseAccessMetadataResource.java +++ /dev/null @@ -1,21 +0,0 @@ -package uk.gov.hmcts.ccd.v2.internal.resource; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; -import lombok.NoArgsConstructor; -import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.AccessProcess; -import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.enums.GrantType; - -import java.util.List; - -@Data -@NoArgsConstructor -public class CaseAccessMetadataResource { - - @JsonProperty("accessGrants") - private List accessGrants; - - @JsonProperty("accessProcess") - private AccessProcess accessProcess; - -} diff --git a/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java b/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java index e902b911c1..e7184cacd9 100644 --- a/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java +++ b/src/test/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseControllerTest.java @@ -21,7 +21,6 @@ import uk.gov.hmcts.ccd.domain.service.common.UIDService; import uk.gov.hmcts.ccd.endpoint.exceptions.BadRequestException; import uk.gov.hmcts.ccd.v2.internal.resource.CaseHistoryViewResource; -import uk.gov.hmcts.ccd.v2.internal.resource.CaseAccessMetadataResource; import uk.gov.hmcts.ccd.v2.internal.resource.CaseViewResource; import java.util.List; @@ -162,7 +161,7 @@ void accessMetadataFound() { caseAccessMetadata.setAccessProcess(AccessProcess.NONE); doReturn(caseAccessMetadata).when(caseDataAccessControl).generateAccessMetadata(CASE_REFERENCE); - final ResponseEntity response + final ResponseEntity response = caseController.getCaseAccessMetadata(CASE_REFERENCE); assertAll( From e489b7b6959c9699798c0dd71dacd9185f5a001c Mon Sep 17 00:00:00 2001 From: patelila Date: Mon, 24 Mar 2025 11:20:53 +0000 Subject: [PATCH 11/21] fix FT --- .../features/F-065a - Get Case V2 Internal/F-065a.feature | 2 +- .../features/F-065a - Get Case V2 Internal/S-065a.1.td.json | 4 +++- .../features/F-065a - Get Case V2 Internal/S-065a.2.td.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature b/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature index da27458118..48a1c78719 100644 --- a/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/F-065a.feature @@ -26,7 +26,7 @@ Background: Load test data for the scenario #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @S-065a.2 - Scenario: must return 404 when case reference does NOT exist + Scenario: must return null when case reference does NOT exist Given a user with [an active profile in CCD], diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json index 516a47da04..3e1274a911 100644 --- a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json @@ -25,7 +25,9 @@ }, "body": { "accessGrants" : [ "STANDARD" ], - "accessProcess" : "NONE" + "accessProcess" : "NONE", + "accessGrantsString" : "STANDARD", + "accessProcessString" : "NONE" } } } diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json index ee89d3c157..45edfec8d8 100644 --- a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.2.td.json @@ -1,7 +1,7 @@ { "_guid_": "S-065a.2", "_extends_": "F-065a_Test_Data_Access_Metadata_Base", - "title": "must return 404 when case reference does NOT exist", + "title": "must return null when case reference does NOT exist", "specs": [ "an active profile in CCD", From 1de4193178ec4a1ed9d184e9a6a99f68a47b013b Mon Sep 17 00:00:00 2001 From: patelila Date: Mon, 24 Mar 2025 11:44:42 +0000 Subject: [PATCH 12/21] fix FT, revert change --- .../F-065a - Get Case V2 Internal/S-065a.1.td.json | 4 +--- .../model/casedataaccesscontrol/CaseAccessMetadata.java | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json index 3e1274a911..516a47da04 100644 --- a/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json +++ b/src/aat/resources/features/F-065a - Get Case V2 Internal/S-065a.1.td.json @@ -25,9 +25,7 @@ }, "body": { "accessGrants" : [ "STANDARD" ], - "accessProcess" : "NONE", - "accessGrantsString" : "STANDARD", - "accessProcessString" : "NONE" + "accessProcess" : "NONE" } } } diff --git a/src/main/java/uk/gov/hmcts/ccd/domain/model/casedataaccesscontrol/CaseAccessMetadata.java b/src/main/java/uk/gov/hmcts/ccd/domain/model/casedataaccesscontrol/CaseAccessMetadata.java index f158037fd3..f57233e5b3 100644 --- a/src/main/java/uk/gov/hmcts/ccd/domain/model/casedataaccesscontrol/CaseAccessMetadata.java +++ b/src/main/java/uk/gov/hmcts/ccd/domain/model/casedataaccesscontrol/CaseAccessMetadata.java @@ -1,5 +1,6 @@ package uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import uk.gov.hmcts.ccd.domain.model.casedataaccesscontrol.enums.GrantType; @@ -19,6 +20,12 @@ public class CaseAccessMetadata { private List accessGrants; private AccessProcess accessProcess; + @JsonIgnore + private String accessGrantsString; + + @JsonIgnore + private String accessProcessString; + public String getAccessGrantsString() { if (accessGrants == null) { return null; From e8134374b406bc19b4ec362d6e2bee008224e5c9 Mon Sep 17 00:00:00 2001 From: patelila Date: Tue, 25 Mar 2025 11:09:13 +0000 Subject: [PATCH 13/21] empty commit to trigger build From 55e72ad382f6d54aeec436e2ff89b6982f3976ea Mon Sep 17 00:00:00 2001 From: patelila Date: Tue, 25 Mar 2025 12:23:16 +0000 Subject: [PATCH 14/21] use the correct PR's of definition-store and data-store --- Jenkinsfile_CNP | 4 ++-- charts/ccd-data-store-api/values.preview.template.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile_CNP b/Jenkinsfile_CNP index c70ee447d5..f1c437b9d6 100644 --- a/Jenkinsfile_CNP +++ b/Jenkinsfile_CNP @@ -20,8 +20,8 @@ def branchesToSync = ['demo', 'ithc', 'perftest', 'develop'] // Variables to switch pipeline logic and wiring per type of build -def definitionStoreDevelopPr = "PR-575" // This doesn't change frequently, but when it does, only change this value. -def dataStoreApiDevelopPr = "PR-1260" // This doesn't change frequently, but when it does, only change this value. +def definitionStoreDevelopPr = "PR-1540" // This doesn't change frequently, but when it does, only change this value. +def dataStoreApiDevelopPr = "PR-1552" // This doesn't change frequently, but when it does, only change this value. def prsToUseAat = "PR-1793,PR-1888" // Set this value to a PR number, or add it as a comma-separated value, if it's to follow CI/CD. def secrets = [ diff --git a/charts/ccd-data-store-api/values.preview.template.yaml b/charts/ccd-data-store-api/values.preview.template.yaml index 31c16a7631..921c152fb1 100644 --- a/charts/ccd-data-store-api/values.preview.template.yaml +++ b/charts/ccd-data-store-api/values.preview.template.yaml @@ -27,7 +27,7 @@ java: DATA_STORE_DB_PASSWORD: "{{ .Values.postgresql.auth.password}}" DATA_STORE_DB_OPTIONS: "?stringtype=unspecified" DATA_STORE_DB_MAX_POOL_SIZE: 10 - DEFINITION_STORE_HOST: http://ccd-definition-store-api-pr-575-java/ + DEFINITION_STORE_HOST: http://ccd-definition-store-api-pr-1540-java/ USER_PROFILE_HOST: http://ccd-user-profile-api-pr-399-java/ ELASTIC_SEARCH_ENABLED: true # enable whenever ES required on a particular PR ELASTIC_SEARCH_NODES_DISCOVERY_ENABLED: true From 086a4ea11d71beb3352ef173e6b62a82c6de6f58 Mon Sep 17 00:00:00 2001 From: patelila Date: Thu, 27 Mar 2025 10:35:39 +0000 Subject: [PATCH 15/21] use correct pr no. --- Jenkinsfile_CNP | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile_CNP b/Jenkinsfile_CNP index f1c437b9d6..86f2e703d5 100644 --- a/Jenkinsfile_CNP +++ b/Jenkinsfile_CNP @@ -21,7 +21,7 @@ def branchesToSync = ['demo', 'ithc', 'perftest', 'develop'] // Variables to switch pipeline logic and wiring per type of build def definitionStoreDevelopPr = "PR-1540" // This doesn't change frequently, but when it does, only change this value. -def dataStoreApiDevelopPr = "PR-1552" // This doesn't change frequently, but when it does, only change this value. +def dataStoreApiDevelopPr = "PR-2552" // This doesn't change frequently, but when it does, only change this value. def prsToUseAat = "PR-1793,PR-1888" // Set this value to a PR number, or add it as a comma-separated value, if it's to follow CI/CD. def secrets = [ From 971a66b5858c73ae27f93c4e3b82e1cff79e6c27 Mon Sep 17 00:00:00 2001 From: patelila Date: Thu, 27 Mar 2025 14:15:15 +0000 Subject: [PATCH 16/21] Readme changes to make easy to copy commands --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0ca15dfae1..617508e2d6 100644 --- a/README.md +++ b/README.md @@ -109,16 +109,22 @@ To find out more about BEFTA Framework, see the repository and its README [here] ##### All Functional Tests Will run all the FT's: - ./gradlew functional +```bash +./gradlew functional +``` ##### Some Functional Tests Will run both F-1023 and F-777: - ./gradlew functional -P tags="@F-1023 or @F-777" +```bash +./gradlew functional -P tags="@F-1023 or @F-777" +``` Will run only S-1023.5: - ./gradlew functional -P tags="@S-1023.5" +```bash +./gradlew functional -P tags="@S-1023.5" +``` ## LICENSE From 9601d643ba021901f660bf154937e83426c10bd7 Mon Sep 17 00:00:00 2001 From: patelila Date: Thu, 27 Mar 2025 15:19:38 +0000 Subject: [PATCH 17/21] empty commit to trigger build From ab33692522829d3c94e8c88676a499b862569304 Mon Sep 17 00:00:00 2001 From: patelila Date: Thu, 27 Mar 2025 16:29:30 +0000 Subject: [PATCH 18/21] Removed unnecessary code --- .../hmcts/ccd/v2/internal/controller/UICaseController.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java index c8bb1660f2..2b86aad3d6 100644 --- a/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java +++ b/src/main/java/uk/gov/hmcts/ccd/v2/internal/controller/UICaseController.java @@ -167,10 +167,7 @@ public ResponseEntity getCaseAccessMetadata(@PathVariable("c throw new BadRequestException(ERROR_CASE_ID_INVALID); } - final CaseAccessMetadata caseaccessMetadata = caseDataAccessControl.generateAccessMetadata(caseId); - CaseAccessMetadata caseAccessMetadata = new CaseAccessMetadata(); - caseAccessMetadata.setAccessGrants(caseaccessMetadata.getAccessGrants()); - caseAccessMetadata.setAccessProcess(caseaccessMetadata.getAccessProcess()); + final CaseAccessMetadata caseAccessMetadata = caseDataAccessControl.generateAccessMetadata(caseId); return ResponseEntity.ok(caseAccessMetadata); } From 87bc68237a6a062a3a8ddb9f7f7c2da470794c84 Mon Sep 17 00:00:00 2001 From: patelila Date: Wed, 2 Apr 2025 11:00:53 +0100 Subject: [PATCH 19/21] empty commit to trigger build From 5b59fda775f45bcb33aa8bab258da9ccf0273a13 Mon Sep 17 00:00:00 2001 From: patelila Date: Wed, 2 Apr 2025 11:26:02 +0100 Subject: [PATCH 20/21] use normal pr's --- Jenkinsfile_CNP | 4 ++-- charts/ccd-data-store-api/values.preview.template.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile_CNP b/Jenkinsfile_CNP index 86f2e703d5..c70ee447d5 100644 --- a/Jenkinsfile_CNP +++ b/Jenkinsfile_CNP @@ -20,8 +20,8 @@ def branchesToSync = ['demo', 'ithc', 'perftest', 'develop'] // Variables to switch pipeline logic and wiring per type of build -def definitionStoreDevelopPr = "PR-1540" // This doesn't change frequently, but when it does, only change this value. -def dataStoreApiDevelopPr = "PR-2552" // This doesn't change frequently, but when it does, only change this value. +def definitionStoreDevelopPr = "PR-575" // This doesn't change frequently, but when it does, only change this value. +def dataStoreApiDevelopPr = "PR-1260" // This doesn't change frequently, but when it does, only change this value. def prsToUseAat = "PR-1793,PR-1888" // Set this value to a PR number, or add it as a comma-separated value, if it's to follow CI/CD. def secrets = [ diff --git a/charts/ccd-data-store-api/values.preview.template.yaml b/charts/ccd-data-store-api/values.preview.template.yaml index 921c152fb1..31c16a7631 100644 --- a/charts/ccd-data-store-api/values.preview.template.yaml +++ b/charts/ccd-data-store-api/values.preview.template.yaml @@ -27,7 +27,7 @@ java: DATA_STORE_DB_PASSWORD: "{{ .Values.postgresql.auth.password}}" DATA_STORE_DB_OPTIONS: "?stringtype=unspecified" DATA_STORE_DB_MAX_POOL_SIZE: 10 - DEFINITION_STORE_HOST: http://ccd-definition-store-api-pr-1540-java/ + DEFINITION_STORE_HOST: http://ccd-definition-store-api-pr-575-java/ USER_PROFILE_HOST: http://ccd-user-profile-api-pr-399-java/ ELASTIC_SEARCH_ENABLED: true # enable whenever ES required on a particular PR ELASTIC_SEARCH_NODES_DISCOVERY_ENABLED: true From 75417796283fbff040aeb511080e85d1e7ff4c78 Mon Sep 17 00:00:00 2001 From: patelila Date: Fri, 4 Apr 2025 14:11:14 +0100 Subject: [PATCH 21/21] fix pipline pointing to data-store-api PR-2552 and definition-store PR-1540 --- Jenkinsfile_CNP | 4 ++-- charts/ccd-data-store-api/values.preview.template.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile_CNP b/Jenkinsfile_CNP index c70ee447d5..86f2e703d5 100644 --- a/Jenkinsfile_CNP +++ b/Jenkinsfile_CNP @@ -20,8 +20,8 @@ def branchesToSync = ['demo', 'ithc', 'perftest', 'develop'] // Variables to switch pipeline logic and wiring per type of build -def definitionStoreDevelopPr = "PR-575" // This doesn't change frequently, but when it does, only change this value. -def dataStoreApiDevelopPr = "PR-1260" // This doesn't change frequently, but when it does, only change this value. +def definitionStoreDevelopPr = "PR-1540" // This doesn't change frequently, but when it does, only change this value. +def dataStoreApiDevelopPr = "PR-2552" // This doesn't change frequently, but when it does, only change this value. def prsToUseAat = "PR-1793,PR-1888" // Set this value to a PR number, or add it as a comma-separated value, if it's to follow CI/CD. def secrets = [ diff --git a/charts/ccd-data-store-api/values.preview.template.yaml b/charts/ccd-data-store-api/values.preview.template.yaml index 31c16a7631..921c152fb1 100644 --- a/charts/ccd-data-store-api/values.preview.template.yaml +++ b/charts/ccd-data-store-api/values.preview.template.yaml @@ -27,7 +27,7 @@ java: DATA_STORE_DB_PASSWORD: "{{ .Values.postgresql.auth.password}}" DATA_STORE_DB_OPTIONS: "?stringtype=unspecified" DATA_STORE_DB_MAX_POOL_SIZE: 10 - DEFINITION_STORE_HOST: http://ccd-definition-store-api-pr-575-java/ + DEFINITION_STORE_HOST: http://ccd-definition-store-api-pr-1540-java/ USER_PROFILE_HOST: http://ccd-user-profile-api-pr-399-java/ ELASTIC_SEARCH_ENABLED: true # enable whenever ES required on a particular PR ELASTIC_SEARCH_NODES_DISCOVERY_ENABLED: true