Fix for renamed class

This commit is contained in:
dotasek 2024-10-28 10:45:06 -04:00
parent f82f8764cf
commit b51ac15051
4 changed files with 74 additions and 70 deletions

View File

@ -2,15 +2,11 @@ package org.hl7.fhir.r4b.utils.client.network;
import lombok.Getter;
import lombok.Setter;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import org.hl7.fhir.r4b.model.Bundle;
import org.hl7.fhir.r4b.model.Resource;
import org.hl7.fhir.r4b.utils.client.EFhirClientException;
import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.http.FhirRequest;
import org.hl7.fhir.utilities.http.HTTPRequest;
import org.hl7.fhir.utilities.http.HTTPHeader;
import java.io.IOException;
@ -46,9 +42,9 @@ public class Client {
/*FIXME delete once refactor is done
Request.Builder request = new Request.Builder().method("OPTIONS", null).url(optionsUri.toURL());
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(optionsUri.toURL())
.withMethod(FhirRequest.HttpMethod.OPTIONS);
.withMethod(HTTPRequest.HttpMethod.OPTIONS);
return executeFhirRequest(request, resourceFormat, Collections.emptyList(), message, retryCount, timeout);
}
@ -57,9 +53,9 @@ public class Client {
/*FIXME delete once refactor is done
Request.Builder request = new Request.Builder().url(resourceUri.toURL());
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.GET);
.withMethod(HTTPRequest.HttpMethod.GET);
return executeFhirRequest(request, resourceFormat, headers, message, retryCount, timeout);
}
@ -76,9 +72,9 @@ public class Client {
RequestBody body = RequestBody.create(payload);
Request.Builder request = new Request.Builder().url(resourceUri.toURL()).put(body);
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.PUT)
.withMethod(HTTPRequest.HttpMethod.PUT)
.withBody(payload)
.withContentType(getContentTypeWithDefaultCharset(resourceFormat));
@ -99,9 +95,9 @@ public class Client {
RequestBody body = RequestBody.create(MediaType.parse(resourceFormat + ";charset=" + DEFAULT_CHARSET), payload);
Request.Builder request = new Request.Builder().url(resourceUri.toURL()).post(body);
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.POST)
.withMethod(HTTPRequest.HttpMethod.POST)
.withBody(payload)
.withContentType(getContentTypeWithDefaultCharset(resourceFormat));
@ -112,9 +108,9 @@ public class Client {
/*FIXME delete once refactor is done
Request.Builder request = new Request.Builder().url(resourceUri.toURL()).delete();
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.DELETE);
.withMethod(HTTPRequest.HttpMethod.DELETE);
return executeFhirRequest(request, null, Collections.emptyList(), null, retryCount, timeout)
.isSuccessfulRequest();
}
@ -123,9 +119,9 @@ public class Client {
/*FIXME delete once refactor is done
Request.Builder request = new Request.Builder().url(resourceUri.toURL());
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.GET);
.withMethod(HTTPRequest.HttpMethod.GET);
return executeBundleRequest(request, resourceFormat, Collections.emptyList(), null, retryCount, timeout);
}
@ -137,9 +133,9 @@ public class Client {
RequestBody body = RequestBody.create(MediaType.parse(resourceFormat + ";charset=" + DEFAULT_CHARSET), payload);
Request.Builder request = new Request.Builder().url(resourceUri.toURL()).post(body);
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.POST)
.withMethod(HTTPRequest.HttpMethod.POST)
.withBody(payload)
.withContentType(getContentTypeWithDefaultCharset(resourceFormat));
return executeBundleRequest(request, resourceFormat, Collections.emptyList(), null, retryCount, timeout);
@ -153,9 +149,9 @@ public class Client {
RequestBody body = RequestBody.create(MediaType.parse(resourceFormat + ";charset=" + DEFAULT_CHARSET), payload);
Request.Builder request = new Request.Builder().url(resourceUri.toURL()).post(body);
*/
FhirRequest request = new FhirRequest()
HTTPRequest request = new HTTPRequest()
.withUrl(resourceUri.toURL())
.withMethod(FhirRequest.HttpMethod.POST)
.withMethod(HTTPRequest.HttpMethod.POST)
.withBody(payload)
.withContentType(getContentTypeWithDefaultCharset(resourceFormat));
return executeBundleRequest(request, resourceFormat, headers, message, retryCount, timeout);
@ -165,7 +161,7 @@ public class Client {
return resourceFormat + ";charset=" + DEFAULT_CHARSET;
}
public <T extends Resource> Bundle executeBundleRequest(FhirRequest request, String resourceFormat,
public <T extends Resource> Bundle executeBundleRequest(HTTPRequest request, String resourceFormat,
Iterable<HTTPHeader> headers, String message, int retryCount, long timeout) throws IOException {
return new FhirRequestBuilder(request, base).withLogger(fhirLoggingInterceptor).withResourceFormat(resourceFormat)
.withRetryCount(retryCount).withMessage(message)
@ -173,7 +169,7 @@ public class Client {
.withTimeout(timeout, TimeUnit.MILLISECONDS).executeAsBatch();
}
public <T extends Resource> ResourceRequest<T> executeFhirRequest(FhirRequest request, String resourceFormat,
public <T extends Resource> ResourceRequest<T> executeFhirRequest(HTTPRequest request, String resourceFormat,
Iterable<HTTPHeader> headers, String message, int retryCount, long timeout) throws IOException {
return new FhirRequestBuilder(request, base).withLogger(fhirLoggingInterceptor).withResourceFormat(resourceFormat)
.withRetryCount(retryCount).withMessage(message)

View File

@ -19,7 +19,7 @@ import org.hl7.fhir.r4b.utils.OperationOutcomeUtilities;
import org.hl7.fhir.r4b.utils.ResourceUtilities;
import org.hl7.fhir.r4b.utils.client.EFhirClientException;
import org.hl7.fhir.r4b.utils.client.ResourceFormat;
import org.hl7.fhir.utilities.http.FhirRequest;
import org.hl7.fhir.utilities.http.HTTPRequest;
import org.hl7.fhir.utilities.http.HTTPHeader;
import org.hl7.fhir.utilities.xhtml.XhtmlUtils;
@ -57,13 +57,13 @@ public class FhirRequestBuilder {
private String source;
//TODO this should be the only constructor. There should be no okHttp exposure.
public FhirRequestBuilder(FhirRequest fhirRequest, String source) {
public FhirRequestBuilder(HTTPRequest HTTPRequest, String source) {
this.source = source;
RequestBody body = RequestBody.create(fhirRequest.getBody());
RequestBody body = RequestBody.create(HTTPRequest.getBody());
this.httpRequest = new Request.Builder()
.url(fhirRequest.getUrl())
.method(fhirRequest.getMethod().name(), body);
.url(HTTPRequest.getUrl())
.method(HTTPRequest.getMethod().name(), body);
}
/**

View File

@ -1,79 +1,89 @@
package org.hl7.fhir.r4b.utils.client;
import okhttp3.Headers;
import okhttp3.Request;
import okhttp3.internal.http2.Header;
import org.hl7.fhir.r4b.model.*;
import org.hl7.fhir.r4b.utils.client.network.Client;
import org.hl7.fhir.r4b.utils.client.network.ResourceRequest;
import org.junit.jupiter.api.Assertions;
import org.hl7.fhir.utilities.http.HTTPRequest;
import org.hl7.fhir.utilities.http.HTTPHeader;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
import org.mockito.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertTrue;
class FHIRToolingClientTest {
String TX_ADDR = "http://tx.fhir.org";
Header h1 = new Header("header1", "value1");
Header h2 = new Header("header2", "value2");
Header h3 = new Header("header3", "value3");
HTTPHeader h1 = new HTTPHeader("header1", "value1");
HTTPHeader h2 = new HTTPHeader("header2", "value2");
HTTPHeader h3 = new HTTPHeader("header3", "value3");
HTTPHeader agentHeader = new HTTPHeader("User-Agent", "fhir/test-cases");
private Client mockClient;
private FHIRToolingClient toolingClient;
@Captor
private ArgumentCaptor<Iterable<HTTPHeader>> headersArgumentCaptor;
@BeforeEach
void setUp() throws IOException, URISyntaxException {
MockitoAnnotations.openMocks(this);
mockClient = Mockito.mock(Client.class);
ResourceRequest<Resource> resourceResourceRequest = new ResourceRequest<>(generateBundle(), 200, "");
// GET
Mockito.when(mockClient.issueGetResourceRequest(Mockito.any(URI.class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.anyString(), Mockito.anyLong())).thenReturn(resourceResourceRequest);
ArgumentMatchers.any(), Mockito.anyString(), Mockito.anyLong())).thenReturn(resourceResourceRequest);
Mockito
.when(mockClient.issueGetResourceRequest(Mockito.any(URI.class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.eq("TerminologyCapabilities"), Mockito.anyLong()))
ArgumentMatchers.any(), Mockito.eq("TerminologyCapabilities"), Mockito.anyLong()))
.thenReturn(new ResourceRequest<>(new TerminologyCapabilities(), 200, "location"));
Mockito
.when(mockClient.issueGetResourceRequest(Mockito.any(URI.class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.eq("CapabilitiesStatement"), Mockito.anyLong()))
ArgumentMatchers.any(), Mockito.eq("CapabilitiesStatement"), Mockito.anyLong()))
.thenReturn(new ResourceRequest<>(new CapabilityStatement(), 200, "location"));
Mockito
.when(mockClient.issueGetResourceRequest(Mockito.any(URI.class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.eq("CapabilitiesStatement-Quick"), Mockito.anyLong()))
ArgumentMatchers.any(), Mockito.eq("CapabilitiesStatement-Quick"), Mockito.anyLong()))
.thenReturn(new ResourceRequest<>(new CapabilityStatement(), 200, "location"));
// PUT
Mockito.when(mockClient.issuePutRequest(Mockito.any(URI.class), Mockito.any(byte[].class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.anyString(), Mockito.anyLong())).thenReturn(resourceResourceRequest);
ArgumentMatchers.any(), Mockito.anyString(), Mockito.anyLong())).thenReturn(resourceResourceRequest);
// POST
Mockito.when(mockClient.issuePostRequest(Mockito.any(URI.class), Mockito.any(byte[].class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.anyString(), Mockito.anyLong())).thenReturn(resourceResourceRequest);
ArgumentMatchers.any(), Mockito.anyString(), Mockito.anyLong())).thenReturn(resourceResourceRequest);
Mockito
.when(mockClient.issuePostRequest(Mockito.any(URI.class), Mockito.any(byte[].class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.contains("validate"), Mockito.anyLong()))
ArgumentMatchers.any(), Mockito.contains("validate"), Mockito.anyLong()))
.thenReturn(new ResourceRequest<>(new OperationOutcome(), 200, "location"));
// BUNDLE REQ
Mockito
.when(mockClient.executeBundleRequest(Mockito.any(Request.Builder.class), Mockito.anyString(),
Mockito.any(Headers.class), Mockito.anyString(), Mockito.anyInt(), Mockito.anyLong()))
.when(mockClient.executeBundleRequest(Mockito.any(HTTPRequest.class), Mockito.anyString(),
ArgumentMatchers.any(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyLong()))
.thenReturn(generateBundle());
toolingClient = new FHIRToolingClient(TX_ADDR, "fhir/test-cases");
toolingClient.setClient(mockClient);
}
private ArrayList<Header> getHeaders() {
private List<HTTPHeader> getHeaders() {
return new ArrayList<>(Arrays.asList(h1, h2, h3));
}
private List<HTTPHeader> getHeadersWithAgent() {
return new ArrayList<>(Arrays.asList(h1, h2, h3, agentHeader));
}
private Bundle generateBundle() {
Patient patient = generatePatient();
Observation observation = generateObservation();
@ -115,108 +125,102 @@ class FHIRToolingClientTest {
return observation;
}
private void checkHeaders(Headers argumentCaptorValue) {
getHeaders().forEach(header -> {
// System.out.println("Checking header <" + header.component1().utf8() + ", " + header.component2().utf8() + ">");
Assertions.assertEquals(argumentCaptorValue.get(header.component1().utf8()), header.component2().utf8());
private void checkHeaders(Iterable<HTTPHeader> argumentCaptorValue) {
List<HTTPHeader> capturedHeaders = new ArrayList<>();
argumentCaptorValue.forEach(capturedHeaders::add);
getHeadersWithAgent().forEach(header -> {
assertTrue(capturedHeaders.contains(header));
});
}
@Test
void getTerminologyCapabilities() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.getTerminologyCapabilities();
Mockito.verify(mockClient).issueGetResourceRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.anyString(),
headersArgumentCaptor.capture(), ArgumentMatchers.anyString(), ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void getCapabilitiesStatement() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.getCapabilitiesStatement();
Mockito.verify(mockClient).issueGetResourceRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.anyString(),
headersArgumentCaptor.capture(), ArgumentMatchers.anyString(), ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void getCapabilitiesStatementQuick() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.getCapabilitiesStatementQuick();
Mockito.verify(mockClient).issueGetResourceRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.anyString(),
headersArgumentCaptor.capture(), ArgumentMatchers.anyString(), ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void read() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.read(Patient.class, "id");
Mockito.verify(mockClient).issueGetResourceRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.anyString(),
headersArgumentCaptor.capture(), ArgumentMatchers.anyString(), ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void vread() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.vread(Patient.class, "id", "version");
Mockito.verify(mockClient).issueGetResourceRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.anyString(),
headersArgumentCaptor.capture(), ArgumentMatchers.anyString(), ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void getCanonical() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.getCanonical(Patient.class, "canonicalURL");
Mockito.verify(mockClient).issueGetResourceRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.anyString(),
headersArgumentCaptor.capture(), ArgumentMatchers.anyString(), ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void update() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.update(generatePatient());
Mockito.verify(mockClient).issuePutRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.any(byte[].class),
ArgumentMatchers.anyString(), headersArgumentCaptor.capture(), ArgumentMatchers.anyString(),
ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
@Test
void validate() throws IOException {
ArgumentCaptor<Headers> headersArgumentCaptor = ArgumentCaptor.forClass(Headers.class);
toolingClient.setClientHeaders(getHeaders());
toolingClient.validate(Patient.class, generatePatient(), "id");
Mockito.verify(mockClient).issuePostRequest(ArgumentMatchers.any(URI.class), ArgumentMatchers.any(byte[].class),
ArgumentMatchers.anyString(), headersArgumentCaptor.capture(), ArgumentMatchers.anyString(),
ArgumentMatchers.anyLong());
Headers argumentCaptorValue = headersArgumentCaptor.getValue();
Iterable<HTTPHeader> argumentCaptorValue = headersArgumentCaptor.getValue();
checkHeaders(argumentCaptorValue);
}
}

View File

@ -4,6 +4,7 @@ import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import org.hl7.fhir.r4b.model.OperationOutcome;
import org.hl7.fhir.utilities.http.HTTPHeader;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@ -54,7 +55,10 @@ class FhirRequestBuilderTest {
String headerName2 = "headerName2";
String headerValue2 = "headerValue2";
Headers headers = new Headers.Builder().add(headerName1, headerValue1).add(headerName2, headerValue2).build();
List<HTTPHeader> headers = List.of(
new HTTPHeader(headerName1, headerValue1),
new HTTPHeader(headerName2, headerValue2)
);
Request.Builder request = new Request.Builder().url("http://www.google.com");
FhirRequestBuilder.addHeaders(request, headers);