Skip to content

Commit

Permalink
prepare egvp rest client
Browse files Browse the repository at this point in the history
  • Loading branch information
ekl176 committed Dec 20, 2024
1 parent cd79077 commit 40deae0
Show file tree
Hide file tree
Showing 7 changed files with 125 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package de.bund.digitalservice.a2j.config;

import de.bund.digitalservice.a2j.service.egvp.EgvpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;

@Configuration
public class EgvpClientConfig {

@Bean
public EgvpClient egvpClient(@Value("egvp.client.baseUri") String baseUri) {
RestTemplate restClient =
new RestTemplateBuilder()
.errorHandler(new DefaultResponseErrorHandler())
.rootUri(baseUri)
.build();

return new EgvpClient(restClient);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package de.bund.digitalservice.a2j.service.egvp.DTO;

public record GetVersionResponse(String version) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package de.bund.digitalservice.a2j.service.egvp.DTO;

public record ResponseError(String responseCode, String errorDetail, String errorDescription) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package de.bund.digitalservice.a2j.service.egvp;

import de.bund.digitalservice.a2j.service.egvp.DTO.GetVersionResponse;
import de.bund.digitalservice.a2j.service.egvp.DTO.ResponseError;
import java.util.Objects;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;

public class EgvpClient {
private final RestTemplate client;

public EgvpClient(RestTemplate client) {
this.client = client;
}

public GetVersionResponse getVersion() throws EgvpClientException, HttpClientErrorException {
try {
return this.client.getForEntity("/getVersion", GetVersionResponse.class).getBody();
} catch (HttpClientErrorException e) {
ResponseError error = e.getResponseBodyAs(ResponseError.class);

if (Objects.isNull(error)) {
throw e;
} else {
throw new EgvpClientException(error.responseCode());
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package de.bund.digitalservice.a2j.service.egvp;

public class EgvpClientException extends RuntimeException {
public EgvpClientException(String message) {
super(message);
}
}
3 changes: 3 additions & 0 deletions src/main/resources/application-local.yaml.example
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ fitConnect:
name: Simple Dummy Service
jsonUri: https://schema.fitko.de/fim/s17000717_1.0.schema.json
callbackSecret: s3cr3t
egvp:
client:
baseUri: "localhost:8088"
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package de.bund.digitalservice.a2j.integration;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;

import de.bund.digitalservice.a2j.service.egvp.DTO.GetVersionResponse;
import de.bund.digitalservice.a2j.service.egvp.EgvpClient;
import de.bund.digitalservice.a2j.service.egvp.EgvpClientException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Tag("integration")
public class EgvpClientIntegrationTest {

private EgvpClient client;

private MockRestServiceServer mockServer;

@BeforeEach
void setup() {
RestTemplate restTemplate = new RestTemplateBuilder().rootUri("http://localhost:8088").build();
this.client = new EgvpClient(restTemplate);
this.mockServer = MockRestServiceServer.createServer(restTemplate);
}

@Test
void getVersion() {
mockServer
.expect(requestTo("http://localhost:8088/getVersion"))
.andRespond(
withSuccess(
"""
{
"version":"6.0.1"
}
""",
MediaType.APPLICATION_JSON));
GetVersionResponse res = null;

try {
res = client.getVersion();
} catch (EgvpClientException e) {
throw new RuntimeException(e);
}

assertEquals(new GetVersionResponse("6.0.1"), res);
}
}

0 comments on commit 40deae0

Please sign in to comment.