diff --git a/build.gradle b/build.gradle index 1bb9377da..d93526b73 100644 --- a/build.gradle +++ b/build.gradle @@ -171,7 +171,7 @@ def versions = [ mapStruct : '1.3.0.Final', pact_version : '4.1.34', piTest : '1.19.1', - probateCommonsVersion : '2.1.0', + probateCommonsVersion : '2.1.4', restAssured : '5.5.1', serenity : '4.2.22', serviceAuthProviderClient : '5.3.2', diff --git a/charts/probate-orchestrator-service/Chart.yaml b/charts/probate-orchestrator-service/Chart.yaml index 5c507cdac..3a3574843 100644 --- a/charts/probate-orchestrator-service/Chart.yaml +++ b/charts/probate-orchestrator-service/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: probate-orchestrator-service home: https://github.com/hmcts/probate-orchestrator-service -version: 1.0.49 +version: 1.0.50 description: HMCTS Probate Orchestrator Service maintainers: - name: HMCTS Probate Team diff --git a/charts/probate-orchestrator-service/values.yaml b/charts/probate-orchestrator-service/values.yaml index 8d24f4ff1..433f1b3a9 100644 --- a/charts/probate-orchestrator-service/values.yaml +++ b/charts/probate-orchestrator-service/values.yaml @@ -14,7 +14,7 @@ java: SERVICES_CORECASEDATA_BASEURL: "http://ccd-data-store-api-{{ .Values.global.environment }}.service.core-compute-{{ .Values.global.environment }}.internal" SERVICES_AUTH_PROVIDER_BASEURL: "http://rpe-service-auth-provider-{{ .Values.global.environment }}.service.core-compute-{{ .Values.global.environment }}.internal" AUTH_IDAM_CLIENT_BASEURL: "https://idam-api.{{ .Values.global.environment }}.platform.hmcts.net" - SUBMIT_SERVICE_API_URL: "http://probate-submit-service-{{ .Values.global.environment }}.service.core-compute-{{ .Values.global.environment }}.internal" + SUBMIT_SERVICE_API_URL: "http://probate-submit-service-pr-1092-java" BUSINESS_SERVICE_API_URL: "http://probate-business-service-{{ .Values.global.environment }}.service.core-compute-{{ .Values.global.environment }}.internal" BACK_OFFICE_API_URL: "http://probate-back-office-{{ .Values.global.environment }}.service.core-compute-{{ .Values.global.environment }}.internal" MAIL_JAVAMAILPROPERTIES_MAIL_SMTP_SSL_ENABLE: false diff --git a/src/functionalTest/java/uk/gov/hmcts/probate/functional/tests/FormsFunctionalTests.java b/src/functionalTest/java/uk/gov/hmcts/probate/functional/tests/FormsFunctionalTests.java index 4da471208..5442b9266 100644 --- a/src/functionalTest/java/uk/gov/hmcts/probate/functional/tests/FormsFunctionalTests.java +++ b/src/functionalTest/java/uk/gov/hmcts/probate/functional/tests/FormsFunctionalTests.java @@ -149,7 +149,7 @@ public void shouldSaveFormSuccessfully() { .headers(utils.getCitizenHeaders()) .body(draftJsonStr) .when() - .post(FORMS_CASES + caseId) + .post(FORMS_CASES + caseId + "/" + "2099-01-01T12:12:12.123") .then() .assertThat() .statusCode(200) diff --git a/src/integrationTest/java/uk/gov/hmcts/probate/controller/FormsControllerIT.java b/src/integrationTest/java/uk/gov/hmcts/probate/controller/FormsControllerIT.java index 2586a824e..15df82432 100644 --- a/src/integrationTest/java/uk/gov/hmcts/probate/controller/FormsControllerIT.java +++ b/src/integrationTest/java/uk/gov/hmcts/probate/controller/FormsControllerIT.java @@ -23,6 +23,7 @@ import uk.gov.hmcts.reform.probate.model.payments.PaymentDto; import java.math.BigDecimal; +import java.time.LocalDateTime; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; @@ -40,6 +41,9 @@ public class FormsControllerIT { private static final String EMAIL_ADDRESS = "1570130475566595"; + private static final LocalDateTime LAST_MODIFIED_DATE_TIME = LocalDateTime.of(2018, 1, 1, + 12, 12, 12).withNano(123 * 1_000_000); + private static final String LAST_MODIFIED_DATE_TIME_STRING = "2018-01-01T12:12:12.123"; private static final String FORMS_ENDPOINT = "/forms"; private static final String FORMS_CASE_ENDPOINT = "/forms/case"; @@ -105,27 +109,33 @@ public void setUp() throws Exception { @Test public void shouldSaveCaveatForm() throws Exception { - when(submitService.saveCase(eq(EMAIL_ADDRESS), eq(caveatForm))).thenReturn(caveatForm); + when(submitService.saveCase(eq(EMAIL_ADDRESS), eq(LAST_MODIFIED_DATE_TIME), + eq(caveatForm))).thenReturn(caveatForm); - mockMvc.perform(post(FORMS_CASE_ENDPOINT + "/" + EMAIL_ADDRESS) + mockMvc.perform(post(FORMS_CASE_ENDPOINT + "/" + EMAIL_ADDRESS + + "/" + LAST_MODIFIED_DATE_TIME_STRING) .content(caveatFormJsonStr) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().json(caveatFormJsonStr, true)); - verify(submitService, times(1)).saveCase(eq(EMAIL_ADDRESS), eq(caveatForm)); + verify(submitService, times(1)).saveCase(eq(EMAIL_ADDRESS), + eq(LAST_MODIFIED_DATE_TIME), eq(caveatForm)); } @Test public void shouldSaveIntestacyForm() throws Exception { - when(submitService.saveCase(eq(EMAIL_ADDRESS), eq(intestacyForm))).thenReturn(intestacyForm); + when(submitService.saveCase(eq(EMAIL_ADDRESS), eq(LAST_MODIFIED_DATE_TIME), + eq(intestacyForm))).thenReturn(intestacyForm); - mockMvc.perform(post(FORMS_CASE_ENDPOINT + "/" + EMAIL_ADDRESS) + mockMvc.perform(post(FORMS_CASE_ENDPOINT + "/" + EMAIL_ADDRESS + + "/" + LAST_MODIFIED_DATE_TIME_STRING) .content(intestacyFormJsonStr) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().json(intestacyFormJsonStr, true)); - verify(submitService, times(1)).saveCase(eq(EMAIL_ADDRESS), eq(intestacyForm)); + verify(submitService, times(1)).saveCase(eq(EMAIL_ADDRESS), + eq(LAST_MODIFIED_DATE_TIME), eq(intestacyForm)); } @Test @@ -154,7 +164,8 @@ public void shouldSubmitPaFormWithPayment() throws Exception { .andExpect(status().isOk()) .andExpect(content().json(paFormJsonStr, true)); - verify(submitService, times(1)).update(eq(EMAIL_ADDRESS), eq(ProbateType.PA), eq(paymentDto)); + verify(submitService, times(1)).update(eq(EMAIL_ADDRESS), + eq(ProbateType.PA), eq(paymentDto)); } @@ -172,7 +183,8 @@ public void shouldSubmitIntestacyFormWithPayment() throws Exception { .andExpect(status().isOk()) .andExpect(content().json(paFormJsonStr, true)); - verify(submitService, times(1)).update(eq("123456"), eq(ProbateType.INTESTACY), eq(paymentDto)); + verify(submitService, times(1)).update(eq("123456"), + eq(ProbateType.INTESTACY), eq(paymentDto)); } @Test diff --git a/src/integrationTest/java/uk/gov/hmcts/probate/controller/InvitationControllerIT.java b/src/integrationTest/java/uk/gov/hmcts/probate/controller/InvitationControllerIT.java index a1f522509..2f727f93e 100644 --- a/src/integrationTest/java/uk/gov/hmcts/probate/controller/InvitationControllerIT.java +++ b/src/integrationTest/java/uk/gov/hmcts/probate/controller/InvitationControllerIT.java @@ -100,7 +100,7 @@ public void sendBilingualInvitation_withValidJson_shouldReturn200() throws Excep .contentType(MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE))) .andExpect(status().isOk()); verify(businessService, times(1)).sendInvitations(eq(Arrays.asList(invitation)), - eq("someSessionId"), eq(Boolean.TRUE)); + eq("someSessionId"), eq(Boolean.FALSE)); } @Test diff --git a/src/main/java/uk/gov/hmcts/probate/client/submit/SubmitServiceApi.java b/src/main/java/uk/gov/hmcts/probate/client/submit/SubmitServiceApi.java index f1184fa9e..da8b91422 100644 --- a/src/main/java/uk/gov/hmcts/probate/client/submit/SubmitServiceApi.java +++ b/src/main/java/uk/gov/hmcts/probate/client/submit/SubmitServiceApi.java @@ -93,7 +93,7 @@ ProbateCaseDetails saveCase( ); @PostMapping( - value = "/cases/initate", + value = "/cases/initiate", headers = CONTENT_TYPE + "=" + APPLICATION_JSON_VALUE ) ProbateCaseDetails initiateCase( diff --git a/src/main/java/uk/gov/hmcts/probate/controller/FormsController.java b/src/main/java/uk/gov/hmcts/probate/controller/FormsController.java index 51751753c..9b7289a62 100644 --- a/src/main/java/uk/gov/hmcts/probate/controller/FormsController.java +++ b/src/main/java/uk/gov/hmcts/probate/controller/FormsController.java @@ -23,6 +23,9 @@ import uk.gov.hmcts.reform.probate.model.forms.Form; import uk.gov.hmcts.reform.probate.model.payments.PaymentDto; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + @Tag(name = "FormsController", description = "Forms API") @RestController @Slf4j @@ -30,6 +33,7 @@ public class FormsController { private static final String FORMS_CASE_ENDPOINT = "/forms/case/{identifier}"; + private static final String FORMS_SAVE_CASE_ENDPOINT = "/forms/case/{identifier}/{lastModifiedDateTime}"; private static final String FORMS_CASES_ENDPOINT = "/forms/cases"; private static final String FORMS_NEW_CASE_ENDPOINT = "/forms/newcase"; private static final String SUBMISSIONS_ENDPOINT = "/submissions"; @@ -37,7 +41,7 @@ public class FormsController { private static final String VALIDATIONS_ENDPOINT = "/validations"; private static final String PAYMENTS_ENDPOINT = "/payments"; private static final String MIGRATE_DATA_ENDPOINT = "/migrateData"; - + private static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); private final SubmitService submitService; @@ -61,13 +65,15 @@ public ResponseEntity initiateForm(@RequestParam("probateType @ApiResponse(responseCode = "400", description = "Saving form failed"), @ApiResponse(responseCode = "422", description = "Invalid or missing attribute") }) - @PostMapping(path = FORMS_CASE_ENDPOINT, consumes = MediaType.APPLICATION_JSON_VALUE, + @PostMapping(path = FORMS_SAVE_CASE_ENDPOINT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity
saveForm(@RequestBody Form form, - @PathVariable("identifier") String identifier) { - log.info("Save form called"); - return new ResponseEntity<>(submitService.saveCase(identifier, form), HttpStatus.OK); + @PathVariable("identifier") String identifier, + @PathVariable("lastModifiedDateTime") String lastModifiedDateTime) { + log.info("Save form called with identifier {} lastModifiedDateTime {}", identifier, lastModifiedDateTime); + LocalDateTime lastModifiedDateTimeParsed = LocalDateTime.parse(lastModifiedDateTime, DATE_TIME_FORMAT); + return new ResponseEntity<>(submitService.saveCase(identifier,lastModifiedDateTimeParsed, form), HttpStatus.OK); } @Operation(summary = "Get form data", description = "Get form data") diff --git a/src/main/java/uk/gov/hmcts/probate/controller/InvitationController.java b/src/main/java/uk/gov/hmcts/probate/controller/InvitationController.java index c76b01724..f8141ac44 100644 --- a/src/main/java/uk/gov/hmcts/probate/controller/InvitationController.java +++ b/src/main/java/uk/gov/hmcts/probate/controller/InvitationController.java @@ -43,16 +43,14 @@ public class InvitationController { consumes = MediaType.APPLICATION_JSON_VALUE) public InvitationsResult invite(@Valid @RequestBody List invitations, @RequestHeader("Session-Id") String sessionId) { - return InvitationsResult.builder() - .invitations(businessService.sendInvitations(invitations, sessionId, Boolean.FALSE)).build(); + return businessService.sendInvitations(invitations, sessionId, Boolean.FALSE); } @PostMapping(path = INVITE_BILINGUAL_URL, consumes = MediaType.APPLICATION_JSON_VALUE) public InvitationsResult inviteBilingual(@Valid @RequestBody List invitations, @RequestHeader("Session-Id") String sessionId) { - return InvitationsResult.builder() - .invitations(businessService.sendInvitations(invitations, sessionId, Boolean.TRUE)).build(); + return businessService.sendInvitations(invitations, sessionId, Boolean.FALSE); } diff --git a/src/main/java/uk/gov/hmcts/probate/core/service/BusinessServiceImpl.java b/src/main/java/uk/gov/hmcts/probate/core/service/BusinessServiceImpl.java index 8f4737959..fcadce8ee 100644 --- a/src/main/java/uk/gov/hmcts/probate/core/service/BusinessServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/probate/core/service/BusinessServiceImpl.java @@ -21,8 +21,10 @@ import uk.gov.hmcts.reform.probate.model.documents.LegalDeclaration; import uk.gov.hmcts.reform.probate.model.multiapplicant.ExecutorNotification; import uk.gov.hmcts.reform.probate.model.multiapplicant.Invitation; +import uk.gov.hmcts.reform.probate.model.multiapplicant.InvitationsResult; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -87,15 +89,15 @@ public String sendInvitation(Invitation invitation, String sessionId) { (GrantOfRepresentationData) probateCaseDetails.getCaseData(); grantOfRepresentationData.setInvitationDetailsForExecutorApplying(invitation.getEmail(), invitationId, invitation.getLeadExecutorName(), invitation.getExecutorName()); - log.info("Updating case with invitation details"); updateCaseData(probateCaseDetails, invitation.getFormdataId()); return invitationId; } @Override - public List sendInvitations(List invitations, String sessionId, Boolean isBilingual) { - log.info("Send Invitations data ...calling businessServiceApi"); + public InvitationsResult sendInvitations(List invitations, String sessionId, Boolean isBilingual) { + log.info("Send Invitations SSS data ...calling businessServiceApi"); + LocalDateTime lastModifiedDateTime = null; Optional optionalInvitation = invitations.stream().findFirst(); if (optionalInvitation.isPresent()) { final ProbateCaseDetails probateCaseDetails = @@ -126,7 +128,8 @@ public List sendInvitations(List invitations, String ses log.info("Updating case with invitation details"); updateCaseData(probateCaseDetails, formDataId); } - return invitations; + return InvitationsResult.builder() + .invitations(invitations).lastModifiedDateTime(lastModifiedDateTime).build(); } @@ -337,11 +340,12 @@ private ProbateCaseDetails getProbateCaseDetails(String caseId) { caseId, ProbateType.PA.getCaseType().name()); } - private void updateCaseData(ProbateCaseDetails probateCaseDetails, String formdataId) { + private LocalDateTime updateCaseData(ProbateCaseDetails probateCaseDetails, String formdataId) { String serviceAuthorisation = securityUtils.getServiceAuthorisation(); String authorisation = securityUtils.getAuthorisation(); - submitServiceApi.saveCase(authorisation, serviceAuthorisation, + ProbateCaseDetails resultProbateCaseDetails = submitServiceApi.saveCase(authorisation, serviceAuthorisation, formdataId, "event update case data", probateCaseDetails); + return resultProbateCaseDetails.getCaseInfo().getLastModifiedDateTime(); } private void updateCaseDataAsCaseWorker(ProbateCaseDetails probateCaseDetails, String formdataId) { diff --git a/src/main/java/uk/gov/hmcts/probate/core/service/SubmitServiceImpl.java b/src/main/java/uk/gov/hmcts/probate/core/service/SubmitServiceImpl.java index e40edc4df..1fa5c2772 100644 --- a/src/main/java/uk/gov/hmcts/probate/core/service/SubmitServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/probate/core/service/SubmitServiceImpl.java @@ -15,6 +15,7 @@ import uk.gov.hmcts.reform.probate.model.PaymentStatus; import uk.gov.hmcts.reform.probate.model.ProbateType; import uk.gov.hmcts.reform.probate.model.cases.CaseData; +import uk.gov.hmcts.reform.probate.model.cases.CaseInfo; import uk.gov.hmcts.reform.probate.model.cases.CasePayment; import uk.gov.hmcts.reform.probate.model.cases.CaseType; import uk.gov.hmcts.reform.probate.model.cases.CollectionMember; @@ -30,6 +31,7 @@ import uk.gov.hmcts.reform.probate.model.forms.pa.PaForm; import uk.gov.hmcts.reform.probate.model.payments.PaymentDto; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.Comparator; import java.util.List; @@ -149,16 +151,19 @@ private Form initiateForm(ProbateType probateType) { @Override - public Form saveCase(String identifier, Form form) { - log.info("Save case called"); + public Form saveCase(String identifier, LocalDateTime lastModifiedDateTime, Form form) { + log.info("Save case called lastModifiedDateTime {} :", lastModifiedDateTime); assertIdentifier(identifier, form); FormMapper formMapper = mappers.get(form.getType()); + CaseInfo caseInfo = new CaseInfo(); + caseInfo.setLastModifiedDateTime(lastModifiedDateTime); + log.info("Save case called submitServiceApi.saveCase"); ProbateCaseDetails probateCaseDetails = submitServiceApi.saveCase( securityUtils.getAuthorisation(), securityUtils.getServiceAuthorisation(), identifier, form.getEventDescription(), - ProbateCaseDetails.builder().caseData(mapToCase(form, formMapper)).build() + ProbateCaseDetails.builder().caseData(mapToCase(form, formMapper)).caseInfo(caseInfo).build() ); return mapFromCase(formMapper, probateCaseDetails); } @@ -223,6 +228,7 @@ private void updateCcdCase(ProbateCaseDetails probateCaseDetails, Form formRespo .id(Long.valueOf(probateCaseDetails.getCaseInfo().getCaseId())) .state(probateCaseDetails.getCaseInfo().getState().getName()) .lastModifiedDate(probateCaseDetails.getCaseInfo().getLastModifiedDate()) + .lastModifiedDateTime(probateCaseDetails.getCaseInfo().getLastModifiedDateTime()) .build()); } diff --git a/src/main/java/uk/gov/hmcts/probate/service/BusinessService.java b/src/main/java/uk/gov/hmcts/probate/service/BusinessService.java index a4f302b3f..fd39ec9da 100644 --- a/src/main/java/uk/gov/hmcts/probate/service/BusinessService.java +++ b/src/main/java/uk/gov/hmcts/probate/service/BusinessService.java @@ -5,6 +5,7 @@ import uk.gov.hmcts.reform.probate.model.documents.CheckAnswersSummary; import uk.gov.hmcts.reform.probate.model.documents.LegalDeclaration; import uk.gov.hmcts.reform.probate.model.multiapplicant.Invitation; +import uk.gov.hmcts.reform.probate.model.multiapplicant.InvitationsResult; import java.util.List; @@ -36,7 +37,7 @@ public interface BusinessService { String getPinNumber(PhonePin phonePin, String sessionId, Boolean isBilingual); - List sendInvitations(List invitations, String sessionId, Boolean isBilingual); + InvitationsResult sendInvitations(List invitations, String sessionId, Boolean isBilingual); void documentUploadNotification(String formDataId, String citizenResponseCheckbox); } diff --git a/src/main/java/uk/gov/hmcts/probate/service/SubmitService.java b/src/main/java/uk/gov/hmcts/probate/service/SubmitService.java index 072a4354e..6ce45e023 100644 --- a/src/main/java/uk/gov/hmcts/probate/service/SubmitService.java +++ b/src/main/java/uk/gov/hmcts/probate/service/SubmitService.java @@ -7,6 +7,7 @@ import uk.gov.hmcts.reform.probate.model.forms.Form; import uk.gov.hmcts.reform.probate.model.payments.PaymentDto; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -20,7 +21,7 @@ public interface SubmitService { CaseSummaryHolder getAllCases(); - Form saveCase(String identifier, Form form); + Form saveCase(String identifier, LocalDateTime lastModifiedDateTime, Form form); Form submit(String identifier, Form form); diff --git a/src/test/java/uk/gov/hmcts/probate/core/service/BusinessServiceImplTest.java b/src/test/java/uk/gov/hmcts/probate/core/service/BusinessServiceImplTest.java index 016181346..a0b645dc2 100644 --- a/src/test/java/uk/gov/hmcts/probate/core/service/BusinessServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/probate/core/service/BusinessServiceImplTest.java @@ -28,6 +28,7 @@ import uk.gov.hmcts.reform.probate.model.documents.LegalDeclaration; import uk.gov.hmcts.reform.probate.model.multiapplicant.ExecutorNotification; import uk.gov.hmcts.reform.probate.model.multiapplicant.Invitation; +import uk.gov.hmcts.reform.probate.model.multiapplicant.InvitationsResult; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -109,6 +110,10 @@ public void setUp() throws Exception { .thenReturn(ExecutorApplying.builder().applyingExecutorName("Test Executor").build()); when(mockGrantOfRepresentationData.getPrimaryApplicantEmailAddress()).thenReturn(emailaddress); + when(submitServiceApi.saveCase(AUTHORIZATION, SERVICE_AUTHORIZATION, + formdataId, "event update case data", mockProbateCaseDetails)) + .thenReturn(mockProbateCaseDetails); + pdfExample = new byte[10]; businessService = new BusinessServiceImpl(businessServiceApi, submitServiceApi, securityUtils, mockExecutorApplyingToInvitationMapper); @@ -203,7 +208,7 @@ public void shouldSendInvitationsAndUpdateProbateCaseDetails() { when(businessServiceApi.invite(resendInvitation.getInviteId(), resendInvitation, sessionId)) .thenReturn(resendInvitation.getInviteId()); - List results = businessService + InvitationsResult results = businessService .sendInvitations(Lists.newArrayList(newInvitation, resendInvitation), sessionId, Boolean.FALSE); verify(businessServiceApi).invite(newInvitation, sessionId); @@ -232,7 +237,7 @@ public void shouldSendBilingualInvitationsAndUpdateProbateCaseDetails() { when(businessServiceApi.inviteBilingual(resendInvitation.getInviteId(), resendInvitation, sessionId)) .thenReturn(resendInvitation.getInviteId()); - List results = businessService + InvitationsResult results = businessService .sendInvitations(Lists.newArrayList(newInvitation, resendInvitation), sessionId, Boolean.TRUE); verify(businessServiceApi).inviteBilingual(newInvitation, sessionId); @@ -268,6 +273,7 @@ public void shouldDetermineIfAllInviteesHaveAgreedFromCase() { public void shouldUpdateContactDetailsOnCase() { businessService.updateContactDetails(formdataId, getInvitation(formdataId)); + verifyGetCaseCalls(); verify(mockGrantOfRepresentationData) .updateInvitationContactDetailsForExecutorApplying(invitationId, emailaddress, phoneNumber); diff --git a/src/test/java/uk/gov/hmcts/probate/core/service/SubmitServiceImplTest.java b/src/test/java/uk/gov/hmcts/probate/core/service/SubmitServiceImplTest.java index 5eb2e0d30..5994eb8d8 100644 --- a/src/test/java/uk/gov/hmcts/probate/core/service/SubmitServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/probate/core/service/SubmitServiceImplTest.java @@ -1,6 +1,9 @@ package uk.gov.hmcts.probate.core.service; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import org.junit.jupiter.api.Assertions; @@ -40,6 +43,7 @@ import java.math.BigDecimal; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; @@ -71,6 +75,7 @@ public class SubmitServiceImplTest { private static final CaseState STATE = CaseState.DRAFT; private static final String CAVEAT_IDENTIFIER = "Id"; private static final String CAVEAT_EXPIRY_DATE = "2020-12-31"; + private static final LocalDateTime LAST_MODIFIED_DATE_TIME = LocalDateTime.of(2019, 1, 1, 0, 0, 0); private Map mappers; @Mock @@ -132,6 +137,9 @@ public void setUp() throws Exception { when(securityUtils.getServiceAuthorisation()).thenReturn(SERVICE_AUTHORIZATION); caseInfo = CaseInfo.builder().state(STATE).caseId(CASE_ID).build(); + objectMapper.registerModule(new Jdk8Module()); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // Intestacy setup String intestacyFormStr = TestUtils.getJsonFromFile("intestacyFormTest.json"); intestacyForm = objectMapper.readValue(intestacyFormStr, IntestacyForm.class); @@ -253,7 +261,7 @@ private void shouldSaveDraftForm(Form form, ProbateCaseDetails caseDetails, Stri when(submitServiceApi.saveCase(eq(AUTHORIZATION), eq(SERVICE_AUTHORIZATION), eq(identifier),eq("event description"), any(ProbateCaseDetails.class))).thenReturn(caseDetails); - Form formResponse = submitService.saveCase(identifier, form); + Form formResponse = submitService.saveCase(identifier, LAST_MODIFIED_DATE_TIME, form); assertThat(formResponse, is(form)); verify(submitServiceApi, times(1)).saveCase(eq(AUTHORIZATION), eq(SERVICE_AUTHORIZATION), @@ -272,7 +280,7 @@ public void shouldThrowErrorOnSaveDraftIfEmailAddressDoesNotMatchForm() { ((CaveatForm) caveatForm).setApplicationId("test@Test.com"); Assertions.assertThrows(IllegalArgumentException.class, () -> { - submitService.saveCase(EMAIL_ADDRESS, caveatForm); + submitService.saveCase(EMAIL_ADDRESS, LAST_MODIFIED_DATE_TIME, caveatForm); }); } diff --git a/src/test/resources/caseSummary.json b/src/test/resources/caseSummary.json index 279c3847a..6d31c8b23 100644 --- a/src/test/resources/caseSummary.json +++ b/src/test/resources/caseSummary.json @@ -7,7 +7,8 @@ "ccdCase": { "id": 1234567890123456, "state": "Draft", - "lastModifiedDate": "2018-01-01" + "lastModifiedDate": "2018-01-01", + "lastModifiedDateTime": "2018-01-01T12:12:12.123" } }, { @@ -17,7 +18,8 @@ "ccdCase": { "id": 1535574519543819, "state": "CaseCreated", - "lastModifiedDate": "2018-01-01" + "lastModifiedDate": "2018-01-01", + "lastModifiedDateTime": "2018-01-01T12:12:12.123" } } ] diff --git a/src/test/resources/caveatForm.json b/src/test/resources/caveatForm.json index d3d9e3b99..6ea00311c 100644 --- a/src/test/resources/caveatForm.json +++ b/src/test/resources/caveatForm.json @@ -30,7 +30,8 @@ "ccdCase": { "id": 1535574519543819, "state": "CaseCreated", - "lastModifiedDate": "2018-01-01" + "lastModifiedDate": "2018-01-01", + "lastModifiedDateTime": "2018-01-01T12:12:12.123" }, "registry": { "name": "Birmingham" diff --git a/src/test/resources/intestacyFormTest.json b/src/test/resources/intestacyFormTest.json index 7b38f9c27..86186b511 100644 --- a/src/test/resources/intestacyFormTest.json +++ b/src/test/resources/intestacyFormTest.json @@ -97,7 +97,8 @@ "ccdCase": { "id": 1535574519543818, "state": "CaseCreated", - "lastModifiedDate": "2018-01-01" + "lastModifiedDate": "2018-01-01", + "lastModifiedDateTime": "2018-01-01T12:12:12.123" }, "registry": { "name": "Birmingham", diff --git a/src/test/resources/paForm.json b/src/test/resources/paForm.json index cf5c3d85c..d87123074 100644 --- a/src/test/resources/paForm.json +++ b/src/test/resources/paForm.json @@ -43,7 +43,8 @@ "ccdCase": { "id": 1551365512754035, "state": "CaseCreated", - "lastModifiedDate": "2018-01-01" + "lastModifiedDate": "2018-01-01", + "lastModifiedDateTime": "2018-01-01T12:12:12.123" }, "payments": [ {