Skip to content

Commit

Permalink
CIV-9253 create claim request (#54)
Browse files Browse the repository at this point in the history
* CIV-9253 refactored case data/refactored mapping interface/refactored SubmitCreateClaimService

implemented tests

* CIV-9253 excluding model from sonar

* CIV-9253 update tests

* CIV-9253 update preview url

* CIV-9253 Modified endpoint name

---------

Co-authored-by: Deepthi Doppalapudi <107422736+deepthidoppalapudihmcts@users.noreply.github.com>
  • Loading branch information
drummondjm and deepthidoppalapudihmcts authored Aug 9, 2023
1 parent 03c0345 commit f7494c2
Show file tree
Hide file tree
Showing 42 changed files with 1,169 additions and 304 deletions.
13 changes: 8 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ sonarqube {
property "sonar.projectName", "Reform :: civil-orchestrator-service"
property "sonar.projectKey", "uk.gov.hmcts.reform:civil-orchestrator-service"
property "sonar.coverage.jacoco.xmlReportPaths", "${jacocoTestReport.reports.xml.destination.path}"
property "sonar.coverage.exclusions", "**/requestbody/**, **/responsebody/**,**/exceptions/*, **/config/**/*Configuration.java, **/stereotypes/**, **/*Exception.java"
property "sonar.coverage.exclusions", "**/requestbody/**, **/responsebody/**,**/exceptions/*, **/config/**/*Configuration.java, **/stereotypes/**, **/*Exception.java, **/model/**"
property "sonar.cpd.exclusions", "**/*DocumentManagementService.java"
property "sonar.host.url", "https://sonar.reform.hmcts.net/"
}
Expand Down Expand Up @@ -232,7 +232,6 @@ dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation'
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.1.0'

implementation 'com.github.hmcts:payments-java-client:1.6.4'
implementation 'javax.ws.rs:jsr311-api:1.1.1'
implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
implementation group: 'jakarta.xml.bind', name: 'jakarta.xml.bind-api', version: '4.0.0'
Expand Down Expand Up @@ -261,10 +260,11 @@ dependencies {
testCompileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVersion

implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-hystrix', version: '2.2.10.RELEASE'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '3.1.8'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-openfeign-core', version: '3.1.8'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '4.0.3'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-openfeign-core', version: '4.0.3'

implementation group: 'com.github.hmcts', name: 'ccd-client', version: '4.9.2'
implementation group: 'com.github.hmcts', name: 'ccd-client', version: '4.9.1'
implementation group: 'com.github.hmcts', name: 'idam-java-client', version: '3.0.1'

annotationProcessor group: 'org.projectlombok', name: 'lombok', version: lombokVersion
compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVersion
Expand All @@ -273,6 +273,9 @@ dependencies {
implementation "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"

implementation group: 'uk.gov.hmcts.reform', name: 'service-auth-provider-client', version: '4.0.0'

}

mainClassName = 'uk.gov.hmcts.reform.civil.Application'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ civil-service:
DOCUMENT_MANAGEMENT_SECURED: true
RD_COMMONDATA_API_URL: http://rd-commondata-api-{{ .Values.global.environment }}.service.core-compute-{{ .Values.global.environment }}.internal
SERVICE_REQUEST_UPDATE: https://${SERVICE_NAME}.preview.platform.hmcts.net/service-request-update
CREATE_CLAIM_CIVIL_CASEWORKER: https://${SERVICE_NAME}.preview.platform.hmcts.net/cases/caseworkers/jurisdictions/CIVIL/case-types/CIVIL/cases/
SERVICE_REQUEST_UPDATE_CLAIM_ISSUED: https://${SERVICE_NAME}.preview.platform.hmcts.net/service-request-update-claim-issued
ccd:
enabled: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public void validRequestWithJsonContent() throws Exception {
.interest(Interest.builder().interestOwedDate(LocalDate.now()).build())
.build();

given(this.createClaimFromSdtService.buildResponse(any(String.class), any(CreateClaimRequest.class))).willReturn(new ResponseEntity<>(
given(this.createClaimFromSdtService.buildResponse(any(String.class), any(CreateClaimRequest.class), any())).willReturn(new ResponseEntity<>(
CreateClaimErrorResponse.builder().build(),HttpStatus.CREATED));
String jsonBody = objectMapper.writeValueAsString(createClaimSDT);
ResultActions mvcResult = this.mvc.perform(post(uri)
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/uk/gov/hmcts/reform/civil/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients(basePackages = {
"uk.gov.hmcts.reform.civil",
"uk.gov.hmcts.reform.authorisation",
"uk.gov.hmcts.reform.idam.client"
})
@SuppressWarnings("HideUtilityClassConstructor") // Spring needs a constructor, its not a utility class
public class Application {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package uk.gov.hmcts.reform.civil.config;


import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
public class CreateClaimConfiguration {

private final String url;

public CreateClaimConfiguration(@Value("${civil-service.create_claim.url}") String url) {
this.url = url;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package uk.gov.hmcts.reform.civil.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package uk.gov.hmcts.reform.civil.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import uk.gov.hmcts.reform.authorisation.ServiceAuthorisationApi;
import uk.gov.hmcts.reform.authorisation.generators.AuthTokenGenerator;
import uk.gov.hmcts.reform.authorisation.generators.AuthTokenGeneratorFactory;

@Configuration
@Lazy
public class ServiceTokenGeneratorConfiguration {

@Bean
public AuthTokenGenerator serviceAuthTokenGenerator(
@Value("${idam.s2s-auth.totp_secret}") String secret,
@Value("${idam.s2s-auth.microservice}") String microService,
ServiceAuthorisationApi serviceAuthorisationApi
) {
return AuthTokenGeneratorFactory.createDefaultGenerator(secret, microService, serviceAuthorisationApi);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import uk.gov.hmcts.reform.civil.exceptions.ApplicationException;
import uk.gov.hmcts.reform.civil.exceptions.ErrorDetails;
import uk.gov.hmcts.reform.civil.requestbody.CreateClaimRequest;
import uk.gov.hmcts.reform.civil.responsebody.CreateClaimErrorResponse;
import uk.gov.hmcts.reform.civil.responsebody.CreateClaimResponse;
import uk.gov.hmcts.reform.civil.service.CreateClaimFromSdtService;

@Tag(name = "Create Claim From SDT Controller")
Expand All @@ -35,11 +35,11 @@ public class CreateClaimSdtController {
@ApiResponse(responseCode = "201", description = "Callback processed."),
@ApiResponse(responseCode = "400", description = "Bad Request")})

public ResponseEntity<CreateClaimErrorResponse> createClaimSdt(@Valid @RequestBody CreateClaimRequest createClaimRequest,
@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization,
@RequestHeader("SdtRequestId") String sdtRequestId) {
public ResponseEntity<CreateClaimResponse> createClaimSdt(@Valid @RequestBody CreateClaimRequest createClaimRequest,
@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization,
@RequestHeader("SdtRequestId") String sdtRequestId) {
validateSdtRequestId(sdtRequestId);
return createClaimFromSdtService.buildResponse(authorization,createClaimRequest);
return createClaimFromSdtService.buildResponse(authorization,createClaimRequest, sdtRequestId);
}

private void validateSdtRequestId(String sdtRequestId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,42 +5,18 @@
import org.mapstruct.factory.Mappers;
import uk.gov.hmcts.reform.civil.requestbody.CreateClaimCCD;
import uk.gov.hmcts.reform.civil.requestbody.CreateClaimRequest;
import uk.gov.hmcts.reform.civil.responsebody.MockOrg;
import uk.gov.hmcts.reform.civil.responsebody.MockOrgPolicy;
import uk.gov.hmcts.reform.civil.utils.MonetaryConversions;
import uk.gov.hmcts.reform.civilcommonsmock.civil.enums.YesOrNo;
import uk.gov.hmcts.reform.civilcommonsmock.civil.model.CorrectEmail;
import uk.gov.hmcts.reform.civilcommonsmock.civil.model.Fee;
import uk.gov.hmcts.reform.civilcommonsmock.civil.model.IdamUserDetails;
import uk.gov.hmcts.reform.civilcommonsmock.civil.model.Party;

import java.math.BigDecimal;

@Mapper
public interface CreateClaimMapperInterface {

CreateClaimMapperInterface INSTANCE = Mappers.getMapper(CreateClaimMapperInterface.class);

@Mapping(target = "sdtRequestIdFromSdt", source = "sdtRequestId")
@Mapping(target = "solicitorReferences.applicantSolicitor1Reference", source = "claimantReference")
@Mapping(target = "applicant1.type", expression = "java(setClaimantType())")
@Mapping(target = "applicant1.partyID", expression = "java(null)")
@Mapping(target = "applicant1.individualTitle", expression = "java(null)")
@Mapping(target = "applicant1.individualFirstName", expression = "java(null)")
@Mapping(target = "applicant1.individualLastName", expression = "java(null)")
@Mapping(target = "applicant1.individualDateOfBirth", expression = "java(null)")

@Mapping(target = "applicant1.type", expression = "java(CreateClaimMappingUtils.setClaimantType())")
@Mapping(target = "applicant1.organisationName", source = "claimant.name")
@Mapping(target = "applicant1.companyName", expression = "java(null)")
@Mapping(target = "applicant1.soleTraderTitle", expression = "java(null)")
@Mapping(target = "applicant1.soleTraderFirstName", expression = "java(null)")
@Mapping(target = "applicant1.soleTraderLastName", expression = "java(null)")
@Mapping(target = "applicant1.soleTraderDateOfBirth", expression = "java(null)")
@Mapping(target = "applicant1.soleTraderTradingAs", expression = "java(null)")
@Mapping(target = "applicant1.partyName", expression = "java(null)")
@Mapping(target = "applicant1.partyTypeDisplayValue", expression = "java(null)")
@Mapping(target = "applicant1.partyEmail", expression = "java(null)")
@Mapping(target = "applicant1.partyPhone", expression = "java(null)")
@Mapping(target = "applicant1.unavailableDates", expression = "java(null)")
@Mapping(target = "applicant1.flags", expression = "java(null)")
@Mapping(target = "applicant1.bulkClaimPartyName", expression = "java(null)")
@Mapping(target = "applicant1.primaryAddress.addressLine1", source = "claimant.address.addressLine1")
@Mapping(target = "applicant1.primaryAddress.addressLine2", source = "claimant.address.addressLine2")
@Mapping(target = "applicant1.primaryAddress.addressLine3", source = "claimant.address.addressLine3")
Expand All @@ -49,28 +25,12 @@ public interface CreateClaimMapperInterface {
@Mapping(target = "applicant1.primaryAddress.country", expression = "java(null)")
@Mapping(target = "applicant1.primaryAddress.postCode", source = "claimant.address.postcode")

@Mapping(target = "applicantSolicitor1CheckEmail", expression = "java(checkCorrectEmail())")
@Mapping(target = "applicant1OrganisationPolicy", expression = "java(applicantOrganisation())")
@Mapping(target = "applicantSolicitor1CheckEmail", expression = "java(CreateClaimMappingUtils.checkCorrectEmail())")
@Mapping(target = "applicant1OrganisationPolicy", expression = "java(null)")

@Mapping(target = "respondent1.type", expression = "java(setDefendantType())")
@Mapping(target = "respondent1.partyID", expression = "java(null)")
@Mapping(target = "respondent1.individualTitle", source = "defendant1.name")
@Mapping(target = "respondent1.individualFirstName", source = "defendant1.name")
@Mapping(target = "respondent1.individualLastName", source = "defendant1.name")
@Mapping(target = "respondent1.individualDateOfBirth", expression = "java(null)")
@Mapping(target = "respondent1.type", expression = "java(CreateClaimMappingUtils.setDefendantType())")
@Mapping(target = "respondent1.organisationName", expression = "java(null)")
@Mapping(target = "respondent1.companyName", expression = "java(null)")
@Mapping(target = "respondent1.soleTraderTitle", expression = "java(null)")
@Mapping(target = "respondent1.soleTraderFirstName", expression = "java(null)")
@Mapping(target = "respondent1.soleTraderLastName", expression = "java(null)")
@Mapping(target = "respondent1.soleTraderDateOfBirth", expression = "java(null)")
@Mapping(target = "respondent1.soleTraderTradingAs", expression = "java(null)")
@Mapping(target = "respondent1.partyName", expression = "java(null)")
@Mapping(target = "respondent1.partyTypeDisplayValue", expression = "java(null)")
@Mapping(target = "respondent1.partyEmail", expression = "java(null)")
@Mapping(target = "respondent1.partyPhone", expression = "java(null)")
@Mapping(target = "respondent1.unavailableDates", expression = "java(null)")
@Mapping(target = "respondent1.flags", expression = "java(null)")
@Mapping(target = "respondent1.bulkClaimPartyName", source = "defendant1.name")
@Mapping(target = "respondent1.primaryAddress.addressLine1", source = "defendant1.address.addressLine1")
@Mapping(target = "respondent1.primaryAddress.addressLine2", source = "defendant1.address.addressLine2")
@Mapping(target = "respondent1.primaryAddress.addressLine3", source = "defendant1.address.addressLine3")
Expand All @@ -79,27 +39,10 @@ public interface CreateClaimMapperInterface {
@Mapping(target = "respondent1.primaryAddress.country", expression = "java(null)")
@Mapping(target = "respondent1.primaryAddress.postCode", source = "defendant1.address.postcode")

@Mapping(target = "adddRespondent2", expression = "java(checkRespondent2(createClaimRequest))")

@Mapping(target = "respondent2.type", expression = "java(setDefendantType())")
@Mapping(target = "respondent2.partyID", expression = "java(null)")
@Mapping(target = "respondent2.individualTitle", source = "defendant2.name")
@Mapping(target = "respondent2.individualFirstName", source = "defendant2.name")
@Mapping(target = "respondent2.individualLastName", source = "defendant2.name")
@Mapping(target = "respondent2.individualDateOfBirth", expression = "java(null)")
@Mapping(target = "adddRespondent2", expression = "java(CreateClaimMappingUtils.checkRespondent2(createClaimRequest))")
@Mapping(target = "respondent2.type", expression = "java(CreateClaimMappingUtils.setDefendantType())")
@Mapping(target = "respondent2.organisationName", expression = "java(null)")
@Mapping(target = "respondent2.companyName", expression = "java(null)")
@Mapping(target = "respondent2.soleTraderTitle", expression = "java(null)")
@Mapping(target = "respondent2.soleTraderFirstName", expression = "java(null)")
@Mapping(target = "respondent2.soleTraderLastName", expression = "java(null)")
@Mapping(target = "respondent2.soleTraderDateOfBirth", expression = "java(null)")
@Mapping(target = "respondent2.soleTraderTradingAs", expression = "java(null)")
@Mapping(target = "respondent2.partyName", expression = "java(null)")
@Mapping(target = "respondent2.partyTypeDisplayValue", expression = "java(null)")
@Mapping(target = "respondent2.partyEmail", expression = "java(null)")
@Mapping(target = "respondent2.partyPhone", expression = "java(null)")
@Mapping(target = "respondent2.unavailableDates", expression = "java(null)")
@Mapping(target = "respondent2.flags", expression = "java(null)")
@Mapping(target = "respondent2.bulkClaimPartyName", source = "defendant2.name")
@Mapping(target = "respondent2.primaryAddress.addressLine1", source = "defendant2.address.addressLine1")
@Mapping(target = "respondent2.primaryAddress.addressLine2", source = "defendant2.address.addressLine2")
@Mapping(target = "respondent2.primaryAddress.addressLine3", source = "defendant2.address.addressLine3")
Expand All @@ -109,76 +52,13 @@ public interface CreateClaimMapperInterface {
@Mapping(target = "respondent2.primaryAddress.postCode", source = "defendant2.address.postcode")

@Mapping(target = "detailsOfClaim", source = "particulars")
@Mapping(target = "totalClaimAmount", expression = "java(claimAmount(createClaimRequest))")
@Mapping(target = "claimInterest", expression = "java(claimInterest(createClaimRequest))")
@Mapping(target = "totalClaimAmount", expression = "java(CreateClaimMappingUtils.claimAmount(createClaimRequest))")
@Mapping(target = "claimInterest", expression = "java(CreateClaimMappingUtils.claimInterest(createClaimRequest))")
@Mapping(target = "interestFromSpecificDate", source = "interest.interestOwedDate")
@Mapping(target = "interestFromSpecificDateDescription", expression = "java(null)")
@Mapping(target = "uiStatementOfTruth.name", source = "sotSignature")
@Mapping(target = "uiStatementOfTruth.role", source = "sotSignatureRole")
@Mapping(target = "applicantSolicitor1UserDetails", expression = "java(populateIdamDetails())")
@Mapping(target = "claimFee", expression = "java(calculateClaimFee(createClaimRequest))")
@Mapping(target = "applicantSolicitor1UserDetails", expression = "java(null)")
CreateClaimCCD claimToDto(CreateClaimRequest createClaimRequest);

default Party.Type setClaimantType() {

return Party.Type.ORGANISATION;
}

default Party.Type setDefendantType() {
return Party.Type.INDIVIDUAL;
}

default CorrectEmail checkCorrectEmail() {
CorrectEmail correctEmail = new CorrectEmail();
correctEmail.setCorrect(YesOrNo.YES);

return correctEmail;
}

default MockOrgPolicy applicantOrganisation() {
MockOrgPolicy organisationPolicy = new MockOrgPolicy();
organisationPolicy.setOrgPolicyCaseAssignedRole("[APPLICANTSOLICITORONE]");
organisationPolicy.setOrgPolicyReference(null);
organisationPolicy.setOrganisation(MockOrg.builder().organisationID("Q1KOKP2").build());

return organisationPolicy;
}

default YesOrNo checkRespondent2(CreateClaimRequest createClaimRequest) {
if (createClaimRequest.getDefendant2() != null) {
return YesOrNo.YES;
} else {
return YesOrNo.NO;
}
}

default BigDecimal claimAmount(CreateClaimRequest createClaimRequest) {
BigDecimal bigDecimal = new BigDecimal(createClaimRequest.getClaimAmount());
return MonetaryConversions.penniesToPounds(bigDecimal);
}

default YesOrNo claimInterest(CreateClaimRequest createClaimRequest) {
if (createClaimRequest.getReserveRightToClaimInterest().equals(true)) {
return YesOrNo.YES;
} else {
return YesOrNo.NO;
}
}

// TODO populate with actual data from PRD
default IdamUserDetails populateIdamDetails() {
IdamUserDetails idamUserDetails = new IdamUserDetails();
idamUserDetails.setEmail("hmcts.civil+organisation.1.solicitor.1@gmail.com");
idamUserDetails.setId("089543e2-31fe-4cfb-984e-b82879195e78");
return idamUserDetails;
}

// TODO implement fee service
default Fee calculateClaimFee(CreateClaimRequest createClaimRequest) {
BigDecimal bigDecimal = new BigDecimal(createClaimRequest.getClaimAmount());
Fee claimFee = new Fee();
claimFee.setCalculatedAmountInPence(bigDecimal);
return claimFee;
}

}
Loading

0 comments on commit f7494c2

Please sign in to comment.