Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ apply {
from("$rootDir/gradle/dependencies/java-core.gradle")
from("$rootDir/gradle/dependencies/spring-core.gradle")
from("$rootDir/gradle/dependencies/spring-db.gradle")
from("$rootDir/gradle/dependencies/spring-cloud.gradle")

from("$rootDir/gradle/github/repositories.gradle")
from("$rootDir/gradle/github/java.gradle")
Expand Down
11 changes: 11 additions & 0 deletions gradle/dependencies/spring-cloud.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:2025.1.0"
}
}

dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'

testImplementation 'org.wiremock.integrations:wiremock-spring-boot:3.2.0'
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

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

@EnableFeignClients
@SpringBootApplication

public class Application {

public static void main(final String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package uk.gov.hmcts.cp.subscription.clients;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import uk.gov.hmcts.cp.subscription.clients.model.MaterialResponse;

import java.util.UUID;

@FeignClient(
name = "material-client",
url = "${material-client.url}"
)
public interface MaterialClient {

@GetMapping("/material-query-api/query/api/rest/material/material/{materialId}/metadata")
MaterialResponse getByMaterialId(@PathVariable UUID materialId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package uk.gov.hmcts.cp.subscription.clients.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.UUID;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class MaterialResponse {

@NotNull
private UUID materialId;

private UUID alfrescoAssetId;

private String fileName;

private String mimeType;

@JsonFormat(shape = JsonFormat.Shape.STRING)
private LocalDateTime materialAddedDate;
}

3 changes: 3 additions & 0 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
server:
port: ${SERVER_PORT:4550}

material-client:
url: ${MATERIAL_CLIENT_URL:http://localhost:8081}

spring:
application:
name: service-hmcts-springboot-demo-postgres
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package uk.gov.hmcts.cp.subscription.clients;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.wiremock.spring.ConfigureWireMock;
import org.wiremock.spring.EnableWireMock;
import uk.gov.hmcts.cp.subscription.clients.model.MaterialResponse;
import uk.gov.hmcts.cp.subscription.config.TestContainersInitialise;

import java.util.UUID;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;

@SpringBootTest
@ContextConfiguration(initializers = TestContainersInitialise.class)
@EnableWireMock({@ConfigureWireMock(name = "material-client", baseUrlProperties = "material-client.url")})
class MaterialClientIntegrationTest {

@Autowired
private MaterialClient materialClient;

@Test
void should_return_material_by_id() {

final UUID materialId = UUID.fromString("6c198796-08bb-4803-b456-fa0c29ca6021");
MaterialResponse response = materialClient.getByMaterialId(materialId);

assertThat(response).satisfies(resp -> {
assertThat(resp.getMaterialId()).isEqualTo(materialId);
assertThat(resp.getAlfrescoAssetId()).isEqualTo(UUID.fromString("82257b1b-571d-432e-8871-b0c5b4bd18b1"));
assertThat(resp.getMimeType()).isEqualTo("application/pdf");
assertThat(resp.getFileName()).isEqualTo("PrisonCourtRegister_20251219083322.pdf");
});
}

@Test
void should_throw_not_found_when_material_does_not_exist() {
UUID materialId = UUID.fromString("6c198796-08bb-4803-b456-fa0c29ca6022");
assertThatThrownBy(() -> materialClient.getByMaterialId(materialId))
.isInstanceOf(feign.FeignException.NotFound.class);
}
}
7 changes: 7 additions & 0 deletions src/test/resources/__files/material-response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"materialId": "6c198796-08bb-4803-b456-fa0c29ca6021",
"alfrescoAssetId": "82257b1b-571d-432e-8871-b0c5b4bd18b1",
"fileName": "PrisonCourtRegister_20251219083322.pdf",
"mimeType": "application/pdf",
"materialAddedDate": "2025-12-19T08:33:29.866Z"
}
13 changes: 13 additions & 0 deletions src/test/resources/mappings/material-mapping.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"request": {
"method": "GET",
"url": "/material-query-api/query/api/rest/material/material/6c198796-08bb-4803-b456-fa0c29ca6021/metadata"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"bodyFileName": "material-response.json"
}
}
Loading