Skip to content

Commit 9ce2996

Browse files
AMP-168 - added client for material service.
1 parent a0a3161 commit 9ce2996

File tree

9 files changed

+132
-1
lines changed

9 files changed

+132
-1
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ apply {
1818
from("$rootDir/gradle/dependencies/java-core.gradle")
1919
from("$rootDir/gradle/dependencies/spring-core.gradle")
2020
from("$rootDir/gradle/dependencies/spring-db.gradle")
21+
from("$rootDir/gradle/dependencies/spring-cloud.gradle")
2122

2223
from("$rootDir/gradle/github/repositories.gradle")
2324
from("$rootDir/gradle/github/java.gradle")
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
dependencyManagement {
2+
imports {
3+
mavenBom "org.springframework.cloud:spring-cloud-dependencies:2025.1.0"
4+
}
5+
}
6+
7+
dependencies {
8+
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
9+
10+
testImplementation 'org.wiremock.integrations:wiremock-spring-boot:3.2.0'
11+
}

src/main/java/uk/gov/hmcts/cp/subscription/Application.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.cloud.openfeign.EnableFeignClients;
56

7+
@EnableFeignClients
68
@SpringBootApplication
7-
89
public class Application {
910

1011
public static void main(final String[] args) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package uk.gov.hmcts.cp.subscription.clients;
2+
3+
import org.springframework.cloud.openfeign.FeignClient;
4+
import org.springframework.web.bind.annotation.GetMapping;
5+
import org.springframework.web.bind.annotation.PathVariable;
6+
import uk.gov.hmcts.cp.subscription.clients.model.MaterialResponse;
7+
8+
import java.util.UUID;
9+
10+
@FeignClient(
11+
name = "material-service",
12+
url = "${material-service.url}"
13+
)
14+
public interface MaterialService {
15+
16+
@GetMapping("/material-query-api/query/api/rest/material/material/{materialId}/metadata")
17+
MaterialResponse getByMaterialId(@PathVariable UUID materialId);
18+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package uk.gov.hmcts.cp.subscription.clients.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import jakarta.validation.constraints.NotNull;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
10+
import java.time.OffsetDateTime;
11+
import java.util.UUID;
12+
13+
@Getter
14+
@NoArgsConstructor
15+
@AllArgsConstructor
16+
public class MaterialResponse {
17+
18+
@NotNull
19+
@JsonProperty("materialId")
20+
private UUID materialId;
21+
22+
@JsonProperty("alfrescoAssetId")
23+
private UUID alfrescoAssetId;
24+
25+
@JsonProperty("fileName")
26+
private String fileName;
27+
28+
@JsonProperty("mimeType")
29+
private String mimeType;
30+
31+
@JsonProperty("materialAddedDate")
32+
@JsonFormat(shape = JsonFormat.Shape.STRING)
33+
private OffsetDateTime materialAddedDate;
34+
}
35+

src/main/resources/application.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
server:
22
port: ${SERVER_PORT:4550}
33

4+
material-service:
5+
url: ${MATERIAL_SERVICE_URL:http://localhost:8081}
6+
47
spring:
58
application:
69
name: service-hmcts-springboot-demo-postgres
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package uk.gov.hmcts.cp.subscription.clients;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.boot.test.context.SpringBootTest;
6+
import org.wiremock.spring.ConfigureWireMock;
7+
import org.wiremock.spring.EnableWireMock;
8+
import uk.gov.hmcts.cp.subscription.clients.model.MaterialResponse;
9+
10+
import java.util.UUID;
11+
12+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
13+
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
14+
15+
@SpringBootTest
16+
@EnableWireMock({@ConfigureWireMock(name = "material-service", baseUrlProperties = "material-service.url")})
17+
class MaterialServiceIntegrationTest {
18+
19+
@Autowired
20+
private MaterialService materialService;
21+
22+
@Test
23+
void should_return_material_by_id() {
24+
25+
UUID materialId = UUID.fromString("6c198796-08bb-4803-b456-fa0c29ca6021");
26+
MaterialResponse response = materialService.getByMaterialId(materialId);
27+
28+
assertThat(response).isNotNull();
29+
assertThat(response.getMaterialId()).isEqualTo(materialId);
30+
assertThat(response.getAlfrescoAssetId()).isEqualTo(UUID.fromString("82257b1b-571d-432e-8871-b0c5b4bd18b1"));
31+
assertThat(response.getMimeType()).isEqualTo("application/pdf");
32+
assertThat(response.getFileName()).isEqualTo("PrisonCourtRegister_20251219083322.pdf");
33+
assertThat(response.getMaterialAddedDate()).isEqualTo("2025-12-19T08:33:29.866Z");
34+
}
35+
36+
@Test
37+
void should_throw_not_found_when_material_does_not_exist() {
38+
UUID materialId = UUID.fromString("6c198796-08bb-4803-b456-fa0c29ca6022");
39+
assertThatThrownBy(() -> materialService.getByMaterialId(materialId))
40+
.isInstanceOf(feign.FeignException.NotFound.class);
41+
}
42+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"materialId": "6c198796-08bb-4803-b456-fa0c29ca6021",
3+
"alfrescoAssetId": "82257b1b-571d-432e-8871-b0c5b4bd18b1",
4+
"fileName": "PrisonCourtRegister_20251219083322.pdf",
5+
"mimeType": "application/pdf",
6+
"materialAddedDate": "2025-12-19T08:33:29.866Z"
7+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"request": {
3+
"method": "GET",
4+
"url": "/material-query-api/query/api/rest/material/material/6c198796-08bb-4803-b456-fa0c29ca6021/metadata"
5+
},
6+
"response": {
7+
"status": 200,
8+
"headers": {
9+
"Content-Type": "application/json"
10+
},
11+
"bodyFileName": "material-response.json"
12+
}
13+
}

0 commit comments

Comments
 (0)