From 3da54334fe8c87d296c9b590c44c8c24c2559a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A9=20L=C3=BAcio=20Jr?= Date: Sun, 16 Feb 2025 05:36:57 -0300 Subject: [PATCH] new API --- pom.xml | 2 +- ...pClientFactory.java => CaeHttpClient.java} | 6 +- .../cae/http_client/HttpRequestBuilder.java | 4 +- .../HttpRequestBuilderForRetrying.java | 2 +- .../cae/http_client/HttpRequestMethod.java | 3 +- .../RetriersByStatusCodeFactory.java | 2 +- .../com/cae/http_client/RetryCounter.java | 2 +- .../AbstractHttpRequestModel.java | 2 - .../ExceptionThrownByHttpRequestChecker.java | 6 -- .../HttpRequestBuilderImplementation.java | 26 +----- .../HttpRequestDeleteMethod.java | 3 +- .../HttpRequestExecutionManager.java | 12 +-- .../implementations/HttpRequestGetMethod.java | 3 +- .../HttpRequestPatchMethod.java | 3 +- .../HttpRequestPostMethod.java | 3 +- .../implementations/HttpRequestPutMethod.java | 3 +- .../HttpResponseStatusCodeChecker.java | 24 ++--- .../RetryCounterImplementation.java | 26 ------ ...RetryNeededOnExceptionThrownException.java | 2 +- .../RetryNeededOnHttpStatusCodeException.java | 2 +- ...actoryTest.java => CaeHttpClientTest.java} | 16 ++-- ...ceptionThrownByHttpRequestCheckerTest.java | 15 ---- .../HttpRequestBuilderImplementationTest.java | 89 +------------------ .../HttpResponseStatusCodeCheckerTest.java | 11 --- 24 files changed, 36 insertions(+), 231 deletions(-) rename src/main/java/com/cae/http_client/{CaeHttpClientFactory.java => CaeHttpClient.java} (68%) delete mode 100644 src/main/java/com/cae/http_client/implementations/RetryCounterImplementation.java rename src/test/java/com/cae/http_client/{CaeHttpClientFactoryTest.java => CaeHttpClientTest.java} (58%) diff --git a/pom.xml b/pom.xml index 15dc13a..fffdd47 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ https://github.com/clean-arch-enablers-project/cae-utils-http-client/blob/main/README.md com.clean-arch-enablers cae-http-client - 1.1.0 + 2.0.0 jar diff --git a/src/main/java/com/cae/http_client/CaeHttpClientFactory.java b/src/main/java/com/cae/http_client/CaeHttpClient.java similarity index 68% rename from src/main/java/com/cae/http_client/CaeHttpClientFactory.java rename to src/main/java/com/cae/http_client/CaeHttpClient.java index f2f150a..14b5037 100644 --- a/src/main/java/com/cae/http_client/CaeHttpClientFactory.java +++ b/src/main/java/com/cae/http_client/CaeHttpClient.java @@ -5,12 +5,12 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class CaeHttpClientFactory { +public class CaeHttpClient { public static final HttpRequestStarter REQUEST_STARTER = new HttpRequestStarterImplementation(); - public static HttpRequestStarter getSingletonClient(){ - return CaeHttpClientFactory.REQUEST_STARTER; + public static HttpRequestStarter getStarter(){ + return CaeHttpClient.REQUEST_STARTER; } } diff --git a/src/main/java/com/cae/http_client/HttpRequestBuilder.java b/src/main/java/com/cae/http_client/HttpRequestBuilder.java index 7707916..d72c994 100644 --- a/src/main/java/com/cae/http_client/HttpRequestBuilder.java +++ b/src/main/java/com/cae/http_client/HttpRequestBuilder.java @@ -1,12 +1,12 @@ package com.cae.http_client; -public interface HttpRequestBuilder extends HttpRequestBuilderForHandlers, HttpRequestBuilderForRetrying{ +public interface HttpRequestBuilder extends HttpRequestBuilderForHandlers{ HttpRequestBuilder headerOf(String key, String value); HttpRequestBuilder headersFactory(HttpRequestHeaderFactory httpRequestHeaderFactory); HttpRequestBuilder pathVariableOf(String pathVariablePlaceholder, String pathVariableValue); HttpRequestBuilder queryParameterOf(String queryParameterName, String queryParameterValue); HttpRequestBuilder proxyAddress(String host, Integer port); - HttpRequestModel finishBuildingModel(); + HttpRequestModel buildRequestModel(); } diff --git a/src/main/java/com/cae/http_client/HttpRequestBuilderForRetrying.java b/src/main/java/com/cae/http_client/HttpRequestBuilderForRetrying.java index 97db6dc..615b132 100644 --- a/src/main/java/com/cae/http_client/HttpRequestBuilderForRetrying.java +++ b/src/main/java/com/cae/http_client/HttpRequestBuilderForRetrying.java @@ -2,7 +2,7 @@ import com.cae.http_client.commons.RetriersByExceptionTypeFactory; -public interface HttpRequestBuilderForRetrying { +interface HttpRequestBuilderForRetrying { HttpRequestBuilder retrierByHttpStatusCode(Integer statusCode, RetrierModel retrierModel); HttpRequestBuilder retriersByHttpStatusCodeFactory(RetriersByStatusCodeFactory retriersByStatusCodeFactory); diff --git a/src/main/java/com/cae/http_client/HttpRequestMethod.java b/src/main/java/com/cae/http_client/HttpRequestMethod.java index 960f96b..1a98888 100644 --- a/src/main/java/com/cae/http_client/HttpRequestMethod.java +++ b/src/main/java/com/cae/http_client/HttpRequestMethod.java @@ -2,10 +2,9 @@ import com.cae.http_client.implementations.AbstractHttpRequestModel; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; public interface HttpRequestMethod { - HttpResponse execute(AbstractHttpRequestModel httpRequestModel) throws RetryNeededOnExceptionThrownException; + HttpResponse execute(AbstractHttpRequestModel httpRequestModel); } diff --git a/src/main/java/com/cae/http_client/RetriersByStatusCodeFactory.java b/src/main/java/com/cae/http_client/RetriersByStatusCodeFactory.java index 8a582e9..0c92e5c 100644 --- a/src/main/java/com/cae/http_client/RetriersByStatusCodeFactory.java +++ b/src/main/java/com/cae/http_client/RetriersByStatusCodeFactory.java @@ -4,5 +4,5 @@ import java.util.Map; -public interface RetriersByStatusCodeFactory extends RetriersFactory> { +interface RetriersByStatusCodeFactory extends RetriersFactory> { } diff --git a/src/main/java/com/cae/http_client/RetryCounter.java b/src/main/java/com/cae/http_client/RetryCounter.java index 7e92cfc..852fa7e 100644 --- a/src/main/java/com/cae/http_client/RetryCounter.java +++ b/src/main/java/com/cae/http_client/RetryCounter.java @@ -1,6 +1,6 @@ package com.cae.http_client; -public interface RetryCounter { +interface RetryCounter { boolean thereIsRetryAvailable(); void decreaseRetriesAvailable(); } diff --git a/src/main/java/com/cae/http_client/implementations/AbstractHttpRequestModel.java b/src/main/java/com/cae/http_client/implementations/AbstractHttpRequestModel.java index 5af11a5..db7a4e7 100644 --- a/src/main/java/com/cae/http_client/implementations/AbstractHttpRequestModel.java +++ b/src/main/java/com/cae/http_client/implementations/AbstractHttpRequestModel.java @@ -20,7 +20,5 @@ public abstract class AbstractHttpRequestModel implements HttpRequestModel { protected HttpResponseHandler genericResponseHandler; protected final Map responseHandlersByStatusCode = new HashMap<>(); protected final Map, ExceptionHandler> exceptionHandlersByExceptionType = new HashMap<>(); - protected final Map retryCountersByStatusCode = new HashMap<>(); - protected final Map, RetryCounter> retryCountersByExceptionType = new HashMap<>(); } diff --git a/src/main/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestChecker.java b/src/main/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestChecker.java index f1ca1cc..ba30f9e 100644 --- a/src/main/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestChecker.java +++ b/src/main/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestChecker.java @@ -1,6 +1,5 @@ package com.cae.http_client.implementations; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -16,11 +15,6 @@ public static ExceptionThrownByHttpRequestChecker of(AbstractHttpRequestModel ht } public void checkOn(Exception e) { - var retryCounterByExceptionType = ofNullable(this.httpRequestModel.retryCountersByExceptionType.get(e.getClass())); - if (retryCounterByExceptionType.isPresent() && retryCounterByExceptionType.get().thereIsRetryAvailable()) { - retryCounterByExceptionType.get().decreaseRetriesAvailable(); - throw new RetryNeededOnExceptionThrownException(e.getClass()); - } var handlerByThisException = ofNullable(this.httpRequestModel.exceptionHandlersByExceptionType.get(e.getClass())); handlerByThisException.ifPresent(handler -> handler.handle(e)); } diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestBuilderImplementation.java b/src/main/java/com/cae/http_client/implementations/HttpRequestBuilderImplementation.java index b9933d2..9132fab 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestBuilderImplementation.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestBuilderImplementation.java @@ -2,7 +2,6 @@ import com.cae.http_client.*; -import com.cae.http_client.commons.RetriersByExceptionTypeFactory; public class HttpRequestBuilderImplementation extends AbstractHttpRequestBuilder { @@ -45,7 +44,7 @@ public HttpRequestBuilder proxyAddress(String host, Integer port) { } @Override - public HttpRequestModel finishBuildingModel() { + public HttpRequestModel buildRequestModel() { return this.httpRequest; } @@ -79,27 +78,4 @@ public HttpRequestBuilder handlersByExceptionTypeFactory(HttpExceptionHandlersBy return this; } - @Override - public HttpRequestBuilder retrierByHttpStatusCode(Integer statusCode, RetrierModel retrierModel) { - this.httpRequest.retryCountersByStatusCode.put(statusCode, RetryCounterImplementation.of(retrierModel)); - return this; - } - - @Override - public HttpRequestBuilder retriersByHttpStatusCodeFactory(RetriersByStatusCodeFactory retriersByStatusCodeFactory) { - retriersByStatusCodeFactory.makeRetriers().forEach((statusCode, retrierModel) -> this.httpRequest.retryCountersByStatusCode.put(statusCode, RetryCounterImplementation.of(retrierModel))); - return this; - } - - @Override - public HttpRequestBuilder retrierByExceptionType(Class exceptionType, RetrierModel retrierModel) { - this.httpRequest.retryCountersByExceptionType.put(exceptionType, RetryCounterImplementation.of(retrierModel)); - return this; - } - - @Override - public HttpRequestBuilder retriersByExceptionTypeFactory(RetriersByExceptionTypeFactory retriersByExceptionTypeFactory) { - retriersByExceptionTypeFactory.makeRetriers().forEach((exceptionType, retrierModel) -> this.httpRequest.retryCountersByExceptionType.put(exceptionType, RetryCounterImplementation.of(retrierModel))); - return this; - } } diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestDeleteMethod.java b/src/main/java/com/cae/http_client/implementations/HttpRequestDeleteMethod.java index 5effe90..51d75d6 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestDeleteMethod.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestDeleteMethod.java @@ -3,12 +3,11 @@ import com.cae.http_client.HttpRequestMethod; import com.cae.http_client.HttpResponse; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; public class HttpRequestDeleteMethod implements HttpRequestMethod { @Override - public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) throws RetryNeededOnExceptionThrownException { + public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) { var finalRequest = FinalHttpRequestFactory.makeFinalRequestForDeleteMethodFrom(httpRequestModel); try { var unwrappedResponse = FinalHttpRequestExecutor.of(httpRequestModel).execute(finalRequest); diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestExecutionManager.java b/src/main/java/com/cae/http_client/implementations/HttpRequestExecutionManager.java index 5dce9fa..868bfaf 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestExecutionManager.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestExecutionManager.java @@ -1,8 +1,6 @@ package com.cae.http_client.implementations; import com.cae.http_client.HttpResponse; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; -import com.cae.http_client.implementations.exceptions.RetryNeededOnHttpStatusCodeException; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -18,13 +16,9 @@ static HttpRequestExecutionManager of(AbstractHttpRequestModel httpRequest){ } protected HttpResponse run() { - try { - var response = this.httpRequest.method.execute(this.httpRequest); - response.ifNeedsHandling(HttpResponseStatusCodeChecker.of(this.httpRequest)::checkOutHandlersFor); - return response; - } catch (RetryNeededOnHttpStatusCodeException | RetryNeededOnExceptionThrownException exception) { - return this.run(); - } + var response = this.httpRequest.method.execute(this.httpRequest); + response.ifNeedsHandling(HttpResponseStatusCodeChecker.of(this.httpRequest)::checkOutHandlersFor); + return response; } } diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestGetMethod.java b/src/main/java/com/cae/http_client/implementations/HttpRequestGetMethod.java index 5e0d80e..621345c 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestGetMethod.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestGetMethod.java @@ -3,12 +3,11 @@ import com.cae.http_client.HttpRequestMethod; import com.cae.http_client.HttpResponse; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; public class HttpRequestGetMethod implements HttpRequestMethod { @Override - public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) throws RetryNeededOnExceptionThrownException { + public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) { var finalRequest = FinalHttpRequestFactory.makeFinalRequestForGetMethodFrom(httpRequestModel); try { var unwrappedResponse = FinalHttpRequestExecutor.of(httpRequestModel).execute(finalRequest); diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestPatchMethod.java b/src/main/java/com/cae/http_client/implementations/HttpRequestPatchMethod.java index d9851a9..b208cd2 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestPatchMethod.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestPatchMethod.java @@ -2,11 +2,10 @@ import com.cae.http_client.HttpRequestMethod; import com.cae.http_client.HttpResponse; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; public class HttpRequestPatchMethod implements HttpRequestMethod { @Override - public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) throws RetryNeededOnExceptionThrownException { + public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) { var finalRequest = FinalHttpRequestFactory.makeFinalRequestForPatchMethodFrom(httpRequestModel); try { var unwrappedResponse = FinalHttpRequestExecutor.of(httpRequestModel).execute(finalRequest); diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestPostMethod.java b/src/main/java/com/cae/http_client/implementations/HttpRequestPostMethod.java index 8e8720d..fd91d91 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestPostMethod.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestPostMethod.java @@ -3,12 +3,11 @@ import com.cae.http_client.HttpRequestMethod; import com.cae.http_client.HttpResponse; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; public class HttpRequestPostMethod implements HttpRequestMethod { @Override - public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) throws RetryNeededOnExceptionThrownException { + public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) { var finalRequest = FinalHttpRequestFactory.makeFinalRequestForPostMethodFrom(httpRequestModel); try { var unwrappedResponse = FinalHttpRequestExecutor.of(httpRequestModel).execute(finalRequest); diff --git a/src/main/java/com/cae/http_client/implementations/HttpRequestPutMethod.java b/src/main/java/com/cae/http_client/implementations/HttpRequestPutMethod.java index 4b4f86c..f5ba5aa 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpRequestPutMethod.java +++ b/src/main/java/com/cae/http_client/implementations/HttpRequestPutMethod.java @@ -3,12 +3,11 @@ import com.cae.http_client.HttpRequestMethod; import com.cae.http_client.HttpResponse; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; public class HttpRequestPutMethod implements HttpRequestMethod { @Override - public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) throws RetryNeededOnExceptionThrownException { + public HttpResponse execute(AbstractHttpRequestModel httpRequestModel) { var finalRequest = FinalHttpRequestFactory.makeFinalRequestForPutMethodFrom(httpRequestModel); try { var unwrappedResponse = FinalHttpRequestExecutor.of(httpRequestModel).execute(finalRequest); diff --git a/src/main/java/com/cae/http_client/implementations/HttpResponseStatusCodeChecker.java b/src/main/java/com/cae/http_client/implementations/HttpResponseStatusCodeChecker.java index 1a5072e..5440783 100644 --- a/src/main/java/com/cae/http_client/implementations/HttpResponseStatusCodeChecker.java +++ b/src/main/java/com/cae/http_client/implementations/HttpResponseStatusCodeChecker.java @@ -3,7 +3,6 @@ import com.cae.http_client.HttpResponse; import com.cae.http_client.HttpResponseHandler; import com.cae.http_client.implementations.exceptions.NoResponseHandlersAvailableForExecutionException; -import com.cae.http_client.implementations.exceptions.RetryNeededOnHttpStatusCodeException; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; @@ -13,30 +12,19 @@ public class HttpResponseStatusCodeChecker { private final AbstractHttpRequestModel httpRequest; - private HttpResponse httpResponse; public static HttpResponseStatusCodeChecker of(AbstractHttpRequestModel httpRequest){ return new HttpResponseStatusCodeChecker(httpRequest); } - public void checkOutHandlersFor(HttpResponse response) throws RetryNeededOnHttpStatusCodeException { - this.httpResponse = response; + public void checkOutHandlersFor(HttpResponse response) { var statusCodeReceived = response.getStatusCode(); - var retryCounterForStatusCodeReceived = ofNullable(this.httpRequest.retryCountersByStatusCode.get(statusCodeReceived)); - if (retryCounterForStatusCodeReceived.isPresent() && retryCounterForStatusCodeReceived.get().thereIsRetryAvailable()){ - retryCounterForStatusCodeReceived.get().decreaseRetriesAvailable(); - throw new RetryNeededOnHttpStatusCodeException(response); - } - this.executeHandlerIfAnyIsPresentForTheResponseReceived(); + var handler = ofNullable(this.httpRequest.responseHandlersByStatusCode.get(statusCodeReceived)) + .orElseGet(() -> this.getGenericHandler(response)); + handler.handle(response); } - private void executeHandlerIfAnyIsPresentForTheResponseReceived() { - var statusCodeReceived = this.httpResponse.getStatusCode(); - var handler = ofNullable(this.httpRequest.responseHandlersByStatusCode.get(statusCodeReceived)).orElseGet(this::getGenericHandler); - handler.handle(this.httpResponse); - } - - private HttpResponseHandler getGenericHandler() { - return ofNullable(this.httpRequest.genericResponseHandler).orElseThrow(() -> new NoResponseHandlersAvailableForExecutionException(this.httpResponse)); + private HttpResponseHandler getGenericHandler(HttpResponse response) { + return ofNullable(this.httpRequest.genericResponseHandler).orElseThrow(() -> new NoResponseHandlersAvailableForExecutionException(response)); } } diff --git a/src/main/java/com/cae/http_client/implementations/RetryCounterImplementation.java b/src/main/java/com/cae/http_client/implementations/RetryCounterImplementation.java deleted file mode 100644 index 918fd74..0000000 --- a/src/main/java/com/cae/http_client/implementations/RetryCounterImplementation.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.cae.http_client.implementations; - -import com.cae.http_client.RetrierModel; -import com.cae.http_client.RetryCounter; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; - -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class RetryCounterImplementation implements RetryCounter { - - private final RetrierModel retrierModel; - - public static RetryCounter of(RetrierModel retrierModel){ - return new RetryCounterImplementation(retrierModel); - } - - @Override - public boolean thereIsRetryAvailable() { - return this.retrierModel.getRetriesRemaining() > 0; - } - - @Override - public void decreaseRetriesAvailable() { - this.retrierModel.setRetriesRemaining(this.retrierModel.getRetriesRemaining()-1); - } -} diff --git a/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnExceptionThrownException.java b/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnExceptionThrownException.java index 8b842a4..46fc60f 100644 --- a/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnExceptionThrownException.java +++ b/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnExceptionThrownException.java @@ -3,7 +3,7 @@ import lombok.Getter; @Getter -public class RetryNeededOnExceptionThrownException extends RuntimeException{ +class RetryNeededOnExceptionThrownException extends RuntimeException{ private final Class exceptionType; diff --git a/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnHttpStatusCodeException.java b/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnHttpStatusCodeException.java index 32e061c..01ade40 100644 --- a/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnHttpStatusCodeException.java +++ b/src/main/java/com/cae/http_client/implementations/exceptions/RetryNeededOnHttpStatusCodeException.java @@ -4,7 +4,7 @@ import lombok.Getter; @Getter -public class RetryNeededOnHttpStatusCodeException extends RuntimeException{ +class RetryNeededOnHttpStatusCodeException extends RuntimeException{ private final HttpResponse httpResponse; diff --git a/src/test/java/com/cae/http_client/CaeHttpClientFactoryTest.java b/src/test/java/com/cae/http_client/CaeHttpClientTest.java similarity index 58% rename from src/test/java/com/cae/http_client/CaeHttpClientFactoryTest.java rename to src/test/java/com/cae/http_client/CaeHttpClientTest.java index 7b0d768..04e2fc8 100644 --- a/src/test/java/com/cae/http_client/CaeHttpClientFactoryTest.java +++ b/src/test/java/com/cae/http_client/CaeHttpClientTest.java @@ -6,27 +6,27 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) -class CaeHttpClientFactoryTest { +class CaeHttpClientTest { @Test void shouldReturnFilledInstance(){ - Assertions.assertNotNull(CaeHttpClientFactory.REQUEST_STARTER); + Assertions.assertNotNull(CaeHttpClient.REQUEST_STARTER); } @Test void shouldReturnSingletonInstanceWhenDirectlyCallingAttribute(){ - var resultFromCallOne = CaeHttpClientFactory.REQUEST_STARTER; - var resultFromCallTwo = CaeHttpClientFactory.REQUEST_STARTER; - var resultFromCallThree = CaeHttpClientFactory.REQUEST_STARTER; + var resultFromCallOne = CaeHttpClient.REQUEST_STARTER; + var resultFromCallTwo = CaeHttpClient.REQUEST_STARTER; + var resultFromCallThree = CaeHttpClient.REQUEST_STARTER; Assertions.assertEquals(resultFromCallOne, resultFromCallTwo); Assertions.assertEquals(resultFromCallTwo, resultFromCallThree); } @Test void shouldReturnSingletonInstanceWhenCallingGetter(){ - var resultFromCallOne = CaeHttpClientFactory.getSingletonClient(); - var resultFromCallTwo = CaeHttpClientFactory.getSingletonClient(); - var resultFromCallThree = CaeHttpClientFactory.getSingletonClient(); + var resultFromCallOne = CaeHttpClient.getStarter(); + var resultFromCallTwo = CaeHttpClient.getStarter(); + var resultFromCallThree = CaeHttpClient.getStarter(); Assertions.assertEquals(resultFromCallOne, resultFromCallTwo); Assertions.assertEquals(resultFromCallTwo, resultFromCallThree); } diff --git a/src/test/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestCheckerTest.java b/src/test/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestCheckerTest.java index 3b1499d..eaf4afb 100644 --- a/src/test/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestCheckerTest.java +++ b/src/test/java/com/cae/http_client/implementations/ExceptionThrownByHttpRequestCheckerTest.java @@ -1,8 +1,6 @@ package com.cae.http_client.implementations; -import com.cae.http_client.RetrierModel; import com.cae.http_client.implementations.exceptions.JsonProcessingRuntimeException; -import com.cae.http_client.implementations.exceptions.RetryNeededOnExceptionThrownException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -20,10 +18,7 @@ class ExceptionThrownByHttpRequestCheckerTest { @BeforeEach void setUp(){ this.abstractHttpRequestModel = HttpRequestModelImplementation.of("http://localhost:8080/tutstuts", new HttpRequestGetMethod()); - this.abstractHttpRequestModel.retryCountersByExceptionType.put(RuntimeException.class, RetryCounterImplementation.of(RetrierModel.withLimitOf(4))); this.abstractHttpRequestModel.exceptionHandlersByExceptionType.put(Exception.class, this::doNothing); - this.abstractHttpRequestModel.retryCountersByExceptionType.put(Exception.class, RetryCounterImplementation.of(RetrierModel.withLimitOf(4))); - this.abstractHttpRequestModel.retryCountersByExceptionType.put(ClassNotFoundException.class, RetryCounterImplementation.of(RetrierModel.withLimitOf(4))); } private void doNothing(Exception exception) { } @@ -34,16 +29,6 @@ void shouldNotReturnNullReferenceWhenStaticConstructorInvoked(){ Assertions.assertNotNull(ExceptionThrownByHttpRequestChecker.of(this.abstractHttpRequestModel)); } - @Test - @DisplayName("Should throw RetryNeededOnExceptionThrownException") - void shouldThrowRetryNeededOnExceptionThrownException(){ - Arrays.asList(new ClassNotFoundException(), new Exception(), new RuntimeException()).forEach(exceptionThrown -> { - var checker = ExceptionThrownByHttpRequestChecker.of(this.abstractHttpRequestModel); - Assertions.assertThrows(RetryNeededOnExceptionThrownException.class, () -> checker.checkOn(exceptionThrown)); - }); - - } - @Test @DisplayName("Should not throw RetryNeededOnExceptionThrownException") void shouldNotThrowRetryNeededOnExceptionThrownException(){ diff --git a/src/test/java/com/cae/http_client/implementations/HttpRequestBuilderImplementationTest.java b/src/test/java/com/cae/http_client/implementations/HttpRequestBuilderImplementationTest.java index 6b00615..2f023bd 100644 --- a/src/test/java/com/cae/http_client/implementations/HttpRequestBuilderImplementationTest.java +++ b/src/test/java/com/cae/http_client/implementations/HttpRequestBuilderImplementationTest.java @@ -118,7 +118,7 @@ void shouldReturnBuilderInstanceWhenFinishingMethodOfAddingQueryParam(){ void shouldFinishBuildingProcessReturningRequestModelInstance(){ var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); var builder = HttpRequestBuilderImplementation.of(request); - var resultFromBuilding = builder.finishBuildingModel(); + var resultFromBuilding = builder.buildRequestModel(); Assertions.assertNotNull(resultFromBuilding); Assertions.assertEquals(request, resultFromBuilding); } @@ -231,54 +231,6 @@ void shouldReturnBuilderInstanceWhenFinishingMethodOfAddingResponseHandlerByExce Assertions.assertEquals(builder, returnedBuilder); } - @Test - @DisplayName("Should add retrier by status code correctly") - void shouldAddRetrierByHttpStatusCodeCorrectly(){ - var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); - var builder = HttpRequestBuilderImplementation.of(request); - var retrier = RetrierModel.withLimitOf(4); - var statusCode = 503; - builder.retrierByHttpStatusCode(statusCode, retrier); - Assertions.assertFalse(request.retryCountersByStatusCode.isEmpty()); - Assertions.assertTrue(request.retryCountersByStatusCode.get(statusCode).thereIsRetryAvailable()); - } - - @Test - @DisplayName("Should return builder instance when finishing method of adding retrier by status code") - void shouldReturnBuilderInstanceWhenFinishingMethodOfAddingRetrierByHttpStatusCode(){ - var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); - var builder = HttpRequestBuilderImplementation.of(request); - var retrier = RetrierModel.withLimitOf(4); - var statusCode = 503; - var returnedBuilder = builder.retrierByHttpStatusCode(statusCode, retrier); - Assertions.assertNotNull(returnedBuilder); - Assertions.assertEquals(builder, returnedBuilder); - } - - @Test - @DisplayName("Should add retrier by exception type correctly") - void shouldAddRetrierByExceptionTypeCorrectly(){ - var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); - var builder = HttpRequestBuilderImplementation.of(request); - var retrier = RetrierModel.withLimitOf(4); - var exceptionType = RuntimeException.class; - builder.retrierByExceptionType(exceptionType, retrier); - Assertions.assertFalse(request.retryCountersByExceptionType.isEmpty()); - Assertions.assertTrue(request.retryCountersByExceptionType.get(exceptionType).thereIsRetryAvailable()); - } - - @Test - @DisplayName("Should return builder instance when finishing method of adding retrier by exception type") - void shouldReturnBuilderInstanceWhenFinishingMethodOfAddingRetrierByExceptionType(){ - var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); - var builder = HttpRequestBuilderImplementation.of(request); - var retrier = RetrierModel.withLimitOf(4); - var exceptionType = RuntimeException.class; - var returnedBuilder = builder.retrierByExceptionType(exceptionType, retrier); - Assertions.assertNotNull(returnedBuilder); - Assertions.assertEquals(builder, returnedBuilder); - } - private static class HttpExceptionHandlersByExceptionTypeFactoryForTestingMatters implements HttpExceptionHandlersByExceptionTypeFactory { static final Class KEY_1 = RuntimeException.class; @@ -318,45 +270,6 @@ void shouldReturnBuilderInstanceWhenFinishingMethodOfAddingHttpResponseHandlersB Assertions.assertEquals(builder, returnedBuilder); } - private static class RetriersByStatusCodeFactoryForTestingMatters implements RetriersByStatusCodeFactory { - - static final Integer KEY_1 = 400; - static final Integer KEY_2 = 401; - static final Integer KEY_3 = 403; - - - @Override - public Map makeRetriers() { - var retriers = new HashMap(); - retriers.put(KEY_1, RetrierModel.withLimitOf(4)); - retriers.put(KEY_2, RetrierModel.withLimitOf(8)); - retriers.put(KEY_3, RetrierModel.withLimitOf(16)); - return retriers; - } - } - - @Test - @DisplayName("Should add retriers by status code factory correctly") - void shouldAddRetriersByStatusCodeFactoryCorrectly(){ - var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); - var builder = HttpRequestBuilderImplementation.of(request); - builder.retriersByHttpStatusCodeFactory(new RetriersByStatusCodeFactoryForTestingMatters()); - Arrays.asList(RetriersByStatusCodeFactoryForTestingMatters.KEY_1, - RetriersByStatusCodeFactoryForTestingMatters.KEY_2, - RetriersByStatusCodeFactoryForTestingMatters.KEY_3) - .forEach(key -> Assertions.assertNotNull(request.retryCountersByStatusCode.get(key))); - } - - @Test - @DisplayName("Should return builder instance when finishing method of adding retriers by status code factory") - void shouldReturnBuilderInstanceWhenFinishingMethodOfAddingRetriersByStatusCodeFactory(){ - var request = HttpRequestModelImplementation.of("http://localhost:8080/users", new HttpRequestGetMethod()); - var builder = HttpRequestBuilderImplementation.of(request); - var returnedBuilder = builder.retriersByHttpStatusCodeFactory(new RetriersByStatusCodeFactoryForTestingMatters()); - Assertions.assertNotNull(returnedBuilder); - Assertions.assertEquals(builder, returnedBuilder); - } - @Test @DisplayName("Should set proxy address to the request model") void shouldSetProxyAddressToTheRequestModel(){ diff --git a/src/test/java/com/cae/http_client/implementations/HttpResponseStatusCodeCheckerTest.java b/src/test/java/com/cae/http_client/implementations/HttpResponseStatusCodeCheckerTest.java index 46070f5..3139581 100644 --- a/src/test/java/com/cae/http_client/implementations/HttpResponseStatusCodeCheckerTest.java +++ b/src/test/java/com/cae/http_client/implementations/HttpResponseStatusCodeCheckerTest.java @@ -1,9 +1,7 @@ package com.cae.http_client.implementations; import com.cae.http_client.HttpResponse; -import com.cae.http_client.RetrierModel; import com.cae.http_client.implementations.exceptions.NoResponseHandlersAvailableForExecutionException; -import com.cae.http_client.implementations.exceptions.RetryNeededOnHttpStatusCodeException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -35,15 +33,6 @@ void shouldThrowParameterizedExceptionTypeForTheReceivedStatusCodeWhenThereIsNoR Assertions.assertThrows(RuntimeException.class, () -> this.httpResponseStatusCodeChecker.checkOutHandlersFor(this.response)); } - @Test - @DisplayName("Should throw RetryNeededOnHttpStatusCodeException for the received status code when there is retrier set") - void shouldThrowRetryNeededOnHttpStatusCodeExceptionForTheReceivedStatusCodeWhenThereIsRetrierSet(){ - Mockito.when(this.response.getStatusCode()).thenReturn(400); - this.httpRequestModel.responseHandlersByStatusCode.put(400, httpResponse -> {throw new RuntimeException();}); - this.httpRequestModel.retryCountersByStatusCode.put(400, RetryCounterImplementation.of(RetrierModel.withLimitOf(4))); - Assertions.assertThrows(RetryNeededOnHttpStatusCodeException.class, () -> this.httpResponseStatusCodeChecker.checkOutHandlersFor(this.response)); - } - @Test @DisplayName("Should throw no response handlers available for execution exception") void shouldThrowNoResponseHandlersAvailableForExecutionException(){