diff --git a/data-api/open-api-specification.yml b/data-api/open-api-specification.yml index bce81d73..7aa840ba 100644 --- a/data-api/open-api-specification.yml +++ b/data-api/open-api-specification.yml @@ -117,6 +117,21 @@ paths: schema: type: 'boolean' example: 'true' + - name: 'lead' + in: 'query' + schema: + type: 'boolean' + example: 'true' + - name: 'app-or-cert-type' + in: 'query' + schema: + type: 'string' + example: 'ABC' + - name: 'lar-scope' + in: 'query' + schema: + type: 'string' + example: 'ABC' responses: '200': description: 'Successful operation' @@ -579,6 +594,115 @@ paths: description: 'Not found' '500': description: 'Internal server error' + /lookup/matter-types: + get: + tags: + - lookup + summary: 'Get Matter Type Lookup Values' + operationId: 'getMatterTypeLookupValues' + x-spring-paginated: true + parameters: + - name: 'description' + in: 'query' + schema: + type: 'string' + example: 'ABC' + - name: 'matter-type' + in: 'query' + schema: + type: 'string' + example: 'ABC' + - name: 'category-of-law' + in: 'query' + schema: + type: 'string' + example: 'ABC' + responses: + '200': + description: 'Successful operation' + content: + application/json: + schema: + $ref: "#/components/schemas/matterTypeLookupDetail" + '400': + description: 'Bad request' + '401': + description: 'Unauthorized' + '404': + description: 'Not found' + '500': + description: 'Internal server error' + /lookup/level-of-service: + get: + tags: + - lookup + summary: 'Get Level of service Lookup Values' + operationId: 'getLevelOfServiceLookupValues' + x-spring-paginated: true + parameters: + - name: 'proceeding-code' + in: 'query' + schema: + type: 'string' + example: 'ABC' + - name: 'matter-type' + in: 'query' + schema: + type: 'string' + example: 'ABC' + - name: 'category-of-law' + in: 'query' + schema: + type: 'string' + example: 'ABC' + responses: + '200': + description: 'Successful operation' + content: + application/json: + schema: + $ref: "#/components/schemas/levelOfServiceLookupDetail" + '400': + description: 'Bad request' + '401': + description: 'Unauthorized' + '404': + description: 'Not found' + '500': + description: 'Internal server error' + /lookup/proceeding-client-involvement-types: + get: + tags: + - lookup + summary: 'Get Proceeding client involvement type lookup values' + operationId: 'getProceedingClientInvolvementTypeLookupValues' + x-spring-paginated: true + parameters: + - name: 'proceeding-code' + in: 'query' + schema: + type: 'string' + example: 'ABC' + - name: 'client-involvement-type' + in: 'query' + schema: + type: 'string' + example: 'ABC' + responses: + '200': + description: 'Successful operation' + content: + application/json: + schema: + $ref: "#/components/schemas/clientInvolvementTypeLookupDetail" + '400': + description: 'Bad request' + '401': + description: 'Unauthorized' + '404': + description: 'Not found' + '500': + description: 'Internal server error' /lookup/common: get: tags: @@ -883,6 +1007,69 @@ components: type: 'string' copy_cost_limit: type: 'boolean' + matterTypeLookupDetail: + allOf: + - $ref: "#/components/schemas/page" + type: 'object' + properties: + content: + type: 'array' + default: [] + items: + $ref: '#/components/schemas/matterTypeLookupValueDetail' + matterTypeLookupValueDetail: + type: 'object' + properties: + matter_type: + type: 'string' + description: + type: 'string' + category_of_law_code: + type: 'string' + levelOfServiceLookupDetail: + allOf: + - $ref: "#/components/schemas/page" + type: 'object' + properties: + content: + type: 'array' + default: [] + items: + $ref: '#/components/schemas/levelOfServiceLookupValueDetail' + levelOfServiceLookupValueDetail: + type: 'object' + properties: + proceeding_code: + type: 'string' + matter_type: + type: 'string' + description: + type: 'string' + category_of_law_code: + type: 'string' + level_of_service_code: + type: 'string' + default_code: + type: 'string' + clientInvolvementTypeLookupDetail: + allOf: + - $ref: "#/components/schemas/page" + type: 'object' + properties: + content: + type: 'array' + default: [] + items: + $ref: '#/components/schemas/clientInvolvementTypeLookupValueDetail' + clientInvolvementTypeLookupValueDetail: + type: 'object' + properties: + proceeding_code: + type: 'string' + client_involvement_type: + type: 'string' + client_involvement_type_name: + type: 'string' scopeLimitationDetails: allOf: - $ref: "#/components/schemas/page" diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/controller/LookupController.java b/data-service/src/main/java/uk/gov/laa/ccms/data/controller/LookupController.java index a71abc69..1600a951 100644 --- a/data-service/src/main/java/uk/gov/laa/ccms/data/controller/LookupController.java +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/controller/LookupController.java @@ -9,7 +9,10 @@ import uk.gov.laa.ccms.data.model.AwardTypeLookupDetail; import uk.gov.laa.ccms.data.model.CaseStatusLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupDetail; import uk.gov.laa.ccms.data.model.CommonLookupDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupDetail; import uk.gov.laa.ccms.data.model.StageEndLookupDetail; @@ -66,6 +69,84 @@ public ResponseEntity getCountriesLookupValues( return ResponseEntity.ok(lookupService.getCountryLookupValues(code, pageable)); } + /** + * GET level of service lookup values. + * + *

This endpoint retrieves a paginated list of level of service lookup values based on the + * given proceeding code, matter type, category of law, and pageable.

+ * + * @param proceedingCode the proceeding code + * @param matterType the matter type + * @param categoryOfLaw the category of law + * @param pageable pagination information + * @return the ResponseEntity with status 200 (OK) and the list of level of service lookup values + * in the body + */ + @Override + public ResponseEntity getLevelOfServiceLookupValues( + final String proceedingCode, + final String matterType, + final String categoryOfLaw, + final Pageable pageable) { + + return ResponseEntity.ok(lookupService.getLevelOfServiceLookupValues( + proceedingCode, + matterType, + categoryOfLaw, + pageable)); + } + + /** + * GET matter type lookup values. + * + *

This endpoint retrieves a paginated list of matter type lookup values based on the given + * description, matter type, category of law, and pageable.

+ * + * @param description the description + * @param matterType the matter type + * @param categoryOfLaw the category of law + * @param pageable pagination information + * @return the ResponseEntity with status 200 (OK) and the list of matter type lookup values in + * the body + */ + @Override + public ResponseEntity getMatterTypeLookupValues( + final String description, + final String matterType, + final String categoryOfLaw, + final Pageable pageable) { + + return ResponseEntity.ok(lookupService.getMatterTypeLookupValues( + description, + matterType, + categoryOfLaw, + pageable)); + } + + /** + * GET proceeding client involvement type lookup values. + * + *

This endpoint retrieves a paginated list of proceeding client involvement type lookup values + * based on the given proceeding code, client involvement type, and pageable.

+ * + * @param proceedingCode the proceeding code + * @param clientInvolvementType the client involvement type + * @param pageable pagination information + * @return the ResponseEntity with status 200 (OK) and the list of proceeding client involvement + * type lookup values in the body + */ + @Override + public ResponseEntity + getProceedingClientInvolvementTypeLookupValues( + final String proceedingCode, + final String clientInvolvementType, + final Pageable pageable) { + + return ResponseEntity.ok(lookupService.getClientInvolvementTypeLookupValues( + proceedingCode, + clientInvolvementType, + pageable)); + } /** @@ -134,6 +215,8 @@ public ResponseEntity getPersonToCaseRelationshi code, description, pageable)); } + + /** * GET organisation to case relationship lookup values. * diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/controller/ProceedingController.java b/data-service/src/main/java/uk/gov/laa/ccms/data/controller/ProceedingController.java index 9dfd0628..7ed6ceb2 100644 --- a/data-service/src/main/java/uk/gov/laa/ccms/data/controller/ProceedingController.java +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/controller/ProceedingController.java @@ -30,7 +30,7 @@ public class ProceedingController implements ProceedingsApi { * GET Proceedings by category of law, matter type, whether they are enabled, * and whether they are amendment-only proceedings. * - * @param categoryOfLawCode - the category of law code + * @param categoryOfLaw - the category of law code * @param matterType - the matter type * @param enabled - whether the proceeding is enabled * @param amendmentOnly - whether the proceeding is amendment-only @@ -38,16 +38,37 @@ public class ProceedingController implements ProceedingsApi { * @return ResponseEntity with the results of the search */ @Override - public ResponseEntity getProceedings(String categoryOfLawCode, - String matterType, Boolean amendmentOnly, Boolean enabled, Pageable pageable) { - return ResponseEntity.ok(proceedingService.getProceedings( - categoryOfLawCode, - matterType, - enabled, - amendmentOnly, - pageable)); + public ResponseEntity getProceedings( + final String categoryOfLaw, + final String matterType, + final Boolean amendmentOnly, + final Boolean enabled, + final Boolean lead, + final String appOrCertType, + final String larScope, + final Pageable pageable) { + + if (lead != null && lead) { + return ResponseEntity.ok(proceedingService.getLeadProceedings( + categoryOfLaw, + matterType, + amendmentOnly, + enabled, + appOrCertType, + larScope, + pageable)); + } else { + return ResponseEntity.ok(proceedingService.getProceedings( + categoryOfLaw, + matterType, + amendmentOnly, + enabled, + larScope, + pageable)); + } } + /** * Retrieves a proceeding by its code. * @@ -61,4 +82,5 @@ public ResponseEntity getProceeding(String code) { .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); } + } diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/entity/LevelOfService.java b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/LevelOfService.java new file mode 100644 index 00000000..8b26d511 --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/LevelOfService.java @@ -0,0 +1,35 @@ +package uk.gov.laa.ccms.data.entity; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import jakarta.persistence.Column; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Immutable; + +/** + * Represents a Level Of service lookup value entity. + */ +@Entity +@Data +@NoArgsConstructor +@Table(name = "XXCCMS_LEVEL_OF_SERVICE_V") +@Immutable +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public class LevelOfService { + + @EmbeddedId + private LevelOfServiceId id; + + @Column(name = "LEVEL_OF_SERVICE_CODE") + private String levelOfServiceCode; + + @Column(name = "DESCRIPTION") + private String description; + + @Column(name = "DEFAULT_CODE") + private String defaultCode; +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/entity/LevelOfServiceId.java b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/LevelOfServiceId.java new file mode 100644 index 00000000..5f779225 --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/LevelOfServiceId.java @@ -0,0 +1,37 @@ +package uk.gov.laa.ccms.data.entity; + +import jakarta.persistence.Column; +import java.io.Serializable; +import lombok.Data; +import org.hibernate.annotations.Immutable; + +/** + * Represents the composite primary key for the {@link uk.gov.laa.ccms.data.entity.LevelOfService} + * entity. + + * @see LevelOfService + */ +@Data +@Immutable +public class LevelOfServiceId implements Serializable { + + /** + * The category of law code. + */ + @Column(name = "CATEGORY_OF_LAW_CODE") + private String categoryOfLawCode; + + /** + * The Matter type. + */ + @Column(name = "MATTER_TYPE") + private String matterType; + + /** + * The proceeding code. + */ + @Column(name = "PROCEEDING_CODE") + private String proceedingCode; + + +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/entity/MatterType.java b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/MatterType.java new file mode 100644 index 00000000..a1ddf87b --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/MatterType.java @@ -0,0 +1,34 @@ +package uk.gov.laa.ccms.data.entity; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Immutable; + + +/** + * Represents a Matter type entity. + */ +@Entity +@Data +@NoArgsConstructor +@Table(name = "XXCCMS_MATTER_TYPES_V") +@Immutable +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public class MatterType { + + @Id + @Column(name = "MATTER_TYPE") + private String matterType; + + @Column(name = "DESCRIPTION") + private String description; + + @Column(name = "CATEGORY_OF_LAW_CODE") + private String categoryOfLawCode; +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/entity/ProceedingClientInvolvementType.java b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/ProceedingClientInvolvementType.java new file mode 100644 index 00000000..efa2b445 --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/ProceedingClientInvolvementType.java @@ -0,0 +1,37 @@ +package uk.gov.laa.ccms.data.entity; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import jakarta.persistence.Column; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Immutable; + +/** + * Represents the ProceedingClientInvolvementType entity in the database. + * This entity is used to store information about the type of client involvement in a proceeding. + */ +@Entity +@Data +@NoArgsConstructor +@Table(name = "XXCCMS_PROC_CLIENT_INV_TYPE_V") +@Immutable +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public class ProceedingClientInvolvementType { + + /** + * The ID of the ProceedingClientInvolvementType. + * This is an embedded ID, meaning it's a composite primary key. + */ + @EmbeddedId + private ProceedingClientInvolvementTypeId id; + + /** + * The name of the client involvement type. + */ + @Column(name = "CLIENT_INVOLVEMENT_TYPE_NAME") + private String clientInvolvementTypeName; +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/entity/ProceedingClientInvolvementTypeId.java b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/ProceedingClientInvolvementTypeId.java new file mode 100644 index 00000000..0093b46f --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/entity/ProceedingClientInvolvementTypeId.java @@ -0,0 +1,30 @@ +package uk.gov.laa.ccms.data.entity; + +import jakarta.persistence.Column; +import java.io.Serializable; +import lombok.Data; +import org.hibernate.annotations.Immutable; + +/** + * Represents the composite primary key for the + * {@link uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementType} entity. + + * @see ProceedingClientInvolvementType + */ +@Data +@Immutable +public class ProceedingClientInvolvementTypeId implements Serializable { + + /** + * The proceeding code. + */ + @Column(name = "PROCEEDING_CODE") + private String proceedingCode; + + /** + * The stage end value. + */ + @Column(name = "CLIENT_INVOLVEMENT_TYPE") + private String clientInvolvementType; + +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/mapper/LookupMapper.java b/data-service/src/main/java/uk/gov/laa/ccms/data/mapper/LookupMapper.java index ea00e1c1..65564b9f 100644 --- a/data-service/src/main/java/uk/gov/laa/ccms/data/mapper/LookupMapper.java +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/mapper/LookupMapper.java @@ -9,9 +9,12 @@ import uk.gov.laa.ccms.data.entity.CategoryOfLawLookupValue; import uk.gov.laa.ccms.data.entity.CommonLookupValue; import uk.gov.laa.ccms.data.entity.CountryLookupValue; +import uk.gov.laa.ccms.data.entity.LevelOfService; +import uk.gov.laa.ccms.data.entity.MatterType; import uk.gov.laa.ccms.data.entity.OrganisationRelationshipToCaseLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValue; import uk.gov.laa.ccms.data.entity.PersonRelationshipToCaseLookupValue; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementType; import uk.gov.laa.ccms.data.entity.StageEndLookupValue; import uk.gov.laa.ccms.data.model.AmendmentTypeLookupDetail; import uk.gov.laa.ccms.data.model.AmendmentTypeLookupValueDetail; @@ -20,8 +23,13 @@ import uk.gov.laa.ccms.data.model.CaseStatusLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupValueDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupValueDetail; import uk.gov.laa.ccms.data.model.CommonLookupDetail; import uk.gov.laa.ccms.data.model.CommonLookupValueDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupValueDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupValueDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupDetail; @@ -47,6 +55,23 @@ public interface LookupMapper { CommonLookupDetail toCommonLookupDetailFromCountries(Page page); + MatterTypeLookupDetail toMatterTypeLookupDetail(Page page); + + LevelOfServiceLookupDetail toLevelOfServicePage(Page page); + + @Mapping(target = "proceedingCode", source = "id.proceedingCode") + @Mapping(target = "matterType", source = "id.matterType") + @Mapping(target = "categoryOfLawCode", source = "id.categoryOfLawCode") + LevelOfServiceLookupValueDetail toLevelOfServiceLookupValueDetail(LevelOfService levelOfService); + + ClientInvolvementTypeLookupDetail toClientInvolvementTypeLookupDetail( + Page page); + + @Mapping(target = "proceedingCode", source = "id.proceedingCode") + @Mapping(target = "clientInvolvementType", source = "id.clientInvolvementType") + ClientInvolvementTypeLookupValueDetail toClientInvolvementTypeLookupValueDetail( + ProceedingClientInvolvementType proceedingClientInvolvementType); + @Mapping(target = "type", ignore = true) @Mapping(target = "startDateActive", ignore = true) @Mapping(target = "attribute11", ignore = true) diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/repository/LevelOfServiceRepository.java b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/LevelOfServiceRepository.java new file mode 100644 index 00000000..580f760c --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/LevelOfServiceRepository.java @@ -0,0 +1,17 @@ +package uk.gov.laa.ccms.data.repository; + +import org.springframework.stereotype.Repository; +import uk.gov.laa.ccms.data.entity.LevelOfService; +import uk.gov.laa.ccms.data.entity.LevelOfServiceId; + +/** + * This is a Spring repository for LevelOfService entity operations. It extends + * ReadOnlyRepository interface for providing basic read-only operations on LevelOfService entities. + * The primary key for LevelOfService entity is LevelOfServiceId. + * + * @Repository allows for exception translation into Spring's DataAccessException hierarchy. + */ +@Repository +public interface LevelOfServiceRepository extends + ReadOnlyRepository { +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/repository/MatterTypeRepository.java b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/MatterTypeRepository.java new file mode 100644 index 00000000..4e577b3d --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/MatterTypeRepository.java @@ -0,0 +1,16 @@ +package uk.gov.laa.ccms.data.repository; + +import org.springframework.stereotype.Repository; +import uk.gov.laa.ccms.data.entity.MatterType; + +/** + * This is a Spring repository for MatterType entity operations. It extends + * ReadOnlyRepository interface for providing basic read-only operations on MatterType entities. The + * primary key for MatterType entity is String. It is annotated with @Repository, which makes it a + * part of the Spring framework's persistence layer. + * + * @Repository allows for exception translation into Spring's DataAccessException hierarchy. + */ +@Repository +public interface MatterTypeRepository extends ReadOnlyRepository { +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingClientInvolvementTypeRepository.java b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingClientInvolvementTypeRepository.java new file mode 100644 index 00000000..3dfe04c7 --- /dev/null +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingClientInvolvementTypeRepository.java @@ -0,0 +1,19 @@ +package uk.gov.laa.ccms.data.repository; + +import org.springframework.stereotype.Repository; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementType; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementTypeId; + +/** + * This is a Spring repository for ProceedingClientInvolvementType entity operations. It extends + * ReadOnlyRepository interface for providing basic read-only operations on + * ProceedingClientInvolvementType entities. The primary key for ProceedingClientInvolvementType + * entity is ProceedingClientInvolvementTypeId. It is annotated with @Repository, which makes it a + * part of the Spring framework's persistence layer. + * + * @Repository allows for exception translation into Spring's DataAccessException hierarchy. + */ +@Repository +public interface ProceedingClientInvolvementTypeRepository extends + ReadOnlyRepository { +} diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingRepository.java b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingRepository.java index 12edee48..2ab3642a 100644 --- a/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingRepository.java +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/repository/ProceedingRepository.java @@ -1,5 +1,11 @@ package uk.gov.laa.ccms.data.repository; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import uk.gov.laa.ccms.data.entity.Proceeding; @@ -14,5 +20,32 @@ */ @Repository public interface ProceedingRepository extends ReadOnlyRepository { + @Query(value = + "SELECT A.* FROM XXCCMS_PROCEEDING_V A , XXCCMS_LEAD_PROC_CTRL_V B WHERE " + + "A.PROC_LAR_SCOPE = B.PERMITTED_PROCEEDING_SCOPE" + + " AND (:categoryOfLaw is null or A.CATEGORY_OF_LAW_CODE = :categoryOfLaw)" + + " AND (:matterType is null or A.MATTER_TYPE = :matterType)" + + " AND (:amendmentOnly is null or A.AMENDMENT_ONLY = :amendmentOnly)" + + " AND (:enabled is null or A.ENABLED_FLAG = :enabled)" + + " AND (:larScope is null or A.PROC_LAR_SCOPE = :larScope)" + + " AND (:appOrCertType is null or B.APP_OR_CERT_TYPE = :appOrCertType)", + countQuery = + "SELECT COUNT(*) FROM XXCCMS_PROCEEDING_V A , XXCCMS_LEAD_PROC_CTRL_V B WHERE " + + "A.PROC_LAR_SCOPE = B.PERMITTED_PROCEEDING_SCOPE" + + " AND (:categoryOfLaw is null or A.CATEGORY_OF_LAW_CODE = :categoryOfLaw)" + + " AND (:matterType is null or A.MATTER_TYPE = :matterType)" + + " AND (:amendmentOnly is null or A.AMENDMENT_ONLY = :amendmentOnly)" + + " AND (:enabled is null or A.ENABLED_FLAG = :enabled)" + + " AND (:larScope is null or A.PROC_LAR_SCOPE = :larScope)" + + " AND (:appOrCertType is null or B.APP_OR_CERT_TYPE = :appOrCertType)", + nativeQuery = true) + Page findAllLeadProceedings( + @Param("categoryOfLaw") String categoryOfLaw, + @Param("matterType") String matterType, + @Param("amendmentOnly") String amendmentOnly, + @Param("enabled") String enabled, + @Param("larScope") String larScope, + @Param("appOrCertType") String appOrCertType, + Pageable pageable); } diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/service/LookupService.java b/data-service/src/main/java/uk/gov/laa/ccms/data/service/LookupService.java index 8913a69a..3360e934 100644 --- a/data-service/src/main/java/uk/gov/laa/ccms/data/service/LookupService.java +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/service/LookupService.java @@ -12,10 +12,15 @@ import uk.gov.laa.ccms.data.entity.CategoryOfLawLookupValue; import uk.gov.laa.ccms.data.entity.CommonLookupValue; import uk.gov.laa.ccms.data.entity.CountryLookupValue; +import uk.gov.laa.ccms.data.entity.LevelOfService; +import uk.gov.laa.ccms.data.entity.LevelOfServiceId; +import uk.gov.laa.ccms.data.entity.MatterType; import uk.gov.laa.ccms.data.entity.OrganisationRelationshipToCaseLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValueId; import uk.gov.laa.ccms.data.entity.PersonRelationshipToCaseLookupValue; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementType; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementTypeId; import uk.gov.laa.ccms.data.entity.StageEndLookupValue; import uk.gov.laa.ccms.data.entity.StageEndLookupValueId; import uk.gov.laa.ccms.data.mapper.LookupMapper; @@ -23,7 +28,10 @@ import uk.gov.laa.ccms.data.model.AwardTypeLookupDetail; import uk.gov.laa.ccms.data.model.CaseStatusLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupDetail; import uk.gov.laa.ccms.data.model.CommonLookupDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupDetail; import uk.gov.laa.ccms.data.model.StageEndLookupDetail; @@ -33,9 +41,12 @@ import uk.gov.laa.ccms.data.repository.CategoryOfLawLookupValueRepository; import uk.gov.laa.ccms.data.repository.CommonLookupValueRepository; import uk.gov.laa.ccms.data.repository.CountryLookupValueRepository; +import uk.gov.laa.ccms.data.repository.LevelOfServiceRepository; +import uk.gov.laa.ccms.data.repository.MatterTypeRepository; import uk.gov.laa.ccms.data.repository.OrganisationRelationshipToCaseLookupValueRepository; import uk.gov.laa.ccms.data.repository.OutcomeResultLookupValueRepository; import uk.gov.laa.ccms.data.repository.PersonRelationshipToCaseLookupValueRepository; +import uk.gov.laa.ccms.data.repository.ProceedingClientInvolvementTypeRepository; import uk.gov.laa.ccms.data.repository.StageEndLookupValueRepository; /** @@ -70,6 +81,12 @@ public class LookupService extends AbstractEbsDataService { private final LookupMapper lookupMapper; + private final MatterTypeRepository matterTypeRepository; + + private final LevelOfServiceRepository levelOfServiceRepository; + + private final ProceedingClientInvolvementTypeRepository proceedingClientInvolvementTypeRepository; + /** * Retrieves a page of common values based on the provided * type, code, description and pagination information. @@ -148,6 +165,87 @@ public CommonLookupDetail getCountryLookupValues( countryLookupValueRepository.findAll(Example.of(example), pageable)); } + /** + * Retrieves a page of MatterType values based on the provided description, matter type, category + * of law, and pagination information. + * + * @param description The description of the MatterType. + * @param matterType The type of matter. + * @param categoryOfLaw The category of law. + * @param pageable The pagination information. + * @return A {@link MatterTypeLookupDetail} object containing a page of {@link MatterType} + * entities that match the criteria. + */ + public MatterTypeLookupDetail getMatterTypeLookupValues( + final String description, + final String matterType, + final String categoryOfLaw, + final Pageable pageable) { + MatterType example = new MatterType(); + example.setMatterType(matterType); + example.setDescription(description); + example.setCategoryOfLawCode(categoryOfLaw); + + return lookupMapper.toMatterTypeLookupDetail( + matterTypeRepository.findAll(Example.of(example), pageable)); + } + + /** + * Retrieves a page of ProceedingClientInvolvementType values based on the provided proceeding + * code, client involvement type, and pagination information. + * + * @param proceedingCode The code of the proceeding. + * @param clientInvolvementType The type of client involvement. + * @param pageable The pagination information. + * @return A {@link ClientInvolvementTypeLookupDetail} object containing a page of + * {@link ProceedingClientInvolvementType} entities that match the criteria. + */ + public ClientInvolvementTypeLookupDetail getClientInvolvementTypeLookupValues( + final String proceedingCode, + final String clientInvolvementType, + final Pageable pageable) { + ProceedingClientInvolvementType example = new ProceedingClientInvolvementType(); + example.setId(new ProceedingClientInvolvementTypeId()); + example.getId().setProceedingCode(proceedingCode); + example.getId().setClientInvolvementType(clientInvolvementType); + + return lookupMapper.toClientInvolvementTypeLookupDetail( + proceedingClientInvolvementTypeRepository.findAll(Example.of(example), pageable)); + } + + + /** + * Retrieves a page of LevelOfService values based on the provided proceeding code, matter type, + * category of law, and pagination information. + * + * @param proceedingCode The code of the proceeding. + * @param matterType The type of matter. + * @param categoryOfLaw The category of law. + * @param pageable The pagination information. + * @return A {@link LevelOfServiceLookupDetail} object containing a page of + * {@link LevelOfService} entities that match the criteria. + */ + public LevelOfServiceLookupDetail getLevelOfServiceLookupValues( + final String proceedingCode, + final String matterType, + final String categoryOfLaw, + final Pageable pageable) { + + LevelOfServiceId exampleId = new LevelOfServiceId(); + exampleId.setMatterType(matterType); + exampleId.setProceedingCode(proceedingCode); + exampleId.setCategoryOfLawCode(categoryOfLaw); + + LevelOfService example = new LevelOfService(); + example.setId(exampleId); + + levelOfServiceRepository.findAll(Example.of(example), pageable); + + return lookupMapper.toLevelOfServicePage( + levelOfServiceRepository.findAll(Example.of(example), pageable)); + + } + /** * Retrieves a page of outcome result values based on the provided search criteria. * diff --git a/data-service/src/main/java/uk/gov/laa/ccms/data/service/ProceedingService.java b/data-service/src/main/java/uk/gov/laa/ccms/data/service/ProceedingService.java index aadfdf0e..eeaabf9a 100644 --- a/data-service/src/main/java/uk/gov/laa/ccms/data/service/ProceedingService.java +++ b/data-service/src/main/java/uk/gov/laa/ccms/data/service/ProceedingService.java @@ -35,25 +35,65 @@ public class ProceedingService extends AbstractEbsDataService { * Get Proceedings which match the provided category of law, matter type, * amendment only, and enabled values. * - * @param categoryOfLawCode - the category of law code - * @param matterType - the matter type - * @param enabled - whether the proceeding is enabled - * @param amendmentOnly - whether the proceeding is amendment-only - * @param pageable - the pageable settings - * @return a ProceedingDetails containing zero or more Proceedings that match the criteria + * @param categoryOfLawCode The code representing the category of law. + * @param matterType The type of matter. + * @param amendmentOnly A flag indicating whether the proceeding is amendment-only. + * @param enabled A flag indicating whether the proceeding is enabled. + * @param larScope The scope of the Legal Aid Request (LAR). + * @param pageable The pagination information. + * @return A {@link ProceedingDetails} object containing zero or more {@link Proceeding} entities + * that match the criteria. */ public ProceedingDetails getProceedings(String categoryOfLawCode, String matterType, - Boolean amendmentOnly, Boolean enabled, Pageable pageable) { + Boolean amendmentOnly, Boolean enabled, String larScope, Pageable pageable) { + Proceeding proceeding = new Proceeding(); proceeding.setCategoryOfLawCode(categoryOfLawCode); proceeding.setMatterType(matterType); proceeding.setAmendmentOnly(amendmentOnly); proceeding.setEnabled(enabled); + proceeding.setLarScope(larScope); return proceedingMapper.toProceedingDetails( proceedingRepository.findAll(Example.of(proceeding), pageable)); } + /** + * Retrieves a list of lead {@link Proceeding} entities that match the provided criteria. + * + * @param categoryOfLaw The category of law. + * @param matterType The type of matter. + * @param amendmentOnly A flag indicating whether the proceeding is amendment-only. + * @param enabled A flag indicating whether the proceeding is enabled. + * @param appOrCertType The type of application or certificate. + * @param larScope The scope of the Legal Aid Request (LAR). + * @param pageable The pagination information. + * @return A {@link ProceedingDetails} object containing zero or more lead {@link Proceeding} + * entities that match the criteria. + */ + public ProceedingDetails getLeadProceedings( + String categoryOfLaw, + String matterType, + Boolean amendmentOnly, + Boolean enabled, + String appOrCertType, + String larScope, + Pageable pageable) { + + String amendmentOnlyString = (amendmentOnly != null) ? (amendmentOnly ? "Y" : "N") : null; + String enabledString = (enabled != null) ? (enabled ? "Y" : "N") : null; + + return proceedingMapper.toProceedingDetails( + proceedingRepository.findAllLeadProceedings( + categoryOfLaw, + matterType, + amendmentOnlyString, + enabledString, + larScope, + appOrCertType, + pageable)); + } + public Optional getProceeding(String code) { return proceedingRepository.findById(code) .map(proceedingMapper::toProceedingDetail); diff --git a/data-service/src/test/java/uk/gov/laa/ccms/data/controller/LookupControllerTest.java b/data-service/src/test/java/uk/gov/laa/ccms/data/controller/LookupControllerTest.java index ef9b8105..afb4dc80 100644 --- a/data-service/src/test/java/uk/gov/laa/ccms/data/controller/LookupControllerTest.java +++ b/data-service/src/test/java/uk/gov/laa/ccms/data/controller/LookupControllerTest.java @@ -1,21 +1,34 @@ package uk.gov.laa.ccms.data.controller; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.context.WebApplicationContext; import uk.gov.laa.ccms.data.model.AmendmentTypeLookupDetail; import uk.gov.laa.ccms.data.model.AwardTypeLookupDetail; import uk.gov.laa.ccms.data.model.CaseStatusLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupDetail; import uk.gov.laa.ccms.data.model.CommonLookupDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupDetail; import uk.gov.laa.ccms.data.model.StageEndLookupDetail; @@ -30,6 +43,18 @@ class LookupControllerTest { @InjectMocks private LookupController lookupController; + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext webApplicationContext; + + @BeforeEach + public void setup() { + mockMvc = standaloneSetup(lookupController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build(); + } + @Test void getCommonValues_returnsCommonValuesList() { String type = "type"; @@ -209,4 +234,62 @@ void getCategoryOfLawValues_returnsCategoryOfLawValuesList() { assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); assertEquals(expectedResponse, responseEntity.getBody()); } + + @Test + void getLevelOfServiceLookupValues_returnsData() throws Exception { + String proceedingCode = "proc1"; + String matterType = "mat1"; + String categoryOfLaw = "cat1"; + Pageable pageable = Pageable.ofSize(20); + + when(lookupService.getLevelOfServiceLookupValues(proceedingCode, matterType, categoryOfLaw, pageable)) + .thenReturn(new LevelOfServiceLookupDetail()); + + this.mockMvc.perform(get("/lookup/level-of-service") + .param("proceeding-code", proceedingCode) + .param("matter-type", matterType) + .param("category-of-law", categoryOfLaw)) + .andDo(print()) + .andExpect(status().isOk()); + + verify(lookupService).getLevelOfServiceLookupValues(proceedingCode, matterType, categoryOfLaw, pageable); + } + + @Test + void getMatterTypeLookupValues_returnsData() throws Exception { + String description = "desc1"; + String matterType = "mat1"; + String categoryOfLaw = "cat1"; + Pageable pageable = Pageable.ofSize(20); + + when(lookupService.getMatterTypeLookupValues(description, matterType, categoryOfLaw, pageable)) + .thenReturn(new MatterTypeLookupDetail()); + + mockMvc.perform(get("/lookup/matter-types") + .param("description", description) + .param("matter-type", matterType) + .param("category-of-law", categoryOfLaw)) + .andDo(print()) + .andExpect(status().isOk()); + + verify(lookupService).getMatterTypeLookupValues(description, matterType, categoryOfLaw, pageable); + } + + @Test + void getProceedingClientInvolvementTypeLookupValues_returnsData() throws Exception { + String proceedingCode = "proc1"; + String clientInvolvementType = "client1"; + Pageable pageable = Pageable.ofSize(20); + + when(lookupService.getClientInvolvementTypeLookupValues(proceedingCode, clientInvolvementType, pageable)) + .thenReturn(new ClientInvolvementTypeLookupDetail()); + + mockMvc.perform(get("/lookup/proceeding-client-involvement-types") + .param("proceeding-code", proceedingCode) + .param("client-involvement-type", clientInvolvementType)) + .andDo(print()) + .andExpect(status().isOk()); + + verify(lookupService).getClientInvolvementTypeLookupValues(proceedingCode, clientInvolvementType, pageable); + } } diff --git a/data-service/src/test/java/uk/gov/laa/ccms/data/controller/ProceedingControllerTest.java b/data-service/src/test/java/uk/gov/laa/ccms/data/controller/ProceedingControllerTest.java index 382ff8d7..111fec81 100644 --- a/data-service/src/test/java/uk/gov/laa/ccms/data/controller/ProceedingControllerTest.java +++ b/data-service/src/test/java/uk/gov/laa/ccms/data/controller/ProceedingControllerTest.java @@ -80,20 +80,51 @@ void getProceedings_returnsData() throws Exception { String matterType = "mat1"; Boolean amendOnly = true; Boolean enabled = true; + String larScope = "scope1"; Pageable pageable = Pageable.ofSize(20); when(proceedingService.getProceedings(categoryOfLawCode, matterType, amendOnly, - enabled, pageable)).thenReturn(new ProceedingDetails()); + enabled, larScope, pageable)).thenReturn(new ProceedingDetails()); this.mockMvc.perform(get("/proceedings") .param("category-of-law", categoryOfLawCode) .param("matter-type", matterType) .param("amendment-only", amendOnly.toString()) - .param("enabled", enabled.toString())) + .param("enabled", enabled.toString()) + .param("lar-scope", larScope)) .andDo(print()) .andExpect(status().isOk()); verify(proceedingService).getProceedings( - categoryOfLawCode, matterType, amendOnly, enabled, pageable); + categoryOfLawCode, matterType, amendOnly, enabled, larScope, pageable); + } + + @Test + void getProceedings_leadProceedings_returnsData() throws Exception { + String categoryOfLaw = "cat1"; + String matterType = "mat1"; + Boolean amendOnly = true; + Boolean enabled = true; + String appOrCertType = "app1"; + String larScope = "scope1"; + Boolean lead = true; + Pageable pageable = Pageable.ofSize(20); + + when(proceedingService.getLeadProceedings(categoryOfLaw, matterType, amendOnly, + enabled, appOrCertType, larScope, pageable)).thenReturn(new ProceedingDetails()); + + this.mockMvc.perform(get("/proceedings") + .param("category-of-law", categoryOfLaw) + .param("matter-type", matterType) + .param("amendment-only", amendOnly.toString()) + .param("enabled", enabled.toString()) + .param("app-or-cert-type", appOrCertType) + .param("lar-scope", larScope) + .param("lead", lead.toString())) + .andDo(print()) + .andExpect(status().isOk()); + + verify(proceedingService).getLeadProceedings( + categoryOfLaw, matterType, amendOnly, enabled, appOrCertType, larScope, pageable); } } diff --git a/data-service/src/test/java/uk/gov/laa/ccms/data/mapper/LookupMapperImplTest.java b/data-service/src/test/java/uk/gov/laa/ccms/data/mapper/LookupMapperImplTest.java index 85481923..02c350f8 100644 --- a/data-service/src/test/java/uk/gov/laa/ccms/data/mapper/LookupMapperImplTest.java +++ b/data-service/src/test/java/uk/gov/laa/ccms/data/mapper/LookupMapperImplTest.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,10 +18,15 @@ import uk.gov.laa.ccms.data.entity.CategoryOfLawLookupValue; import uk.gov.laa.ccms.data.entity.CommonLookupValue; import uk.gov.laa.ccms.data.entity.CountryLookupValue; +import uk.gov.laa.ccms.data.entity.LevelOfService; +import uk.gov.laa.ccms.data.entity.LevelOfServiceId; +import uk.gov.laa.ccms.data.entity.MatterType; import uk.gov.laa.ccms.data.entity.OrganisationRelationshipToCaseLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValueId; import uk.gov.laa.ccms.data.entity.PersonRelationshipToCaseLookupValue; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementType; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementTypeId; import uk.gov.laa.ccms.data.entity.StageEndLookupValue; import uk.gov.laa.ccms.data.entity.StageEndLookupValueId; import uk.gov.laa.ccms.data.model.AmendmentTypeLookupDetail; @@ -31,11 +37,19 @@ import uk.gov.laa.ccms.data.model.CaseStatusLookupValueDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupValueDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupValueDetail; import uk.gov.laa.ccms.data.model.CommonLookupDetail; import uk.gov.laa.ccms.data.model.CommonLookupValueDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupValueDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupValueDetail; +import uk.gov.laa.ccms.data.model.OutcomeResultLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupValueDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupValueDetail; +import uk.gov.laa.ccms.data.model.StageEndLookupDetail; import uk.gov.laa.ccms.data.model.StageEndLookupValueDetail; @ExtendWith(MockitoExtension.class) @@ -435,8 +449,218 @@ void toCategoryOfLawLookupDetailTest() { assertEquals(expectedDetail, actualDetail); } + @Test + void matterTypeToMatterTypeLookupValueDetail_returnsCorrectDetail() { + MatterType matterType = createMatterType("MAT1", "desc", "CAT1"); + MatterTypeLookupValueDetail expected = createMatterTypeLookupValueDetail("MAT1", "desc", "CAT1"); + + MatterTypeLookupValueDetail actual = mapper.matterTypeToMatterTypeLookupValueDetail(matterType); + + assertEquals(expected, actual); + } + + @Test + void matterTypeListToMatterTypeLookupValueDetailList_returnsCorrectList() { + MatterType matterType1 = createMatterType("MAT1", "desc1", "CAT1"); + MatterType matterType2 = createMatterType("MAT2", "desc2", "CAT2"); + + List matterTypes = Arrays.asList(matterType1, matterType2); + + MatterTypeLookupValueDetail expected1 = createMatterTypeLookupValueDetail("MAT1", "desc1", "CAT1"); + MatterTypeLookupValueDetail expected2 = createMatterTypeLookupValueDetail("MAT2", "desc2", "CAT2"); + + List expected = Arrays.asList(expected1, expected2); + + List actual = mapper.matterTypeListToMatterTypeLookupValueDetailList(matterTypes); + + assertEquals(expected, actual); + } + + @Test + void toMatterTypeLookupDetail_returnsCorrectDetail() { + MatterType matterType1 = createMatterType("MAT1", "desc1", "CAT1"); + MatterType matterType2 = createMatterType("MAT2", "desc2", "CAT2"); + + List matterTypes = Arrays.asList(matterType1, matterType2); + Page page = new PageImpl<>(matterTypes); + + MatterTypeLookupDetail expected = new MatterTypeLookupDetail(); + expected.setTotalPages(page.getTotalPages()); + expected.setTotalElements((int) page.getTotalElements()); + expected.setNumber(page.getNumber()); + expected.setSize(page.getSize()); + expected.setContent(mapper.matterTypeListToMatterTypeLookupValueDetailList(page.getContent())); + + MatterTypeLookupDetail actual = mapper.toMatterTypeLookupDetail(page); + + assertEquals(expected, actual); + } + + @Test + void levelOfServiceListToLevelOfServiceLookupValueDetailList_returnsCorrectList() { + LevelOfService levelOfService1 = createLevelOfService("MAT1", "PRO1", "CAT1"); + LevelOfService levelOfService2 = createLevelOfService("MAT2", "PRO2", "CAT2"); + + List levelOfServices = Arrays.asList(levelOfService1, levelOfService2); + + LevelOfServiceLookupValueDetail expected1 = createLevelOfServiceLookupValueDetail("MAT1", "PRO1", "CAT1"); + LevelOfServiceLookupValueDetail expected2 = createLevelOfServiceLookupValueDetail("MAT2", "PRO2", "CAT2"); + + List expected = Arrays.asList(expected1, expected2); + + List actual = mapper.levelOfServiceListToLevelOfServiceLookupValueDetailList(levelOfServices); + + assertEquals(expected, actual); + } + + @Test + void toLevelOfServicePage_returnsCorrectDetail() { + LevelOfService levelOfService1 = createLevelOfService("MAT1", "PRO1", "CAT1"); + LevelOfService levelOfService2 = createLevelOfService("MAT2", "PRO2", "CAT2"); + + List levelOfServices = Arrays.asList(levelOfService1, levelOfService2); + Page page = new PageImpl<>(levelOfServices); + + LevelOfServiceLookupDetail expected = new LevelOfServiceLookupDetail(); + expected.setTotalPages(page.getTotalPages()); + expected.setTotalElements((int) page.getTotalElements()); + expected.setNumber(page.getNumber()); + expected.setSize(page.getSize()); + expected.setContent(mapper.levelOfServiceListToLevelOfServiceLookupValueDetailList(page.getContent())); + + LevelOfServiceLookupDetail actual = mapper.toLevelOfServicePage(page); + + assertEquals(expected, actual); + } + + @Test + void proceedingClientInvolvementTypeListToClientInvolvementTypeLookupValueDetailList_returnsCorrectList() { + ProceedingClientInvolvementType proceedingClientInvolvementType1 = createProceedingClientInvolvementType("PRO1", "INV1"); + ProceedingClientInvolvementType proceedingClientInvolvementType2 = createProceedingClientInvolvementType("PRO2", "INV2"); + + List proceedingClientInvolvementTypes = Arrays.asList(proceedingClientInvolvementType1, proceedingClientInvolvementType2); + + ClientInvolvementTypeLookupValueDetail expected1 = createClientInvolvementTypeLookupValueDetail("PRO1", "INV1"); + ClientInvolvementTypeLookupValueDetail expected2 = createClientInvolvementTypeLookupValueDetail("PRO2", "INV2"); + + List expected = Arrays.asList(expected1, expected2); + + List actual = mapper.proceedingClientInvolvementTypeListToClientInvolvementTypeLookupValueDetailList(proceedingClientInvolvementTypes); + + assertEquals(expected, actual); + } + + @Test + void toClientInvolvementTypeLookupDetail_returnsCorrectDetail() { + ProceedingClientInvolvementType proceedingClientInvolvementType1 = createProceedingClientInvolvementType("PRO1", "INV1"); + ProceedingClientInvolvementType proceedingClientInvolvementType2 = createProceedingClientInvolvementType("PRO2", "INV2"); + + List proceedingClientInvolvementTypes = Arrays.asList(proceedingClientInvolvementType1, proceedingClientInvolvementType2); + Page page = new PageImpl<>(proceedingClientInvolvementTypes); + + ClientInvolvementTypeLookupDetail expected = new ClientInvolvementTypeLookupDetail(); + expected.setTotalPages(page.getTotalPages()); + expected.setTotalElements((int) page.getTotalElements()); + expected.setNumber(page.getNumber()); + expected.setSize(page.getSize()); + expected.setContent(mapper.proceedingClientInvolvementTypeListToClientInvolvementTypeLookupValueDetailList(page.getContent())); + + ClientInvolvementTypeLookupDetail actual = mapper.toClientInvolvementTypeLookupDetail(page); + + assertEquals(expected, actual); + } + + @Test + void toOutcomeResultLookupDetail_returnsCorrectDetail() { + OutcomeResultLookupValue value1 = createOutcomeResultLookupValue("1"); + OutcomeResultLookupValue value2 = createOutcomeResultLookupValue("1"); + + List values = Arrays.asList(value1, value2); + Page page = new PageImpl<>(values); + + OutcomeResultLookupDetail expected = new OutcomeResultLookupDetail(); + expected.setTotalPages(page.getTotalPages()); + expected.setTotalElements((int) page.getTotalElements()); + expected.setNumber(page.getNumber()); + expected.setSize(page.getSize()); + expected.setContent(mapper.outcomeResultLookupValueListToOutcomeResultLookupValueDetailList(page.getContent())); + + OutcomeResultLookupDetail actual = mapper.toOutcomeResultLookupDetail(page); + + assertEquals(expected, actual); + } + + @Test + void toStageEndLookupDetail_returnsCorrectDetail() { + StageEndLookupValue value1 = createStageEndLookupValue("1"); + StageEndLookupValue value2 = createStageEndLookupValue("1"); + + List values = Arrays.asList(value1, value2); + Page page = new PageImpl<>(values); + + StageEndLookupDetail expected = new StageEndLookupDetail(); + expected.setTotalPages(page.getTotalPages()); + expected.setTotalElements((int) page.getTotalElements()); + expected.setNumber(page.getNumber()); + expected.setSize(page.getSize()); + expected.setContent(mapper.stageEndLookupValueListToStageEndLookupValueDetailList(page.getContent())); + + StageEndLookupDetail actual = mapper.toStageEndLookupDetail(page); + + assertEquals(expected, actual); + } // Helper methods to create objects + private LevelOfService createLevelOfService(String matterType, String proceedingCode, String categoryOfLawCode) { + LevelOfService levelOfService = new LevelOfService(); + LevelOfServiceId id = new LevelOfServiceId(); + id.setMatterType(matterType); + id.setProceedingCode(proceedingCode); + id.setCategoryOfLawCode(categoryOfLawCode); + levelOfService.setId(id); + return levelOfService; + } + + private LevelOfServiceLookupValueDetail createLevelOfServiceLookupValueDetail(String matterType, String proceedingCode, String categoryOfLawCode) { + LevelOfServiceLookupValueDetail detail = new LevelOfServiceLookupValueDetail(); + detail.setMatterType(matterType); + detail.setProceedingCode(proceedingCode); + detail.setCategoryOfLawCode(categoryOfLawCode); + return detail; + } + + private MatterType createMatterType(String matterTypeCode, String description, String categoryOfLawCode) { + MatterType matterType = new MatterType(); + matterType.setMatterType(matterTypeCode); + matterType.setDescription(description); + matterType.setCategoryOfLawCode(categoryOfLawCode); + return matterType; + } + + private MatterTypeLookupValueDetail createMatterTypeLookupValueDetail(String matterTypeCode, String description, String categoryOfLawCode) { + MatterTypeLookupValueDetail detail = new MatterTypeLookupValueDetail(); + detail.setMatterType(matterTypeCode); + detail.setDescription(description); + detail.setCategoryOfLawCode(categoryOfLawCode); + return detail; + } + + private ProceedingClientInvolvementType createProceedingClientInvolvementType(String proceedingCode, String clientInvolvementType) { + ProceedingClientInvolvementType proceedingClientInvolvementType = new ProceedingClientInvolvementType(); + ProceedingClientInvolvementTypeId id = new ProceedingClientInvolvementTypeId(); + id.setProceedingCode(proceedingCode); + id.setClientInvolvementType(clientInvolvementType); + proceedingClientInvolvementType.setId(id); + return proceedingClientInvolvementType; + } + + private ClientInvolvementTypeLookupValueDetail createClientInvolvementTypeLookupValueDetail(String proceedingCode, String clientInvolvementType) { + ClientInvolvementTypeLookupValueDetail detail = new ClientInvolvementTypeLookupValueDetail(); + detail.setProceedingCode(proceedingCode); + detail.setClientInvolvementType(clientInvolvementType); + return detail; + } + private OrganisationRelationshipToCaseLookupValue createOrganisationRelationshipToCaseLookupvalue(String suffix) { OrganisationRelationshipToCaseLookupValue organisationRelationshipToCaseLookupValue = new OrganisationRelationshipToCaseLookupValue(); organisationRelationshipToCaseLookupValue.setCode("code" + suffix); diff --git a/data-service/src/test/java/uk/gov/laa/ccms/data/service/LookupServiceTest.java b/data-service/src/test/java/uk/gov/laa/ccms/data/service/LookupServiceTest.java index 8cf2cdd2..0c556b4a 100644 --- a/data-service/src/test/java/uk/gov/laa/ccms/data/service/LookupServiceTest.java +++ b/data-service/src/test/java/uk/gov/laa/ccms/data/service/LookupServiceTest.java @@ -1,6 +1,9 @@ package uk.gov.laa.ccms.data.service; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; import java.util.Collections; @@ -8,6 +11,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.data.domain.Example; import org.springframework.data.domain.ExampleMatcher; @@ -21,10 +25,15 @@ import uk.gov.laa.ccms.data.entity.CategoryOfLawLookupValue; import uk.gov.laa.ccms.data.entity.CommonLookupValue; import uk.gov.laa.ccms.data.entity.CountryLookupValue; +import uk.gov.laa.ccms.data.entity.LevelOfService; +import uk.gov.laa.ccms.data.entity.LevelOfServiceId; +import uk.gov.laa.ccms.data.entity.MatterType; import uk.gov.laa.ccms.data.entity.OrganisationRelationshipToCaseLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValue; import uk.gov.laa.ccms.data.entity.OutcomeResultLookupValueId; import uk.gov.laa.ccms.data.entity.PersonRelationshipToCaseLookupValue; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementType; +import uk.gov.laa.ccms.data.entity.ProceedingClientInvolvementTypeId; import uk.gov.laa.ccms.data.entity.StageEndLookupValue; import uk.gov.laa.ccms.data.entity.StageEndLookupValueId; import uk.gov.laa.ccms.data.mapper.LookupMapper; @@ -32,7 +41,10 @@ import uk.gov.laa.ccms.data.model.AwardTypeLookupDetail; import uk.gov.laa.ccms.data.model.CaseStatusLookupDetail; import uk.gov.laa.ccms.data.model.CategoryOfLawLookupDetail; +import uk.gov.laa.ccms.data.model.ClientInvolvementTypeLookupDetail; import uk.gov.laa.ccms.data.model.CommonLookupDetail; +import uk.gov.laa.ccms.data.model.LevelOfServiceLookupDetail; +import uk.gov.laa.ccms.data.model.MatterTypeLookupDetail; import uk.gov.laa.ccms.data.model.OutcomeResultLookupDetail; import uk.gov.laa.ccms.data.model.RelationshipToCaseLookupDetail; import uk.gov.laa.ccms.data.model.StageEndLookupDetail; @@ -42,9 +54,12 @@ import uk.gov.laa.ccms.data.repository.CategoryOfLawLookupValueRepository; import uk.gov.laa.ccms.data.repository.CommonLookupValueRepository; import uk.gov.laa.ccms.data.repository.CountryLookupValueRepository; +import uk.gov.laa.ccms.data.repository.LevelOfServiceRepository; +import uk.gov.laa.ccms.data.repository.MatterTypeRepository; import uk.gov.laa.ccms.data.repository.OrganisationRelationshipToCaseLookupValueRepository; import uk.gov.laa.ccms.data.repository.OutcomeResultLookupValueRepository; import uk.gov.laa.ccms.data.repository.PersonRelationshipToCaseLookupValueRepository; +import uk.gov.laa.ccms.data.repository.ProceedingClientInvolvementTypeRepository; import uk.gov.laa.ccms.data.repository.StageEndLookupValueRepository; @ExtendWith(MockitoExtension.class) @@ -82,6 +97,15 @@ class LookupServiceTest { @Mock private CategoryOfLawLookupValueRepository categoryOfLawLookupValueRepository; + @Mock + private MatterTypeRepository matterTypeRepository; + + @Mock + private ProceedingClientInvolvementTypeRepository proceedingClientInvolvementTypeRepository; + + @Mock + private LevelOfServiceRepository levelOfServiceRepository; + @Mock private LookupMapper lookupMapper; @@ -428,4 +452,81 @@ void getCategoryOfLawValues_returnsPageOfValues() { assertEquals(expectedResponse, actualResponse); } + + @Test + void getMatterTypeLookupValues_returnsPageOfMatterTypeValues() { + String description = "desc"; + String matterType = "MAT1"; + String categoryOfLaw = "CAT1"; + Pageable pageable = Pageable.unpaged(); + + MatterType matterTypeEntity = new MatterType(); + matterTypeEntity.setDescription(description); + matterTypeEntity.setMatterType(matterType); + matterTypeEntity.setCategoryOfLawCode(categoryOfLaw); + + Page expectedPage = new PageImpl<>( + Collections.singletonList(matterTypeEntity)); + MatterTypeLookupDetail expectedResponse = new MatterTypeLookupDetail(); + + when(matterTypeRepository.findAll(Example.of(matterTypeEntity), pageable)).thenReturn(expectedPage); + when(lookupMapper.toMatterTypeLookupDetail(expectedPage)).thenReturn(expectedResponse); + + MatterTypeLookupDetail actualResponse = lookupService.getMatterTypeLookupValues( + description, matterType, categoryOfLaw, pageable); + + assertEquals(expectedResponse, actualResponse); + } + + @Test + void getClientInvolvementTypeLookupValues_returnsPageOfClientInvolvementTypeValues() { + String proceedingCode = "PRO1"; + String clientInvolvementType = "INV1"; + Pageable pageable = Pageable.unpaged(); + + ProceedingClientInvolvementType proceedingClientInvolvementTypeEntity = new ProceedingClientInvolvementType(); + proceedingClientInvolvementTypeEntity.setId(new ProceedingClientInvolvementTypeId()); + proceedingClientInvolvementTypeEntity.getId().setProceedingCode(proceedingCode); + proceedingClientInvolvementTypeEntity.getId().setClientInvolvementType(clientInvolvementType); + + Page expectedPage = new PageImpl<>( + Collections.singletonList(proceedingClientInvolvementTypeEntity)); + ClientInvolvementTypeLookupDetail expectedResponse = new ClientInvolvementTypeLookupDetail(); + + when(proceedingClientInvolvementTypeRepository.findAll(Example.of(proceedingClientInvolvementTypeEntity), pageable)).thenReturn(expectedPage); + when(lookupMapper.toClientInvolvementTypeLookupDetail(expectedPage)).thenReturn(expectedResponse); + + ClientInvolvementTypeLookupDetail actualResponse = lookupService.getClientInvolvementTypeLookupValues( + proceedingCode, clientInvolvementType, pageable); + + assertEquals(expectedResponse, actualResponse); + } + + @Test + void getLevelOfServiceLookupValues_returnsPageOfLevelOfServiceValues() { + String proceedingCode = "PRO1"; + String matterType = "MAT1"; + String categoryOfLaw = "CAT1"; + Pageable pageable = Pageable.unpaged(); + + LevelOfServiceId levelOfServiceId = new LevelOfServiceId(); + levelOfServiceId.setMatterType(matterType); + levelOfServiceId.setProceedingCode(proceedingCode); + levelOfServiceId.setCategoryOfLawCode(categoryOfLaw); + + LevelOfService levelOfServiceEntity = new LevelOfService(); + levelOfServiceEntity.setId(levelOfServiceId); + + Page expectedPage = new PageImpl<>( + Collections.singletonList(levelOfServiceEntity)); + LevelOfServiceLookupDetail expectedResponse = new LevelOfServiceLookupDetail(); + + when(levelOfServiceRepository.findAll(Example.of(levelOfServiceEntity), pageable)).thenReturn(expectedPage); + when(lookupMapper.toLevelOfServicePage(expectedPage)).thenReturn(expectedResponse); + + LevelOfServiceLookupDetail actualResponse = lookupService.getLevelOfServiceLookupValues( + proceedingCode, matterType, categoryOfLaw, pageable); + + assertEquals(expectedResponse, actualResponse); + } } diff --git a/data-service/src/test/java/uk/gov/laa/ccms/data/service/ProceedingServiceTest.java b/data-service/src/test/java/uk/gov/laa/ccms/data/service/ProceedingServiceTest.java index e4643d09..a5761dfd 100644 --- a/data-service/src/test/java/uk/gov/laa/ccms/data/service/ProceedingServiceTest.java +++ b/data-service/src/test/java/uk/gov/laa/ccms/data/service/ProceedingServiceTest.java @@ -8,10 +8,13 @@ import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; +import java.util.ArrayList; import java.util.Collections; import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -83,7 +86,57 @@ void getProceedings_returnsPageOfProceeding() { ProceedingDetails actualResponse = proceedingService.getProceedings( proceeding.getCategoryOfLawCode(), proceeding.getMatterType(), - proceeding.getAmendmentOnly(), proceeding.getEnabled(), pageable); + proceeding.getAmendmentOnly(), proceeding.getEnabled(), proceeding.getLarScope(), pageable); + + assertEquals(expectedResponse, actualResponse); + } + + @ParameterizedTest + @CsvSource(value = { + "true, Y, true, Y", + "true, Y, false, N", + "false, N, true, Y", + "false, N, false, N", + "null, null, true, Y", + "null, null, false, N", + "true, Y, null, null", + "false, N, null, null", + "null, null, null, null" + }, nullValues = "null") + void getLeadProceedings_returnsPageOfLeadProceeding( + Boolean amendmentOnly, + String expectedAmendmentOnlyString, + Boolean enabled, + String expectedEnabledString) { + String categoryOfLaw = "CAT1"; + String matterType = "MAT1"; + String appOrCertType = "APP1"; + String larScope = "SCOPE1"; + Pageable pageable = Pageable.unpaged(); + + Proceeding proceeding = new Proceeding(); + proceeding.setCategoryOfLawCode(categoryOfLaw); + proceeding.setMatterType(matterType); + proceeding.setEnabled(enabled); + proceeding.setAmendmentOnly(amendmentOnly); + proceeding.setLarScope(larScope); + + Page expectedPage = new PageImpl<>( + Collections.singletonList(proceeding)); + ProceedingDetails expectedResponse = new ProceedingDetails(); + + when(proceedingRepository.findAllLeadProceedings( + categoryOfLaw, + matterType, + expectedAmendmentOnlyString, + expectedEnabledString, + larScope, + appOrCertType, + pageable)).thenReturn(expectedPage); + when(proceedingMapper.toProceedingDetails(expectedPage)).thenReturn(expectedResponse); + + ProceedingDetails actualResponse = proceedingService.getLeadProceedings( + categoryOfLaw, matterType, amendmentOnly, enabled, appOrCertType, larScope, pageable); assertEquals(expectedResponse, actualResponse); } @@ -96,6 +149,7 @@ private Proceeding buildProceeding() { proceeding.setMatterType("MAT1"); proceeding.setEnabled(true); proceeding.setAmendmentOnly(Boolean.TRUE); + proceeding.setLarScope("SCOPE1"); return proceeding; } } \ No newline at end of file