Skip to content

Commit

Permalink
Support for using external Json ObjectMapper
Browse files Browse the repository at this point in the history
  • Loading branch information
sashirestela committed Nov 19, 2024
1 parent d37fbb4 commit 67c6373
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.sashirestela.cleverclient;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.sashirestela.cleverclient.http.HttpProcessor;
import io.github.sashirestela.cleverclient.http.HttpRequestData;
import io.github.sashirestela.cleverclient.support.Configurator;
Expand Down Expand Up @@ -46,11 +47,12 @@ public class CleverClient {
* @param bodyInspector Function to inspect the Body request parameter.
* @param endsOfStream Texts used to mark the final of streams when handling server sent
* events (SSE). Optional.
* @param objectMapper Provides Json conversions either to and from objects. Optional.
*/
@Builder
public CleverClient(@NonNull String baseUrl, @Singular Map<String, String> headers, HttpClient httpClient,
UnaryOperator<HttpRequestData> requestInterceptor, Consumer<Object> bodyInspector,
@Singular("endOfStream") List<String> endsOfStream) {
@Singular("endOfStream") List<String> endsOfStream, ObjectMapper objectMapper) {
this.baseUrl = baseUrl;
this.headers = Optional.ofNullable(headers).orElse(Map.of());
this.httpClient = Optional.ofNullable(httpClient).orElse(HttpClient.newHttpClient());
Expand All @@ -65,6 +67,7 @@ public CleverClient(@NonNull String baseUrl, @Singular Map<String, String> heade
.build();
Configurator.builder()
.endsOfStream(Optional.ofNullable(endsOfStream).orElse(Arrays.asList()))
.objectMapper(Optional.ofNullable(objectMapper).orElse(new ObjectMapper()))
.build();
logger.debug("CleverClient has been created.");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,34 @@
package io.github.sashirestela.cleverclient.support;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.Singular;

import java.util.List;

@Getter
public class Configurator {

private static Configurator configurator = new Configurator();

@Getter
private List<String> endsOfStream;
private ObjectMapper objectMapper;

@Getter(AccessLevel.NONE)
private boolean wasBuilt = false;

private Configurator() {
}

@Builder
public Configurator(@Singular("endOfStream") List<String> endsOfStream) {
public Configurator(@Singular("endOfStream") List<String> endsOfStream, ObjectMapper objectMapper) {
if (configurator.wasBuilt) {
return;
}
configurator.endsOfStream = endsOfStream;
configurator.objectMapper = objectMapper;
configurator.wasBuilt = true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.type.CollectionType;
import io.github.sashirestela.cleverclient.support.CleverClientException;
import io.github.sashirestela.cleverclient.support.Configurator;

import java.io.IOException;
import java.util.ArrayList;
Expand All @@ -16,7 +17,7 @@

public class JsonUtil {

private static final ObjectMapper objectMapperStrict = new ObjectMapper();
private static final ObjectMapper objectMapperStrict = Configurator.one().getObjectMapper();

private static final ObjectReader objectReaderIgnoringUnknown = objectMapperStrict.reader()
.without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ void shouldImplementInterfaceWhenCallingCreate() {
.baseUrl("https://test")
.header("headerName", "headerValue")
.httpClient(HttpClient.newHttpClient())
.endOfStream("[DONE]")
.build();
var test = cleverClient.create(TestCleverClient.class);
assertNotNull(test);
Expand All @@ -62,8 +61,7 @@ void shouldImplementInterfaceWhenCallingCreate() {
void shouldThrownExceptionWhenTryingToPassAnEmptyBaseUrl() {
var cleverClientBuilder = CleverClient.builder()
.header("headerName", "headerValue")
.httpClient(HttpClient.newHttpClient())
.endOfStream("[DONE]");
.httpClient(HttpClient.newHttpClient());
assertThrows(NullPointerException.class,
cleverClientBuilder::build);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
package io.github.sashirestela.cleverclient.support;

import io.github.sashirestela.cleverclient.support.CleverClientSSE.LineRecord;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;

import java.util.Set;

import static org.junit.jupiter.api.Assertions.assertEquals;

@Order(1)
class CleverClientSSETest {

Set<String> events = Set.of("process", "process2");

@BeforeAll
static void setup() {
Configurator.builder()
.endOfStream("END")
.build();
}

@Test
void shouldReturnExpectedValueWhenRawDataMeetsConditions() {
Object[][] testData = {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.github.sashirestela.cleverclient.support;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;

@Order(1)
class ConfiguratorTest {

@Test
void testBuilder() {
assertThrows(CleverClientException.class, () -> Configurator.one());
Configurator.builder()
.endOfStream("END")
.objectMapper(new ObjectMapper().registerModule(new JavaTimeModule()))
.build();
assertDoesNotThrow(() -> Configurator.one());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import lombok.experimental.SuperBuilder;
import org.junit.jupiter.api.Test;

import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -130,6 +131,13 @@ void shouldThrowExceptionWhenConvertingObjectToMapWithIssues() {
assertThrows(CleverClientException.class, () -> JsonUtil.objectToMap(object));
}

@Test
void shouldHandleLocalDateWhenAnObjectMapperWithTimeModuleIsPassed() {
String expectedJson = "{\"date\":[2024,12,31]}";
String actualJson = JsonUtil.objectToJson(new DateClass(LocalDate.of(2024, 12, 31)));
assertEquals(expectedJson, actualJson);
}

@NoArgsConstructor
@AllArgsConstructor
@Getter
Expand Down Expand Up @@ -199,4 +207,13 @@ static class FailClass {

}

@NoArgsConstructor
@AllArgsConstructor
@Getter
static class DateClass {

private LocalDate date;

}

}

0 comments on commit 67c6373

Please sign in to comment.