From 331db20ed1dda6f77062358b793e8471de8bb88c Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:35:31 +0100 Subject: [PATCH 1/2] migration script --- .../support/MigrateCaseController.java | 15 +++- .../fpl/service/MigrateCaseService.java | 26 ++++++ .../fpl/service/MigrateCaseServiceTest.java | 89 +++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java index 1eba7d9e734..edb05e70394 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java @@ -46,7 +46,8 @@ public class MigrateCaseController extends CallbackController { "DFPL-2740", this::run2740, "DFPL-2744", this::run2744, "DFPL-2739", this::run2739, - "DFPL-2756", this::run2756 + "DFPL-2756", this::run2756, + "DFPL-2837", this::run2837 ); private final CaseConverter caseConverter; private final JudicialService judicialService; @@ -157,4 +158,16 @@ private void run2739(CaseDetails caseDetails) { UUID.fromString("3ef67b37-17ee-48ca-9d32-58c887a6918d"), UUID.fromString("dbe742bb-f7a1-4373-8100-52261c81ef34"))); } + + private void run2837(CaseDetails caseDetails) { + CaseData caseData = getCaseData(caseDetails); + + migrateCaseService.doCaseIdCheck(caseDetails.getId(), 1732700347667956L, "DFPL-2837"); + + caseDetails.getData().putAll(migrateCaseService.removeSupportingEvidenceBundleFromAdditionalApplication( + caseData, + "DFPL-2837", + UUID.fromString("bef6a7d7-0ee1-4984-b6a2-1cda165b5b92"), + UUID.fromString("4628b139-e483-4918-b809-ca5f065e7131"))); + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseService.java index 4c904b00425..7ae3fd6d605 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseService.java @@ -33,6 +33,7 @@ import uk.gov.hmcts.reform.fpl.model.Respondent; import uk.gov.hmcts.reform.fpl.model.SentDocuments; import uk.gov.hmcts.reform.fpl.model.SkeletonArgument; +import uk.gov.hmcts.reform.fpl.model.SupportingEvidenceBundle; import uk.gov.hmcts.reform.fpl.model.common.AdditionalApplicationsBundle; import uk.gov.hmcts.reform.fpl.model.common.C2DocumentBundle; import uk.gov.hmcts.reform.fpl.model.common.DocumentBundle; @@ -1342,4 +1343,29 @@ public Map removeDraftOrderFromAdditionalApplication(CaseData ca return Map.of("additionalApplicationsBundle", caseData.getAdditionalApplicationsBundle()); } + + public Map removeSupportingEvidenceBundleFromAdditionalApplication(CaseData caseData, + String migrationId, + UUID bundleId, UUID docId) { + List> bundles = caseData.getAdditionalApplicationsBundle(); + + Element bundle = ElementUtils.findElement(bundleId, bundles) + .orElseThrow(() -> new AssertionError(format( + "Migration {id = %s, case reference = %s}, additional application bundle not found", + migrationId, caseData.getId()))); + + C2DocumentBundle c2DocumentBundle = bundle.getValue().getC2DocumentBundle(); + if (c2DocumentBundle == null || isEmpty(c2DocumentBundle.getSupportingEvidenceBundle())) { + throw new AssertionError(format( + "Migration {id = %s, case reference = %s}, C2DocumentBundle or SupportingEvidenceBundle is null", + migrationId, caseData.getId())); + } + + List> supportingEvidenceBundle = + ElementUtils.removeElementWithUUID(c2DocumentBundle.getSupportingEvidenceBundle(), docId); + + c2DocumentBundle.setSupportingEvidenceBundle(supportingEvidenceBundle); + + return Map.of("additionalApplicationsBundle", bundles); + } } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseServiceTest.java index a84073fa397..725a40d78db 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseServiceTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/MigrateCaseServiceTest.java @@ -3623,4 +3623,93 @@ void shouldThrowExceptionIfBundleNotFound() { .hasMessageContaining("additional application bundle not found"); } } + + @Nested + class RemoveSupportingEvidenceBundleFromAdditionalApplication { + @Test + void shouldRemoveSupportingEvidenceBundleFromAdditionalApplication() { + UUID bundleId = UUID.randomUUID(); + UUID evidenceToRemoveId = UUID.randomUUID(); + UUID evidenceToRetainId = UUID.randomUUID(); + + Element evidenceToRemove = element(evidenceToRemoveId, + SupportingEvidenceBundle.builder().name("evidence to remove").build()); + + Element evidenceToRetain = element(evidenceToRetainId, + SupportingEvidenceBundle.builder().name("evidence to retain").build()); + + Element applicationBundle = element(bundleId, + AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder() + .supportingEvidenceBundle(List.of(evidenceToRemove, evidenceToRetain)) + .build()) + .build()); + + Element otherBundle = element(UUID.randomUUID(), + AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder() + .supportingEvidenceBundle(List.of(evidenceToRemove, evidenceToRetain)) + .build()) + .build()); + + CaseData caseData = CaseData.builder() + .id(1L) + .additionalApplicationsBundle(List.of(applicationBundle, otherBundle)) + .build(); + + Map result = underTest.removeSupportingEvidenceBundleFromAdditionalApplication(caseData, + MIGRATION_ID, bundleId, evidenceToRemoveId); + + + Element expectedBundle = element(bundleId, + AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder() + .supportingEvidenceBundle(List.of(evidenceToRetain)) + .build()) + .build()); + + assertThat(result).containsEntry("additionalApplicationsBundle", List.of(expectedBundle, otherBundle)); + } + + @Test + void shouldThrowExceptionIfBundleNotFound() { + UUID nonExistentBundleId = UUID.randomUUID(); + UUID evidenceToRemoveId = UUID.randomUUID(); + + Stream.of( + CaseData.builder().id(1L).additionalApplicationsBundle(new ArrayList<>()).build(), + CaseData.builder().id(1L).additionalApplicationsBundle(null).build() + ).forEach(caseData -> + assertThatThrownBy(() -> underTest.removeSupportingEvidenceBundleFromAdditionalApplication(caseData, + MIGRATION_ID, nonExistentBundleId, evidenceToRemoveId)) + .isInstanceOf(AssertionError.class) + .hasMessageContaining("additional application bundle not found") + ); + } + + @Test + void shouldThrowExceptionIfC2OrEvidenceNotFound() { + UUID bundleId = UUID.randomUUID(); + UUID evidenceToRemoveId = UUID.randomUUID(); + + Stream.of( + CaseData.builder() + .id(1L) + .additionalApplicationsBundle(List.of( + element(bundleId, AdditionalApplicationsBundle.builder().build()))) + .build(), + CaseData.builder() + .id(1L) + .additionalApplicationsBundle(List.of( + element(bundleId, AdditionalApplicationsBundle.builder() + .c2DocumentBundle(C2DocumentBundle.builder().build()).build()))) + .build() + ).forEach(caseData -> + assertThatThrownBy(() -> underTest.removeSupportingEvidenceBundleFromAdditionalApplication(caseData, + MIGRATION_ID, bundleId, evidenceToRemoveId)) + .isInstanceOf(AssertionError.class) + .hasMessageContaining("C2DocumentBundle or SupportingEvidenceBundle is null")); +; + } + } } From eac2bef07186b804763b4e9d349d8780499e6d1a Mon Sep 17 00:00:00 2001 From: Chak Shing Lo <95437003+chak-shing-lo-justice@users.noreply.github.com> Date: Fri, 7 Nov 2025 10:17:17 +0000 Subject: [PATCH 2/2] Update MigrateCaseController.java --- .../reform/fpl/controllers/support/MigrateCaseController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java index 99b90ccad5e..46713dc7f19 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/support/MigrateCaseController.java @@ -11,6 +11,7 @@ import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; import uk.gov.hmcts.reform.fpl.controllers.CallbackController; +import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.service.CaseConverter; import uk.gov.hmcts.reform.fpl.service.JudicialService; import uk.gov.hmcts.reform.fpl.service.MigrateCaseService; @@ -21,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import java.util.UUID; import java.util.function.Consumer; @Slf4j