From 644253aa4f67d1492171f613e2d7d0636d90b7a2 Mon Sep 17 00:00:00 2001 From: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Date: Mon, 7 Oct 2024 06:28:05 -0300 Subject: [PATCH 1/3] Sort imports to avoid pipeline errors (#2020) Co-authored-by: Matheus Cruz --- .../kie/kogito/examples/CallbackResource.java | 24 ++++++------- .../kogito/examples/RegisterObjectMapper.java | 6 ++-- .../kie/kogito/examples/CallbackRestIT.java | 17 +++++---- .../org/kie/kogito/examples/PrintService.java | 20 +++++------ .../kie/kogito/examples/CallbackRestIT.java | 9 +++-- .../kogito/examples/CompensationRestIT.java | 7 ++-- .../examples/ConsumingEventsOverHttpIT.java | 27 +++++++------- .../kie/kogito/examples/EventsService.java | 20 +++++------ .../kie/kogito/examples/WorkflowResource.java | 20 +++++------ .../kie/kogito/examples/CorrelationIT.java | 12 +++---- .../kie/kogito/examples/EventsService.java | 20 +++++------ .../kie/kogito/examples/WorkflowResource.java | 20 +++++------ .../kie/kogito/examples/CorrelationIT.java | 12 +++---- .../services/RPCCustomFunctionNamespace.java | 13 ++++--- .../sw/services/RPCCustomTypeHandler.java | 13 ++++--- .../examples/sw/custom/CalculatorServer.java | 2 -- .../sw/custom/CalculatorClientTest.java | 5 ++- .../sw/custom/RPCCustomWorkItemHandler.java | 4 +-- .../RPCCustomWorkItemHandlerConfig.java | 3 -- .../org/kie/kogito/examples/CustomRestIT.java | 12 +++---- .../kie/kogito/examples/DataIndexRestIT.java | 11 +++--- .../org/kie/kogito/examples/PrintService.java | 20 +++++------ .../kie/kogito/examples/DataIndexRestIT.java | 11 +++--- .../kie/kogito/examples/DMNGreetRestIT.java | 9 +++-- .../kogito/examples/PublishRestService.java | 4 +-- .../org/kie/kogito/examples/ErrorRestIT.java | 7 ++-- .../examples/ApplicantResource.java | 16 ++++----- .../examples/AvroMarshallerProducer.java | 8 ++--- .../serverless/examples/DecisionResource.java | 4 +-- .../examples/ApplicantWorkflowIT.java | 24 ++++++------- .../kie/kogito/examples/ExpressionRestIT.java | 9 +++-- .../kie/kogito/examples/ForEachRestIT.java | 12 +++---- .../acme/sw/onboarding/model/Appointment.java | 5 ++- .../org/acme/sw/onboarding/model/Doctor.java | 3 +- .../org/acme/sw/onboarding/model/Patient.java | 7 ++-- .../sw/onboarding/model/SymptomSpecialty.java | 3 +- .../sw/onboarding/queries/AssignmentUnit.java | 8 ++--- .../resources/AppointmentResource.java | 10 +++--- .../onboarding/resources/PatientResource.java | 10 +++--- .../sw/onboarding/services/DoctorService.java | 6 ++-- .../onboarding/services/ScheduleService.java | 4 +-- .../services/SymptomSpecialtyService.java | 6 ++-- .../onboarding/queries/AssignmentUnitIT.java | 9 +++-- .../queries/AssignmentUnitPlainTest.java | 9 +++-- .../resources/AppointmentResourceIT.java | 19 +++++----- .../sw/onboarding/resources/OnboardingIT.java | 17 ++++----- .../resources/PatientResourceIT.java | 9 +++-- .../services/ScheduleServiceTest.java | 15 ++++---- .../org/acme/numbers/NumbersResource.java | 9 ++--- .../workflow/functions/RestExampleIT.java | 14 ++++---- .../functions/ClassificationFunction.java | 4 +-- .../examples/functions/CountriesFunction.java | 4 +-- .../functions/PopulationFunction.java | 4 +-- .../services/ClassificationService.java | 4 +-- .../examples/services/CountriesService.java | 4 +-- .../examples/services/PopulationService.java | 4 +-- .../serverless/examples/FunctionsIT.java | 10 +++--- .../examples/RestServiceMockServer.java | 8 ++--- .../serverless/examples/WorkflowIT.java | 5 ++- .../org/kie/kogito/examples/GreetRestIT.java | 7 ++-- .../org/kie/kogito/examples/GreetRestIT.java | 24 ++++++------- .../examples/sw/greeting/GreeterService.java | 10 +++--- .../sw/greeting/GreeterClientTest.java | 18 +++++----- .../kie/kogito/examples/HelloWorldTest.java | 6 ++-- .../aggregator/CloudEventDataFormat.java | 16 ++++----- .../aggregator/CloudEventsConverter.java | 18 ++++------ .../InMemoryQuotesRepositoryProcessor.java | 4 +-- .../aggregator/QuotesAggregationStrategy.java | 1 - .../aggregator/QuotesAggregatorRoute.java | 4 +-- .../aggregator/QuotesRepositoryProcessor.java | 1 - .../aggregator/model/AggregationResponse.java | 1 - .../aggregator/model/BankQuote.java | 3 +- .../resources/QuotesCloudEventsResource.java | 9 ++--- .../aggregator/resources/QuotesResource.java | 4 +-- .../aggregator/resources/ResponseError.java | 3 +- .../aggregator/QuotesAggregatorRouteTest.java | 34 ++++++++---------- .../aggregator/SinkMockTestResource.java | 12 +++---- .../loanbroker/flow/CreditBureauMock.java | 15 ++++---- .../loanbroker/flow/LoanBrokerFlowTest.java | 30 +++++++--------- .../loanbroker/flow/QuotesAggregatorMock.java | 15 ++++---- .../serverless/loanbroker/flow/SinkMock.java | 10 +++--- .../java/org/acme/loanbroker/AppResource.java | 13 +++---- .../org/acme/loanbroker/NewQuoteSocket.java | 14 +++----- .../org/acme/loanbroker/QuotesRepository.java | 14 +++----- .../org/acme/loanbroker/domain/Credit.java | 1 - .../loanbroker/domain/QuotesResponse.java | 3 +- .../org/acme/loanbroker/AppResourceTest.java | 36 +++++++++---------- .../org/kie/kogito/examples/VertxRouter.java | 5 ++- .../subscription/flow/SinkMock.java | 10 +++--- .../subscription/flow/SubscriptionFlowIT.java | 27 +++++++------- .../flow/SubscriptionServiceMock.java | 27 +++++++------- .../InMemorySubscriptionRepository.java | 9 ++--- .../PostgreSqlSubscriptionRepository.java | 23 ++++++------ .../subscription/service/Subscription.java | 5 ++- .../service/SubscriptionResource.java | 16 ++++----- .../service/SubscriptionServiceImpl.java | 5 ++- .../service/SubscriptionResourceIT.java | 13 +++---- .../java/org/acme/AcmeFinancialResource.java | 4 +-- .../main/java/org/acme/ExchangeRatesDB.java | 6 ++-- .../java/org/acme/AcmeExchangeResourceIT.java | 14 ++++---- .../examples/ExchangeWorkflowHelper.java | 4 +-- .../processing/VerifyWorkflowExecutionIT.java | 26 ++++++-------- .../kogito/examples/ParallelStateTest.java | 7 ++-- .../org/kie/kogito/examples/PythonRestIT.java | 9 ++--- .../acme/InMemoryQueryRecordRepository.java | 8 ++--- .../acme/PostgreSqlQueryRecordRepository.java | 12 +++---- .../org/acme/QueryAnswerServiceHelper.java | 13 +++---- .../org/acme/QueryAnswerServiceResource.java | 3 +- .../org/acme/it/QueryAnswerServiceIT.java | 31 ++++++++-------- .../acme/it/WireMockQueryServiceResource.java | 12 +++---- .../java/org/acme/CloudEventsCustomizer.java | 4 +-- .../acme/InMemoryQueryRequestRepository.java | 9 ++--- .../PostgreSqlQueryRequestRepository.java | 20 +++++------ .../java/org/acme/QueryServiceResource.java | 24 ++++++------- .../org/acme/it/QueryServiceResourceIT.java | 14 ++++---- .../org/kie/kogito/examples/MockService.java | 4 +-- .../org/kie/kogito/examples/OrderService.java | 1 - .../kie/kogito/examples/PaymentService.java | 1 - .../kie/kogito/examples/ShippingService.java | 1 - .../org/kie/kogito/examples/StockService.java | 1 - .../kogito/examples/OrderSagaWorkflowIT.java | 9 +++-- .../examples/CountriesClassifierResource.java | 13 +++---- .../kogito/serverless/examples/Country.java | 3 +- .../examples/CountryServiceWorkflowTest.java | 20 +++++------ .../examples/RestCountriesMockServer.java | 14 ++++---- .../java/org/acme/ProfitResourceTest.java | 7 ++-- .../src/test/java/org/acme/MockServices.java | 11 +++--- .../src/test/java/org/acme/StockProfitIT.java | 11 +++--- .../kogito/serverless/ConversationFlowIT.java | 14 ++++---- .../serverless/OperationsMockService.java | 15 ++++---- .../kogito/serverless/ConversationFlowIT.java | 14 ++++---- .../serverless/OperationsMockService.java | 15 ++++---- .../kogito/serverless/ConversationFlowIT.java | 14 ++++---- .../serverless/OperationsMockService.java | 15 ++++---- .../kogito/serverless/ConversationFlowIT.java | 14 ++++---- .../serverless/OperationsMockService.java | 15 ++++---- .../MultiplicationOperation.java | 3 +- .../multiplication/OperationResource.java | 4 +-- .../multiplication/OperationResourceIT.java | 9 +++-- .../temp/subtraction/OperationResource.java | 4 +-- .../subtraction/SubtractionOperation.java | 3 +- .../temp/subtraction/OperationResourceIT.java | 9 +++-- .../org/kie/kogito/examples/HelloTest.java | 9 +++-- .../examples/EventsProducerResource.java | 22 +++++------- .../org/kie/kogito/examples/VertxRouter.java | 5 ++- .../org/kie/kogito/examples/TimeoutIT.java | 9 +++-- .../examples/EventsProducerResource.java | 26 ++++++-------- .../org/kie/kogito/examples/VertxRouter.java | 5 ++- .../org/kie/kogito/examples/TimeoutIT.java | 9 +++-- .../examples/CallbackStateTimeoutsClient.java | 5 ++- .../examples/CloudEventsCustomizer.java | 1 - .../examples/EventStateTimeoutsClient.java | 5 ++- .../examples/EventsProducerResource.java | 5 ++- .../examples/SwitchStateTimeoutsClient.java | 5 ++- .../org/kie/kogito/examples/VertxRouter.java | 5 ++- .../kie/kogito/examples/WorkflowClient.java | 3 +- .../examples/WorkflowTimeoutsClient.java | 5 ++- .../examples/WorkflowsProxyResource.java | 3 +- 158 files changed, 671 insertions(+), 992 deletions(-) diff --git a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/CallbackResource.java b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/CallbackResource.java index 30abcfa768..ed9f08704e 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/CallbackResource.java +++ b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/CallbackResource.java @@ -18,30 +18,26 @@ */ package org.kie.kogito.examples; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.Collections; -import java.util.UUID; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.vertx.core.Vertx; +import io.vertx.ext.web.client.WebClient; +import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.MediaType; - -import jakarta.annotation.PostConstruct; +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.Collections; +import java.util.UUID; import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; -import io.vertx.core.Vertx; -import io.vertx.ext.web.client.WebClient; - @ApplicationScoped @Path("/event") public class CallbackResource { diff --git a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/RegisterObjectMapper.java b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/RegisterObjectMapper.java index 75e227dc9f..6412016e4c 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/RegisterObjectMapper.java +++ b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-event-service/src/main/java/org/kie/kogito/examples/RegisterObjectMapper.java @@ -18,12 +18,10 @@ */ package org.kie.kogito.examples; -import jakarta.enterprise.context.ApplicationScoped; - import com.fasterxml.jackson.databind.ObjectMapper; - import io.cloudevents.jackson.JsonFormat; import io.quarkus.jackson.ObjectMapperCustomizer; +import jakarta.enterprise.context.ApplicationScoped; @ApplicationScoped public class RegisterObjectMapper implements ObjectMapperCustomizer{ @@ -32,4 +30,4 @@ public class RegisterObjectMapper implements ObjectMapperCustomizer{ public void customize(ObjectMapper objectMapper) { objectMapper.registerModule(JsonFormat.getCloudEventJacksonModule()); } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/src/test/java/org/kie/kogito/examples/CallbackRestIT.java b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/src/test/java/org/kie/kogito/examples/CallbackRestIT.java index a70456ebfb..e9b82df8f4 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/src/test/java/org/kie/kogito/examples/CallbackRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/src/test/java/org/kie/kogito/examples/CallbackRestIT.java @@ -18,24 +18,23 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import com.github.tomakehurst.wiremock.WireMockServer; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import static io.restassured.RestAssured.given; import static org.wiremock.webhooks.Webhooks.*; -import org.junit.jupiter.api.BeforeEach; -import org.wiremock.webhooks.Webhooks; +import com.github.tomakehurst.wiremock.WireMockServer; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; import java.util.Collections; import java.util.UUID; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.wiremock.webhooks.Webhooks; @QuarkusIntegrationTest public class CallbackRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java b/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java index d9981b0118..6151660ab6 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java +++ b/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java @@ -18,16 +18,20 @@ */ package org.kie.kogito.examples; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import java.net.URI; import java.time.OffsetDateTime; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.UUID; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - import org.eclipse.microprofile.reactive.messaging.Acknowledgment; import org.eclipse.microprofile.reactive.messaging.Acknowledgment.Strategy; import org.eclipse.microprofile.reactive.messaging.Incoming; @@ -39,14 +43,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; - @ApplicationScoped public class PrintService { diff --git a/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/test/java/org/kie/kogito/examples/CallbackRestIT.java b/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/test/java/org/kie/kogito/examples/CallbackRestIT.java index 4e1c803c0a..a8930aa60e 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/test/java/org/kie/kogito/examples/CallbackRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-callback-quarkus/src/test/java/org/kie/kogito/examples/CallbackRestIT.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.awaitility.Awaitility.await; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest class CallbackRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-compensation-quarkus/src/test/java/org/kie/kogito/examples/CompensationRestIT.java b/serverless-workflow-examples/serverless-workflow-compensation-quarkus/src/test/java/org/kie/kogito/examples/CompensationRestIT.java index 095aa5841f..bd5a7b5954 100644 --- a/serverless-workflow-examples/serverless-workflow-compensation-quarkus/src/test/java/org/kie/kogito/examples/CompensationRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-compensation-quarkus/src/test/java/org/kie/kogito/examples/CompensationRestIT.java @@ -18,13 +18,12 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest public class CompensationRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/src/test/java/org/kie/kogito/examples/ConsumingEventsOverHttpIT.java b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/src/test/java/org/kie/kogito/examples/ConsumingEventsOverHttpIT.java index 8a981fe2ac..6a62a83c4b 100644 --- a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/src/test/java/org/kie/kogito/examples/ConsumingEventsOverHttpIT.java +++ b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/src/test/java/org/kie/kogito/examples/ConsumingEventsOverHttpIT.java @@ -18,29 +18,26 @@ */ package org.kie.kogito.examples; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.Collections; -import java.util.Map; -import java.util.UUID; - -import io.restassured.response.ExtractableResponse; -import io.restassured.response.Response; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.ObjectMapper; - import io.cloudevents.core.builder.CloudEventBuilder; import io.cloudevents.jackson.JsonFormat; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.awaitility.Awaitility.await; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.Collections; +import java.util.Map; +import java.util.UUID; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest class ConsumingEventsOverHttpIT { diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/EventsService.java b/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/EventsService.java index 004e81d958..9d2861c386 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/EventsService.java +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/EventsService.java @@ -18,16 +18,20 @@ */ package org.kie.kogito.examples; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import java.net.URI; import java.time.OffsetDateTime; import java.util.Map; import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - import org.eclipse.microprofile.reactive.messaging.Acknowledgment; import org.eclipse.microprofile.reactive.messaging.Acknowledgment.Strategy; import org.eclipse.microprofile.reactive.messaging.Incoming; @@ -38,14 +42,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; - @ApplicationScoped public class EventsService { diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/WorkflowResource.java b/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/WorkflowResource.java index de6af279ab..f46352db90 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/WorkflowResource.java +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/main/java/org/kie/kogito/examples/WorkflowResource.java @@ -18,27 +18,23 @@ */ package org.kie.kogito.examples; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.Collections; -import java.util.Map; -import java.util.UUID; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.core.Response; - +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.Collections; +import java.util.Map; +import java.util.UUID; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; - /** * Helper class used to facilitate testing using REST */ diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/test/java/org/kie/kogito/examples/CorrelationIT.java b/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/test/java/org/kie/kogito/examples/CorrelationIT.java index 9f8a24fcba..9cd5e76327 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/test/java/org/kie/kogito/examples/CorrelationIT.java +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus-mongodb/src/test/java/org/kie/kogito/examples/CorrelationIT.java @@ -18,19 +18,17 @@ */ package org.kie.kogito.examples; -import java.util.concurrent.atomic.AtomicReference; - -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.notNullValue; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class CorrelationIT { diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/EventsService.java b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/EventsService.java index 004e81d958..9d2861c386 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/EventsService.java +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/EventsService.java @@ -18,16 +18,20 @@ */ package org.kie.kogito.examples; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import java.net.URI; import java.time.OffsetDateTime; import java.util.Map; import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - import org.eclipse.microprofile.reactive.messaging.Acknowledgment; import org.eclipse.microprofile.reactive.messaging.Acknowledgment.Strategy; import org.eclipse.microprofile.reactive.messaging.Incoming; @@ -38,14 +42,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; - @ApplicationScoped public class EventsService { diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/WorkflowResource.java b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/WorkflowResource.java index de6af279ab..f46352db90 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/WorkflowResource.java +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/main/java/org/kie/kogito/examples/WorkflowResource.java @@ -18,27 +18,23 @@ */ package org.kie.kogito.examples; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.Collections; -import java.util.Map; -import java.util.UUID; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.core.Response; - +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.Collections; +import java.util.Map; +import java.util.UUID; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; - /** * Helper class used to facilitate testing using REST */ diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/test/java/org/kie/kogito/examples/CorrelationIT.java b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/test/java/org/kie/kogito/examples/CorrelationIT.java index 9f8a24fcba..9cd5e76327 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/test/java/org/kie/kogito/examples/CorrelationIT.java +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/src/test/java/org/kie/kogito/examples/CorrelationIT.java @@ -18,19 +18,17 @@ */ package org.kie.kogito.examples; -import java.util.concurrent.atomic.AtomicReference; - -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.notNullValue; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class CorrelationIT { diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomFunctionNamespace.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomFunctionNamespace.java index 6ed7e9657e..c4043be46d 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomFunctionNamespace.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomFunctionNamespace.java @@ -18,18 +18,17 @@ */ package org.kie.kogito.examples.sw.services; +import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.NAME; +import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.OPERATION; +import static org.kie.kogito.serverless.workflow.parser.FunctionNamespaceFactory.getFunctionName; + +import io.serverlessworkflow.api.Workflow; +import io.serverlessworkflow.api.functions.FunctionRef; import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory; import org.jbpm.ruleflow.core.factory.WorkItemNodeFactory; import org.kie.kogito.serverless.workflow.functions.WorkItemFunctionNamespace; import org.kie.kogito.serverless.workflow.parser.ParserContext; -import io.serverlessworkflow.api.Workflow; -import io.serverlessworkflow.api.functions.FunctionRef; - -import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.NAME; -import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.OPERATION; -import static org.kie.kogito.serverless.workflow.parser.FunctionNamespaceFactory.getFunctionName; - public class RPCCustomFunctionNamespace extends WorkItemFunctionNamespace{ @Override diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomTypeHandler.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomTypeHandler.java index fc276aa71e..e5705fe327 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomTypeHandler.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-deployment/src/main/java/org/kie/kogito/examples/sw/services/RPCCustomTypeHandler.java @@ -18,18 +18,17 @@ */ package org.kie.kogito.examples.sw.services; +import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.NAME; +import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.OPERATION; +import static org.kie.kogito.serverless.workflow.parser.FunctionTypeHandlerFactory.trimCustomOperation; + +import io.serverlessworkflow.api.Workflow; +import io.serverlessworkflow.api.functions.FunctionDefinition; import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory; import org.jbpm.ruleflow.core.factory.WorkItemNodeFactory; import org.kie.kogito.serverless.workflow.parser.ParserContext; import org.kie.kogito.serverless.workflow.parser.types.WorkItemTypeHandler; -import io.serverlessworkflow.api.Workflow; -import io.serverlessworkflow.api.functions.FunctionDefinition; - -import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.NAME; -import static org.kie.kogito.examples.sw.custom.RPCCustomWorkItemHandler.OPERATION; -import static org.kie.kogito.serverless.workflow.parser.FunctionTypeHandlerFactory.trimCustomOperation; - public class RPCCustomTypeHandler extends WorkItemTypeHandler{ diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/main/java/org/kie/kogito/examples/sw/custom/CalculatorServer.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/main/java/org/kie/kogito/examples/sw/custom/CalculatorServer.java index 75759febaf..4687ec3e94 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/main/java/org/kie/kogito/examples/sw/custom/CalculatorServer.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/main/java/org/kie/kogito/examples/sw/custom/CalculatorServer.java @@ -24,11 +24,9 @@ import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public class CalculatorServer implements Runnable, Closeable { private static final Logger logger = LoggerFactory.getLogger(CalculatorServer.class); diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/test/java/org/kie/kogito/examples/sw/custom/CalculatorClientTest.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/test/java/org/kie/kogito/examples/sw/custom/CalculatorClientTest.java index 18caa33b66..5a61ff2773 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/test/java/org/kie/kogito/examples/sw/custom/CalculatorClientTest.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc-server/src/test/java/org/kie/kogito/examples/sw/custom/CalculatorClientTest.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples.sw.custom; -import java.io.IOException; +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.IOException; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.kie.kogito.examples.sw.custom.CalculatorClient.OperationId; -import static org.junit.jupiter.api.Assertions.assertEquals; - public class CalculatorClientTest { diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandler.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandler.java index 87dc724411..d584c409d8 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandler.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandler.java @@ -18,13 +18,11 @@ */ package org.kie.kogito.examples.sw.custom; +import jakarta.enterprise.context.ApplicationScoped; import java.io.IOException; import java.io.UncheckedIOException; import java.util.Iterator; import java.util.Map; - -import jakarta.enterprise.context.ApplicationScoped; - import org.kie.kogito.examples.sw.custom.CalculatorClient.OperationId; import org.kie.kogito.internal.process.workitem.KogitoWorkItem; import org.kie.kogito.serverless.workflow.WorkflowWorkItemHandler; diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandlerConfig.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandlerConfig.java index d33a90b6ca..fce6435974 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandlerConfig.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-rpc/src/main/java/org/kie/kogito/examples/sw/custom/RPCCustomWorkItemHandlerConfig.java @@ -19,13 +19,10 @@ package org.kie.kogito.examples.sw.custom; import jakarta.annotation.PostConstruct; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; - import org.kie.kogito.process.impl.CachedWorkItemHandlerConfig; - @ApplicationScoped public class RPCCustomWorkItemHandlerConfig extends CachedWorkItemHandlerConfig { diff --git a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-type-example/src/test/java/org/kie/kogito/examples/CustomRestIT.java b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-type-example/src/test/java/org/kie/kogito/examples/CustomRestIT.java index 1f5daa5827..27b1001f60 100644 --- a/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-type-example/src/test/java/org/kie/kogito/examples/CustomRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-custom-type/serverless-workflow-custom-type-example/src/test/java/org/kie/kogito/examples/CustomRestIT.java @@ -18,21 +18,19 @@ */ package org.kie.kogito.examples; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; + +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; import java.io.IOException; import java.util.Map; - import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.kie.kogito.examples.sw.custom.CalculatorServer; import org.kie.kogito.serverless.workflow.SWFConstants; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; - @QuarkusIntegrationTest class CustomRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java b/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java index 784f4f8cfa..fdd8d69fb4 100644 --- a/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java @@ -18,18 +18,17 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static java.util.concurrent.TimeUnit.SECONDS; import static org.awaitility.Awaitility.await; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class DataIndexRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java b/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java index d9981b0118..6151660ab6 100644 --- a/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java +++ b/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/main/java/org/kie/kogito/examples/PrintService.java @@ -18,16 +18,20 @@ */ package org.kie.kogito.examples; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import java.net.URI; import java.time.OffsetDateTime; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.UUID; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - import org.eclipse.microprofile.reactive.messaging.Acknowledgment; import org.eclipse.microprofile.reactive.messaging.Acknowledgment.Strategy; import org.eclipse.microprofile.reactive.messaging.Incoming; @@ -39,14 +43,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; - @ApplicationScoped public class PrintService { diff --git a/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java b/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java index 382d102f96..3bc9f86553 100644 --- a/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-data-index-quarkus/src/test/java/org/kie/kogito/examples/DataIndexRestIT.java @@ -18,18 +18,17 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static java.util.concurrent.TimeUnit.SECONDS; import static org.awaitility.Awaitility.await; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class DataIndexRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java index 0d13fc98cc..bb8d274f9b 100644 --- a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.Matchers.is; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class DMNGreetRestIT { @Test diff --git a/serverless-workflow-examples/serverless-workflow-error-quarkus/src/main/java/org/kie/kogito/examples/PublishRestService.java b/serverless-workflow-examples/serverless-workflow-error-quarkus/src/main/java/org/kie/kogito/examples/PublishRestService.java index ec96c03802..0a229e216d 100644 --- a/serverless-workflow-examples/serverless-workflow-error-quarkus/src/main/java/org/kie/kogito/examples/PublishRestService.java +++ b/serverless-workflow-examples/serverless-workflow-error-quarkus/src/main/java/org/kie/kogito/examples/PublishRestService.java @@ -15,6 +15,7 @@ */ package org.kie.kogito.examples; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; @@ -23,12 +24,9 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - @Path("/publish") @Produces(MediaType.APPLICATION_JSON) public class PublishRestService { diff --git a/serverless-workflow-examples/serverless-workflow-error-quarkus/src/test/java/org/kie/kogito/examples/ErrorRestIT.java b/serverless-workflow-examples/serverless-workflow-error-quarkus/src/test/java/org/kie/kogito/examples/ErrorRestIT.java index 6fec4c0dc6..74c1a75148 100644 --- a/serverless-workflow-examples/serverless-workflow-error-quarkus/src/test/java/org/kie/kogito/examples/ErrorRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-error-quarkus/src/test/java/org/kie/kogito/examples/ErrorRestIT.java @@ -18,13 +18,12 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest public class ErrorRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/ApplicantResource.java b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/ApplicantResource.java index 243e1597f6..a132c59e3f 100644 --- a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/ApplicantResource.java +++ b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/ApplicantResource.java @@ -18,10 +18,9 @@ */ package org.kogito.serverless.examples; -import java.io.IOException; -import java.net.URI; -import java.util.UUID; - +import com.fasterxml.jackson.databind.JsonNode; +import io.cloudevents.core.builder.CloudEventBuilder; +import jakarta.annotation.PostConstruct; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.InternalServerErrorException; @@ -29,8 +28,9 @@ import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; - -import jakarta.annotation.PostConstruct; +import java.io.IOException; +import java.net.URI; +import java.util.UUID; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; import org.kie.kogito.event.CloudEventMarshaller; @@ -39,10 +39,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; - -import io.cloudevents.core.builder.CloudEventBuilder; - @Path("/newapplicant") public class ApplicantResource { diff --git a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/AvroMarshallerProducer.java b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/AvroMarshallerProducer.java index 5d17e81903..6803919057 100644 --- a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/AvroMarshallerProducer.java +++ b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/AvroMarshallerProducer.java @@ -18,13 +18,11 @@ */ package org.kogito.serverless.examples; -import java.io.IOException; - +import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; import jakarta.inject.Named; - -import jakarta.annotation.PostConstruct; +import java.io.IOException; import org.kie.kogito.addon.quarkus.messaging.common.ChannelFormat; import org.kie.kogito.event.CloudEventUnmarshallerFactory; import org.kie.kogito.event.avro.AvroCloudEventUnmarshallerFactory; @@ -52,4 +50,4 @@ AvroIO getAvroIO() { return avroIO; } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/DecisionResource.java b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/DecisionResource.java index b8c565d311..98848b6b25 100644 --- a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/DecisionResource.java +++ b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/main/java/org/kogito/serverless/examples/DecisionResource.java @@ -18,18 +18,16 @@ */ package org.kogito.serverless.examples; +import com.fasterxml.jackson.databind.JsonNode; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; - import org.eclipse.microprofile.reactive.messaging.Channel; import org.jboss.resteasy.annotations.SseElementType; import org.reactivestreams.Publisher; -import com.fasterxml.jackson.databind.JsonNode; - @Path("/decisions") public class DecisionResource { diff --git a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/test/java/org/kogito/serverless/examples/ApplicantWorkflowIT.java b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/test/java/org/kogito/serverless/examples/ApplicantWorkflowIT.java index 75a8da44ee..37ee087ff1 100644 --- a/serverless-workflow-examples/serverless-workflow-events-quarkus/src/test/java/org/kogito/serverless/examples/ApplicantWorkflowIT.java +++ b/serverless-workflow-examples/serverless-workflow-events-quarkus/src/test/java/org/kogito/serverless/examples/ApplicantWorkflowIT.java @@ -23,19 +23,22 @@ import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.assertEquals; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.sse.SseEventSource; import java.net.URI; import java.time.OffsetDateTime; import java.util.List; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; - -import jakarta.ws.rs.client.Client; -import jakarta.ws.rs.client.ClientBuilder; -import jakarta.ws.rs.client.WebTarget; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.sse.SseEventSource; - import org.apache.kafka.common.serialization.ByteArrayDeserializer; import org.apache.kafka.common.serialization.ByteArraySerializer; import org.eclipse.microprofile.config.ConfigProvider; @@ -47,13 +50,6 @@ import org.kie.kogito.test.quarkus.kafka.KafkaTypedTestClient; import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusIntegrationTest; - @QuarkusIntegrationTest @QuarkusTestResource(KafkaQuarkusTestResource.class) public class ApplicantWorkflowIT { diff --git a/serverless-workflow-examples/serverless-workflow-expression-quarkus/src/test/java/org/kie/kogito/examples/ExpressionRestIT.java b/serverless-workflow-examples/serverless-workflow-expression-quarkus/src/test/java/org/kie/kogito/examples/ExpressionRestIT.java index 1a1b5152d2..70fe04c8c4 100644 --- a/serverless-workflow-examples/serverless-workflow-expression-quarkus/src/test/java/org/kie/kogito/examples/ExpressionRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-expression-quarkus/src/test/java/org/kie/kogito/examples/ExpressionRestIT.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class ExpressionRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/test/java/org/kie/kogito/examples/ForEachRestIT.java b/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/test/java/org/kie/kogito/examples/ForEachRestIT.java index 8b8b06e115..28b810a34d 100644 --- a/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/test/java/org/kie/kogito/examples/ForEachRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/test/java/org/kie/kogito/examples/ForEachRestIT.java @@ -18,17 +18,15 @@ */ package org.kie.kogito.examples; -import java.util.Arrays; - -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import java.util.Arrays; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class ForEachRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Appointment.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Appointment.java index 7dc96b31e3..6409b156ef 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Appointment.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Appointment.java @@ -18,11 +18,10 @@ */ package org.acme.sw.onboarding.model; -import java.time.LocalDateTime; -import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonInclude; +import java.time.LocalDateTime; +import java.util.Objects; @JsonInclude(JsonInclude.Include.NON_NULL) public class Appointment { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Doctor.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Doctor.java index 2f0b4a71fe..1d6fbee75d 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Doctor.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Doctor.java @@ -18,9 +18,8 @@ */ package org.acme.sw.onboarding.model; -import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonInclude; +import java.util.Objects; @JsonInclude(JsonInclude.Include.NON_NULL) public class Doctor { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Patient.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Patient.java index a844fc1e74..3d42fa6001 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Patient.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/Patient.java @@ -18,15 +18,14 @@ */ package org.acme.sw.onboarding.model; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; - @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class Patient { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/SymptomSpecialty.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/SymptomSpecialty.java index 2bdecf123e..3b4fc006da 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/SymptomSpecialty.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/model/SymptomSpecialty.java @@ -18,11 +18,10 @@ */ package org.acme.sw.onboarding.model; +import com.fasterxml.jackson.annotation.JsonInclude; import java.util.List; import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonInclude; - @JsonInclude(JsonInclude.Include.NON_NULL) public class SymptomSpecialty { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/queries/AssignmentUnit.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/queries/AssignmentUnit.java index 4491be6b25..de42890893 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/queries/AssignmentUnit.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/queries/AssignmentUnit.java @@ -18,8 +18,10 @@ */ package org.acme.sw.onboarding.queries; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import java.util.List; - import org.acme.sw.onboarding.model.Doctor; import org.acme.sw.onboarding.model.Patient; import org.acme.sw.onboarding.model.SymptomSpecialty; @@ -29,10 +31,6 @@ import org.drools.ruleunits.api.DataStore; import org.drools.ruleunits.api.RuleUnitData; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; - @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class AssignmentUnit implements RuleUnitData { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/AppointmentResource.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/AppointmentResource.java index b805fe09f3..5e59f45e42 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/AppointmentResource.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/AppointmentResource.java @@ -18,11 +18,6 @@ */ package org.acme.sw.onboarding.resources; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import jakarta.inject.Inject; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -34,7 +29,10 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; import org.acme.sw.onboarding.model.Appointment; import org.acme.sw.onboarding.model.Error; import org.acme.sw.onboarding.model.Patient; diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/PatientResource.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/PatientResource.java index d29a5fb9f9..55b7aa031d 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/PatientResource.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/resources/PatientResource.java @@ -18,11 +18,6 @@ */ package org.acme.sw.onboarding.resources; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import jakarta.ws.rs.Consumes; @@ -33,7 +28,10 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; import org.acme.sw.onboarding.model.Patient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/DoctorService.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/DoctorService.java index 3fafaa6c22..ada48acfde 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/DoctorService.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/DoctorService.java @@ -18,17 +18,15 @@ */ package org.acme.sw.onboarding.services; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.ArrayList; import java.util.List; - import org.acme.sw.onboarding.model.Doctor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - public class DoctorService { private static final String DOCTOR_DATA_PATH = "/data/doctors.json"; diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/ScheduleService.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/ScheduleService.java index 25ebc48c8c..748dfb4107 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/ScheduleService.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/ScheduleService.java @@ -18,6 +18,7 @@ */ package org.acme.sw.onboarding.services; +import jakarta.enterprise.context.ApplicationScoped; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; @@ -25,9 +26,6 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; - import org.acme.sw.onboarding.model.Appointment; import org.acme.sw.onboarding.model.Patient; diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/SymptomSpecialtyService.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/SymptomSpecialtyService.java index 5a98db30f9..48cd64f0d3 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/SymptomSpecialtyService.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/main/java/org/acme/sw/onboarding/services/SymptomSpecialtyService.java @@ -18,17 +18,15 @@ */ package org.acme.sw.onboarding.services; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.ArrayList; import java.util.List; - import org.acme.sw.onboarding.model.SymptomSpecialty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - public class SymptomSpecialtyService { private static final String SYMPTOMS_DATA_PATH = "/data/symptom_specialty.json"; diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitIT.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitIT.java index 4ba44996ed..58227bb488 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitIT.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitIT.java @@ -18,15 +18,14 @@ */ package org.acme.sw.onboarding.queries; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class AssignmentUnitIT { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitPlainTest.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitPlainTest.java index 8d3016da5f..ca511bf8c0 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitPlainTest.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/queries/AssignmentUnitPlainTest.java @@ -18,13 +18,12 @@ */ package org.acme.sw.onboarding.queries; -import java.util.ArrayList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.ArrayList; import org.acme.sw.onboarding.model.Doctor; -import org.junit.jupiter.api.Test; import org.drools.ruleunits.api.DataObserver; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; class AssignmentUnitPlainTest { @@ -36,4 +35,4 @@ public void create() { assertEquals(doctors.size(), 6); } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/AppointmentResourceIT.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/AppointmentResourceIT.java index 29f1d06d29..44b36d5ca6 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/AppointmentResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/AppointmentResourceIT.java @@ -18,23 +18,20 @@ */ package org.acme.sw.onboarding.resources; +import static io.restassured.RestAssured.given; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.path.json.JsonPath; +import io.restassured.response.ValidatableResponse; +import jakarta.ws.rs.core.MediaType; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; - -import jakarta.ws.rs.core.MediaType; - import org.junit.jupiter.api.Test; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.path.json.JsonPath; -import io.restassured.response.ValidatableResponse; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - @QuarkusIntegrationTest class AppointmentResourceIT { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/OnboardingIT.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/OnboardingIT.java index 0f37350d07..4e63997223 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/OnboardingIT.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/OnboardingIT.java @@ -18,22 +18,19 @@ */ package org.acme.sw.onboarding.resources; -import java.time.Duration; -import java.util.UUID; - -import jakarta.ws.rs.core.MediaType; - -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static java.lang.String.format; import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import jakarta.ws.rs.core.MediaType; +import java.time.Duration; +import java.util.UUID; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class OnboardingIT { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/PatientResourceIT.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/PatientResourceIT.java index d3f2205992..81cabac24d 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/PatientResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/resources/PatientResourceIT.java @@ -18,15 +18,14 @@ */ package org.acme.sw.onboarding.resources; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.not; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class PatientResourceIT { diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/services/ScheduleServiceTest.java b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/services/ScheduleServiceTest.java index 8e3bc68102..87a6145374 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/services/ScheduleServiceTest.java +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/src/test/java/org/acme/sw/onboarding/services/ScheduleServiceTest.java @@ -18,22 +18,19 @@ */ package org.acme.sw.onboarding.services; -import java.time.LocalDateTime; -import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; - +import java.time.LocalDateTime; +import java.util.List; import org.acme.sw.onboarding.model.Appointment; import org.acme.sw.onboarding.model.Doctor; import org.acme.sw.onboarding.model.Patient; import org.junit.jupiter.api.Test; -import io.quarkus.test.junit.QuarkusTest; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - @QuarkusTest class ScheduleServiceTest { diff --git a/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/main/java/org/acme/numbers/NumbersResource.java b/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/main/java/org/acme/numbers/NumbersResource.java index 94b4b4fbae..85336bd930 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/main/java/org/acme/numbers/NumbersResource.java +++ b/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/main/java/org/acme/numbers/NumbersResource.java @@ -18,10 +18,8 @@ */ package org.acme.numbers; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; -import java.util.Random; -import java.util.stream.Collectors; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.GET; @@ -32,12 +30,11 @@ import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.util.Random; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - @Path("/numbers") @Produces(MediaType.APPLICATION_JSON) @ApplicationScoped diff --git a/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/test/java/org/acme/numbers/serverless/workflow/functions/RestExampleIT.java b/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/test/java/org/acme/numbers/serverless/workflow/functions/RestExampleIT.java index 8385cfd5cc..08f380fde5 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/test/java/org/acme/numbers/serverless/workflow/functions/RestExampleIT.java +++ b/serverless-workflow-examples/serverless-workflow-functions-quarkus/src/test/java/org/acme/numbers/serverless/workflow/functions/RestExampleIT.java @@ -18,18 +18,16 @@ */ package org.acme.numbers.serverless.workflow.functions; -import java.util.Collections; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.Matchers.emptyOrNullString; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.Matchers.emptyOrNullString; +import java.util.Collections; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest class RestExampleIT { diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/ClassificationFunction.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/ClassificationFunction.java index 231d817956..96793145e0 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/ClassificationFunction.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/ClassificationFunction.java @@ -18,14 +18,12 @@ */ package org.kogito.serverless.examples.functions; +import io.quarkus.funqy.Funq; import jakarta.inject.Inject; - import org.kogito.serverless.examples.input.Country; import org.kogito.serverless.examples.services.ClassificationService; import org.kogito.serverless.examples.services.CountriesService; -import io.quarkus.funqy.Funq; - public class ClassificationFunction { @Inject CountriesService countriesService; diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/CountriesFunction.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/CountriesFunction.java index 7552fc92c4..7a5ac9a9fd 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/CountriesFunction.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/CountriesFunction.java @@ -18,13 +18,11 @@ */ package org.kogito.serverless.examples.functions; +import io.quarkus.funqy.Funq; import jakarta.inject.Inject; - import org.kogito.serverless.examples.input.Country; import org.kogito.serverless.examples.services.CountriesService; -import io.quarkus.funqy.Funq; - public class CountriesFunction { @Inject CountriesService countriesService; diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/PopulationFunction.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/PopulationFunction.java index 6040e4e9bf..2c6a6d0bed 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/PopulationFunction.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/functions/PopulationFunction.java @@ -18,14 +18,12 @@ */ package org.kogito.serverless.examples.functions; +import io.quarkus.funqy.Funq; import jakarta.inject.Inject; - import org.kogito.serverless.examples.input.Country; import org.kogito.serverless.examples.services.CountriesService; import org.kogito.serverless.examples.services.PopulationService; -import io.quarkus.funqy.Funq; - public class PopulationFunction { @Inject CountriesService countriesService; diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/ClassificationService.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/ClassificationService.java index a92fd12b35..13fbae3169 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/ClassificationService.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/ClassificationService.java @@ -18,11 +18,9 @@ */ package org.kogito.serverless.examples.services; +import jakarta.enterprise.context.ApplicationScoped; import java.util.HashMap; import java.util.Map; - -import jakarta.enterprise.context.ApplicationScoped; - import org.kogito.serverless.examples.input.Country; @ApplicationScoped diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/CountriesService.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/CountriesService.java index bc569785a9..9b94d4ce70 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/CountriesService.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/CountriesService.java @@ -18,11 +18,9 @@ */ package org.kogito.serverless.examples.services; +import jakarta.enterprise.context.ApplicationScoped; import java.util.ArrayList; import java.util.List; - -import jakarta.enterprise.context.ApplicationScoped; - import org.kogito.serverless.examples.input.Country; @ApplicationScoped diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/PopulationService.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/PopulationService.java index 688851d860..c27581c1ab 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/PopulationService.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/main/java/org/kogito/serverless/examples/services/PopulationService.java @@ -18,11 +18,9 @@ */ package org.kogito.serverless.examples.services; +import jakarta.enterprise.context.ApplicationScoped; import java.util.HashMap; import java.util.Map; - -import jakarta.enterprise.context.ApplicationScoped; - import org.kogito.serverless.examples.input.Country; @ApplicationScoped diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/test/java/org/kogito/serverless/examples/FunctionsIT.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/test/java/org/kogito/serverless/examples/FunctionsIT.java index 9b2adf8776..c9a41a6cd2 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/test/java/org/kogito/serverless/examples/FunctionsIT.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-services/src/test/java/org/kogito/serverless/examples/FunctionsIT.java @@ -18,15 +18,13 @@ */ package org.kogito.serverless.examples; -import org.hamcrest.CoreMatchers; -import org.junit.jupiter.api.Test; -import org.kogito.serverless.examples.input.Country; +import static io.restassured.RestAssured.given; import com.fasterxml.jackson.databind.ObjectMapper; - import io.quarkus.test.junit.QuarkusTest; - -import static io.restassured.RestAssured.given; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.Test; +import org.kogito.serverless.examples.input.Country; @QuarkusTest public class FunctionsIT { diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/RestServiceMockServer.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/RestServiceMockServer.java index a3d5916eae..e6fbbc060c 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/RestServiceMockServer.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/RestServiceMockServer.java @@ -18,17 +18,15 @@ */ package org.kogito.serverless.examples; -import java.util.Collections; -import java.util.Map; +import static com.github.tomakehurst.wiremock.client.WireMock.*; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.*; +import java.util.Collections; +import java.util.Map; public class RestServiceMockServer implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/WorkflowIT.java b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/WorkflowIT.java index 0a9c485e3a..af02285eae 100644 --- a/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/WorkflowIT.java +++ b/serverless-workflow-examples/serverless-workflow-funqy/sw-funqy-workflow/src/test/java/org/kogito/serverless/examples/WorkflowIT.java @@ -18,13 +18,12 @@ */ package org.kogito.serverless.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest @QuarkusTestResource(RestServiceMockServer.class) diff --git a/serverless-workflow-examples/serverless-workflow-greeting-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java b/serverless-workflow-examples/serverless-workflow-greeting-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java index 8c1bd39191..8930e5c7d1 100644 --- a/serverless-workflow-examples/serverless-workflow-greeting-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-greeting-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java @@ -18,13 +18,12 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.containsString; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.containsString; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest class GreetRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java index a9b58ce5fb..f59863fe6b 100644 --- a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/src/test/java/org/kie/kogito/examples/GreetRestIT.java @@ -18,19 +18,6 @@ */ package org.kie.kogito.examples; -import java.io.IOException; - -import org.eclipse.microprofile.config.ConfigProvider; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.kie.kogito.examples.sw.greeting.GreeterService; - -import io.grpc.Server; -import io.restassured.RestAssured; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.containsString; @@ -39,6 +26,17 @@ import static org.hamcrest.Matchers.hasEntry; import static org.hamcrest.Matchers.hasSize; +import io.grpc.Server; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import java.io.IOException; +import org.eclipse.microprofile.config.ConfigProvider; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.kie.kogito.examples.sw.greeting.GreeterService; + @QuarkusIntegrationTest class GreetRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/main/java/org/kie/kogito/examples/sw/greeting/GreeterService.java b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/main/java/org/kie/kogito/examples/sw/greeting/GreeterService.java index be9d2613f4..8fc2b0a9c9 100644 --- a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/main/java/org/kie/kogito/examples/sw/greeting/GreeterService.java +++ b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/main/java/org/kie/kogito/examples/sw/greeting/GreeterService.java @@ -18,18 +18,16 @@ */ package org.kie.kogito.examples.sw.greeting; +import io.grpc.Server; +import io.grpc.ServerBuilder; +import io.grpc.Status; +import io.grpc.stub.StreamObserver; import java.io.IOException; import java.util.ArrayList; import java.util.List; - import org.kie.kogito.examples.sw.greeting.Greeting.HelloReply; import org.kie.kogito.examples.sw.greeting.Greeting.HelloRequest; -import io.grpc.Server; -import io.grpc.ServerBuilder; -import io.grpc.Status; -import io.grpc.stub.StreamObserver; - public class GreeterService extends GreeterGrpc.GreeterImplBase { public static final String[] SUPPORTED_LANGUAGES = { "English", "Spanish" }; diff --git a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/test/java/org/kie/kogito/examples/sw/greeting/GreeterClientTest.java b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/test/java/org/kie/kogito/examples/sw/greeting/GreeterClientTest.java index f6ca922bb1..ddfd7468e5 100644 --- a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/test/java/org/kie/kogito/examples/sw/greeting/GreeterClientTest.java +++ b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-server-rpc-quarkus/src/test/java/org/kie/kogito/examples/sw/greeting/GreeterClientTest.java @@ -18,6 +18,14 @@ */ package org.kie.kogito.examples.sw.greeting; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Server; +import io.grpc.Status; +import io.grpc.stub.StreamObserver; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; @@ -25,7 +33,6 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; - import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -33,15 +40,6 @@ import org.kie.kogito.examples.sw.greeting.Greeting.HelloRequest; import org.kie.kogito.examples.sw.greeting.Greeting.HelloRequest.Builder; -import io.grpc.ManagedChannel; -import io.grpc.ManagedChannelBuilder; -import io.grpc.Server; -import io.grpc.Status; -import io.grpc.stub.StreamObserver; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; - public class GreeterClientTest { private static final int port = Integer.getInteger("grpc.port", 50053); diff --git a/serverless-workflow-examples/serverless-workflow-hello-world/src/test/java/org/kie/kogito/examples/HelloWorldTest.java b/serverless-workflow-examples/serverless-workflow-hello-world/src/test/java/org/kie/kogito/examples/HelloWorldTest.java index 29b63899ef..b776cf1d51 100644 --- a/serverless-workflow-examples/serverless-workflow-hello-world/src/test/java/org/kie/kogito/examples/HelloWorldTest.java +++ b/serverless-workflow-examples/serverless-workflow-hello-world/src/test/java/org/kie/kogito/examples/HelloWorldTest.java @@ -18,15 +18,15 @@ */ package org.kie.kogito.examples; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; + import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; - @QuarkusTest class HelloWorldTest { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventDataFormat.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventDataFormat.java index 1d43db8cf3..37aa2175cf 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventDataFormat.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventDataFormat.java @@ -18,20 +18,16 @@ */ package org.acme.serverless.loanbroker.aggregator; -import java.io.InputStream; -import java.io.OutputStream; - -import jakarta.inject.Inject; -import jakarta.inject.Singleton; - -import org.apache.camel.Exchange; -import org.apache.camel.spi.DataFormat; - import com.fasterxml.jackson.databind.ObjectMapper; - import io.cloudevents.CloudEvent; import io.cloudevents.core.provider.EventFormatProvider; import io.cloudevents.jackson.JsonFormat; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.camel.Exchange; +import org.apache.camel.spi.DataFormat; @Singleton public class CloudEventDataFormat implements DataFormat { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventsConverter.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventsConverter.java index 68345a8c94..bdaf3418f6 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventsConverter.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/CloudEventsConverter.java @@ -18,25 +18,21 @@ */ package org.acme.serverless.loanbroker.aggregator; -import java.net.URI; -import java.util.UUID; +import static org.acme.serverless.loanbroker.aggregator.IntegrationConstants.KOGITO_FLOW_ID_HEADER; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.core.data.PojoCloudEventData; import jakarta.inject.Inject; import jakarta.inject.Singleton; import jakarta.ws.rs.core.MediaType; - +import java.net.URI; +import java.util.UUID; import org.apache.camel.Exchange; import org.apache.camel.TypeConversionException; import org.apache.camel.support.TypeConverterSupport; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.core.data.PojoCloudEventData; - -import static org.acme.serverless.loanbroker.aggregator.IntegrationConstants.KOGITO_FLOW_ID_HEADER; - @Singleton public class CloudEventsConverter extends TypeConverterSupport { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/InMemoryQuotesRepositoryProcessor.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/InMemoryQuotesRepositoryProcessor.java index 7c9dcbec67..7c7cba4c40 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/InMemoryQuotesRepositoryProcessor.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/InMemoryQuotesRepositoryProcessor.java @@ -18,13 +18,11 @@ */ package org.acme.serverless.loanbroker.aggregator; +import jakarta.enterprise.context.ApplicationScoped; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; - import org.acme.serverless.loanbroker.aggregator.model.BankQuote; import org.apache.camel.Exchange; import org.slf4j.Logger; diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregationStrategy.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregationStrategy.java index da03c9764f..6af209bdd5 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregationStrategy.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregationStrategy.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; - import org.acme.serverless.loanbroker.aggregator.model.BankQuote; import org.apache.camel.AggregationStrategy; import org.apache.camel.Exchange; diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRoute.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRoute.java index 14ca293698..6340e13fcc 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRoute.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRoute.java @@ -18,16 +18,14 @@ */ package org.acme.serverless.loanbroker.aggregator; +import io.cloudevents.CloudEvent; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; - import org.acme.serverless.loanbroker.aggregator.model.AggregationResponse; import org.apache.camel.Exchange; import org.apache.camel.builder.endpoint.EndpointRouteBuilder; import org.eclipse.microprofile.config.inject.ConfigProperty; -import io.cloudevents.CloudEvent; - /** * Aggregation Strategy for all quotes received. * The payload must be a reference to the BankQuote model and the header must diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesRepositoryProcessor.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesRepositoryProcessor.java index e9993e3cc4..3b3d645a5c 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesRepositoryProcessor.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/QuotesRepositoryProcessor.java @@ -19,7 +19,6 @@ package org.acme.serverless.loanbroker.aggregator; import java.util.List; - import org.acme.serverless.loanbroker.aggregator.model.BankQuote; import org.apache.camel.Processor; diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/AggregationResponse.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/AggregationResponse.java index 07a1440185..a28bd6a9a7 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/AggregationResponse.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/AggregationResponse.java @@ -20,7 +20,6 @@ import java.io.Serializable; import java.time.LocalDateTime; - import org.acme.serverless.loanbroker.aggregator.IntegrationConstants; import org.acme.serverless.loanbroker.aggregator.QuotesAggregationStrategy; import org.apache.camel.Exchange; diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/BankQuote.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/BankQuote.java index c89b4c460b..a22104dfbc 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/BankQuote.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/model/BankQuote.java @@ -18,11 +18,10 @@ */ package org.acme.serverless.loanbroker.aggregator.model; +import io.quarkus.runtime.annotations.RegisterForReflection; import java.io.Serializable; import java.util.Objects; -import io.quarkus.runtime.annotations.RegisterForReflection; - @RegisterForReflection public class BankQuote implements Serializable { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesCloudEventsResource.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesCloudEventsResource.java index e92427e6a8..01088cb406 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesCloudEventsResource.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesCloudEventsResource.java @@ -18,6 +18,9 @@ */ package org.acme.serverless.loanbroker.aggregator.resources; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.jackson.PojoCloudEventDataMapper; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.POST; @@ -25,7 +28,6 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - import org.acme.serverless.loanbroker.aggregator.IntegrationConstants; import org.acme.serverless.loanbroker.aggregator.model.BankQuote; import org.apache.camel.Produce; @@ -33,11 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.jackson.PojoCloudEventDataMapper; - @Path("/") @ApplicationScoped public class QuotesCloudEventsResource { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesResource.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesResource.java index 164f4aae4b..6a4871bdc5 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesResource.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/QuotesResource.java @@ -18,8 +18,6 @@ */ package org.acme.serverless.loanbroker.aggregator.resources; -import java.util.List; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.GET; @@ -28,7 +26,7 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.util.List; import org.acme.serverless.loanbroker.aggregator.QuotesRepositoryProcessor; import org.acme.serverless.loanbroker.aggregator.model.BankQuote; import org.eclipse.microprofile.openapi.annotations.enums.SchemaType; diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/ResponseError.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/ResponseError.java index 0501c2b833..3e7ba40fef 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/ResponseError.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/main/java/org/acme/serverless/loanbroker/aggregator/resources/ResponseError.java @@ -18,11 +18,10 @@ */ package org.acme.serverless.loanbroker.aggregator.resources; -import java.io.Serializable; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; +import java.io.Serializable; @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRouteTest.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRouteTest.java index f492f73019..db9e25d967 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRouteTest.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/QuotesAggregatorRouteTest.java @@ -18,22 +18,16 @@ */ package org.acme.serverless.loanbroker.aggregator; -import java.net.URI; -import java.util.concurrent.TimeUnit; - -import jakarta.inject.Inject; -import jakarta.ws.rs.core.MediaType; - -import org.acme.serverless.loanbroker.aggregator.model.BankQuote; -import org.apache.camel.Exchange; -import org.hamcrest.core.Is; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static org.acme.serverless.loanbroker.aggregator.IntegrationConstants.KOGITO_FLOW_ID_HEADER; +import static org.testcontainers.shaded.org.awaitility.Awaitility.await; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.tomakehurst.wiremock.WireMockServer; - import io.cloudevents.CloudEvent; import io.cloudevents.core.builder.CloudEventBuilder; import io.cloudevents.core.data.PojoCloudEventData; @@ -42,13 +36,15 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; - -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; -import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import static org.acme.serverless.loanbroker.aggregator.IntegrationConstants.KOGITO_FLOW_ID_HEADER; -import static org.testcontainers.shaded.org.awaitility.Awaitility.await; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.MediaType; +import java.net.URI; +import java.util.concurrent.TimeUnit; +import org.acme.serverless.loanbroker.aggregator.model.BankQuote; +import org.apache.camel.Exchange; +import org.hamcrest.core.Is; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; @QuarkusTest @QuarkusTestResource(SinkMockTestResource.class) diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/SinkMockTestResource.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/SinkMockTestResource.java index 26e205801c..702f451be8 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/SinkMockTestResource.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/aggregator/src/test/java/org/acme/serverless/loanbroker/aggregator/SinkMockTestResource.java @@ -18,18 +18,16 @@ */ package org.acme.serverless.loanbroker.aggregator; -import java.util.HashMap; -import java.util.Map; - -import com.github.tomakehurst.wiremock.WireMockServer; - -import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; +import com.github.tomakehurst.wiremock.WireMockServer; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; +import java.util.HashMap; +import java.util.Map; + public class SinkMockTestResource implements QuarkusTestResourceLifecycleManager { private WireMockServer server; diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/CreditBureauMock.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/CreditBureauMock.java index 43a6d1a8d3..d7e0a36c19 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/CreditBureauMock.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/CreditBureauMock.java @@ -18,19 +18,16 @@ */ package org.acme.serverless.loanbroker.flow; -import java.util.Collections; -import java.util.Map; - -import jakarta.ws.rs.core.MediaType; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import jakarta.ws.rs.core.MediaType; +import java.util.Collections; +import java.util.Map; public class CreditBureauMock implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/LoanBrokerFlowTest.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/LoanBrokerFlowTest.java index eb88db575f..9baa29dc38 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/LoanBrokerFlowTest.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/LoanBrokerFlowTest.java @@ -18,21 +18,17 @@ */ package org.acme.serverless.loanbroker.flow; -import java.net.URI; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -import jakarta.ws.rs.core.MediaType; - -import org.junit.jupiter.api.Test; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.testcontainers.shaded.org.awaitility.Awaitility.await; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.tomakehurst.wiremock.WireMockServer; - import io.cloudevents.CloudEvent; import io.cloudevents.core.builder.CloudEventBuilder; import io.cloudevents.core.provider.EventFormatProvider; @@ -41,13 +37,13 @@ import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.testcontainers.shaded.org.awaitility.Awaitility.await; +import jakarta.ws.rs.core.MediaType; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import org.junit.jupiter.api.Test; @QuarkusTest @QuarkusTestResource(SinkMock.class) diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/QuotesAggregatorMock.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/QuotesAggregatorMock.java index 60da745410..6139d6057f 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/QuotesAggregatorMock.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/QuotesAggregatorMock.java @@ -18,19 +18,16 @@ */ package org.acme.serverless.loanbroker.flow; -import java.util.Collections; -import java.util.Map; - -import jakarta.ws.rs.core.MediaType; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import jakarta.ws.rs.core.MediaType; +import java.util.Collections; +import java.util.Map; /** * Mocks the aggregator service that must return a list of quotes diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/SinkMock.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/SinkMock.java index 95a8281b08..51076dccd6 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/SinkMock.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-flow/src/test/java/org/acme/serverless/loanbroker/flow/SinkMock.java @@ -18,16 +18,14 @@ */ package org.acme.serverless.loanbroker.flow; -import java.util.Collections; -import java.util.Map; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; +import java.util.Collections; +import java.util.Map; /** * Mocks the Knative Sink service. Every event produced by the workflow will be diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/AppResource.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/AppResource.java index 248309bf4a..cd3a0ce246 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/AppResource.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/AppResource.java @@ -18,8 +18,10 @@ */ package org.acme.loanbroker; -import java.util.Map; - +import io.cloudevents.CloudEvent; +import io.quarkus.qute.CheckedTemplate; +import io.quarkus.qute.TemplateInstance; +import io.vertx.mutiny.core.eventbus.EventBus; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.GET; @@ -28,17 +30,12 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.util.Map; import org.acme.loanbroker.domain.QuotesResponse; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.cloudevents.CloudEvent; -import io.quarkus.qute.CheckedTemplate; -import io.quarkus.qute.TemplateInstance; -import io.vertx.mutiny.core.eventbus.EventBus; - @Path("/") @ApplicationScoped public class AppResource { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/NewQuoteSocket.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/NewQuoteSocket.java index e46a39a6c8..e08547335a 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/NewQuoteSocket.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/NewQuoteSocket.java @@ -18,24 +18,20 @@ */ package org.acme.loanbroker; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.quarkus.vertx.ConsumeEvent; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.websocket.OnOpen; import jakarta.websocket.Session; import jakarta.websocket.server.ServerEndpoint; - +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; import org.acme.loanbroker.domain.QuotesResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.quarkus.vertx.ConsumeEvent; - @ServerEndpoint("/socket/quote/new") @ApplicationScoped public class NewQuoteSocket { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/QuotesRepository.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/QuotesRepository.java index 350ec9d531..bb56891863 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/QuotesRepository.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/QuotesRepository.java @@ -18,20 +18,16 @@ */ package org.acme.loanbroker; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.jackson.PojoCloudEventDataMapper; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - import org.acme.loanbroker.domain.QuotesResponse; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.jackson.PojoCloudEventDataMapper; - @ApplicationScoped public class QuotesRepository { @Inject diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/Credit.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/Credit.java index 1d93685b11..d7971b2282 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/Credit.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/Credit.java @@ -21,7 +21,6 @@ import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; - import java.util.Objects; public class Credit { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/QuotesResponse.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/QuotesResponse.java index 286d6f98cd..81a255476a 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/QuotesResponse.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/main/java/org/acme/loanbroker/domain/QuotesResponse.java @@ -18,13 +18,12 @@ */ package org.acme.loanbroker.domain; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - @JsonIgnoreProperties(ignoreUnknown = true) public class QuotesResponse implements Serializable { diff --git a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/test/java/org/acme/loanbroker/AppResourceTest.java b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/test/java/org/acme/loanbroker/AppResourceTest.java index 5148a78e27..866bebbe03 100644 --- a/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/test/java/org/acme/loanbroker/AppResourceTest.java +++ b/serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-ui/src/test/java/org/acme/loanbroker/AppResourceTest.java @@ -18,13 +18,17 @@ */ package org.acme.loanbroker; -import java.io.IOException; -import java.net.URI; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.TimeUnit; +import static io.restassured.RestAssured.given; +import static org.junit.jupiter.api.Assertions.assertEquals; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.core.data.PojoCloudEventData; +import io.cloudevents.core.provider.EventFormatProvider; +import io.cloudevents.jackson.JsonFormat; +import io.quarkus.test.common.http.TestHTTPResource; +import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; import jakarta.websocket.ClientEndpoint; import jakarta.websocket.ContainerProvider; @@ -32,25 +36,17 @@ import jakarta.websocket.OnMessage; import jakarta.websocket.Session; import jakarta.ws.rs.core.MediaType; - +import java.io.IOException; +import java.net.URI; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.TimeUnit; import org.acme.loanbroker.domain.Credit; import org.acme.loanbroker.domain.Quote; import org.acme.loanbroker.domain.QuotesResponse; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.CloudEvent; -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.core.data.PojoCloudEventData; -import io.cloudevents.core.provider.EventFormatProvider; -import io.cloudevents.jackson.JsonFormat; -import io.quarkus.test.common.http.TestHTTPResource; -import io.quarkus.test.junit.QuarkusTest; - -import static io.restassured.RestAssured.given; -import static org.junit.jupiter.api.Assertions.assertEquals; - @QuarkusTest public class AppResourceTest { diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/java/org/kie/kogito/examples/VertxRouter.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/java/org/kie/kogito/examples/VertxRouter.java index d3cc018eeb..f8ed908c51 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/java/org/kie/kogito/examples/VertxRouter.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/java/org/kie/kogito/examples/VertxRouter.java @@ -18,11 +18,10 @@ */ package org.kie.kogito.examples; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.event.Observes; - import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.Router; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; @ApplicationScoped public class VertxRouter { diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SinkMock.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SinkMock.java index cc41fef517..9b9dfcd525 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SinkMock.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SinkMock.java @@ -18,16 +18,14 @@ */ package org.acme.newsletter.subscription.flow; -import java.util.Collections; -import java.util.Map; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; +import java.util.Collections; +import java.util.Map; // Mocking our Knative broker, the new.subscriber event should be broadcast to it public class SinkMock implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionFlowIT.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionFlowIT.java index 0dd0b79406..405cd796cc 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionFlowIT.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionFlowIT.java @@ -18,10 +18,15 @@ */ package org.acme.newsletter.subscription.flow; -import java.net.URI; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static io.restassured.RestAssured.given; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.acme.newsletter.subscription.flow.SubscriptionConstants.EMAIL; +import static org.acme.newsletter.subscription.flow.SubscriptionConstants.NAME; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -34,18 +39,12 @@ import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; import org.junit.jupiter.api.Test; -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import static io.restassured.RestAssured.given; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.acme.newsletter.subscription.flow.SubscriptionConstants.EMAIL; -import static org.acme.newsletter.subscription.flow.SubscriptionConstants.NAME; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; - @QuarkusIntegrationTest @QuarkusTestResource(SubscriptionServiceMock.class) @QuarkusTestResource(SinkMock.class) diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionServiceMock.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionServiceMock.java index 4eae27ce90..446ee49f49 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionServiceMock.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/test/java/org/acme/newsletter/subscription/flow/SubscriptionServiceMock.java @@ -18,21 +18,6 @@ */ package org.acme.newsletter.subscription.flow; -import java.util.Collections; -import java.util.Map; - -import org.acme.newsletter.subscription.service.Subscription; -import org.acme.newsletter.subscription.service.SubscriptionResource; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.tomakehurst.wiremock.WireMockServer; -import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -import com.github.tomakehurst.wiremock.matching.EqualToPattern; -import com.github.tomakehurst.wiremock.matching.UrlPathPattern; - -import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.post; @@ -42,6 +27,18 @@ import static org.acme.newsletter.subscription.flow.SubscriptionConstants.EMAIL; import static org.acme.newsletter.subscription.flow.SubscriptionConstants.newSubscription; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.tomakehurst.wiremock.WireMockServer; +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import com.github.tomakehurst.wiremock.matching.EqualToPattern; +import com.github.tomakehurst.wiremock.matching.UrlPathPattern; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; +import java.util.Collections; +import java.util.Map; +import org.acme.newsletter.subscription.service.Subscription; +import org.acme.newsletter.subscription.service.SubscriptionResource; + public class SubscriptionServiceMock implements QuarkusTestResourceLifecycleManager { private WireMockServer wireMockServer; diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/InMemorySubscriptionRepository.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/InMemorySubscriptionRepository.java index c22cd7e765..887a8259cb 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/InMemorySubscriptionRepository.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/InMemorySubscriptionRepository.java @@ -18,20 +18,17 @@ */ package org.acme.newsletter.subscription.service; +import io.quarkus.arc.DefaultBean; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; - -import jakarta.enterprise.context.ApplicationScoped; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkus.arc.DefaultBean; -import jakarta.annotation.PostConstruct; - /** * This default implementation is used when the persistence is not enabled. */ diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/PostgreSqlSubscriptionRepository.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/PostgreSqlSubscriptionRepository.java index 06917d4dba..3ec7a3fd89 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/PostgreSqlSubscriptionRepository.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/PostgreSqlSubscriptionRepository.java @@ -18,17 +18,7 @@ */ package org.acme.newsletter.subscription.service; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static java.util.stream.Collectors.toList; import io.quarkus.arc.properties.IfBuildProperty; import io.quarkus.runtime.Startup; @@ -37,8 +27,15 @@ import io.vertx.mutiny.sqlclient.RowSet; import io.vertx.mutiny.sqlclient.Tuple; import jakarta.annotation.PostConstruct; - -import static java.util.stream.Collectors.toList; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @ApplicationScoped @Startup diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/Subscription.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/Subscription.java index 9dd9932eda..55efa8fae1 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/Subscription.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/Subscription.java @@ -18,12 +18,11 @@ */ package org.acme.newsletter.subscription.service; -import java.io.Serializable; -import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.Objects; @JsonIgnoreProperties(ignoreUnknown = true) public class Subscription implements Serializable { diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionResource.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionResource.java index 6a5fbb3a0d..05162d027f 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionResource.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionResource.java @@ -18,9 +18,10 @@ */ package org.acme.newsletter.subscription.service; -import java.io.Serializable; -import java.util.Optional; - +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.quarkus.runtime.annotations.RegisterForReflection; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; @@ -34,18 +35,13 @@ import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.io.Serializable; +import java.util.Optional; import org.eclipse.microprofile.openapi.annotations.media.Content; import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; import org.eclipse.microprofile.openapi.annotations.responses.APIResponseSchema; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -import io.quarkus.runtime.annotations.RegisterForReflection; - @ApplicationScoped @Path("/subscription") @RegisterForReflection diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionServiceImpl.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionServiceImpl.java index 7372b87d37..688091c215 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionServiceImpl.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/main/java/org/acme/newsletter/subscription/service/SubscriptionServiceImpl.java @@ -18,11 +18,10 @@ */ package org.acme.newsletter.subscription.service; -import java.util.List; -import java.util.Optional; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; +import java.util.List; +import java.util.Optional; @ApplicationScoped public class SubscriptionServiceImpl implements SubscriptionService { diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/test/java/org/acme/newsletter/subscription/service/SubscriptionResourceIT.java b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/test/java/org/acme/newsletter/subscription/service/SubscriptionResourceIT.java index 2b13337d4b..1233d94538 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/test/java/org/acme/newsletter/subscription/service/SubscriptionResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-service/src/test/java/org/acme/newsletter/subscription/service/SubscriptionResourceIT.java @@ -18,18 +18,15 @@ */ package org.acme.newsletter.subscription.service; -import java.util.UUID; - -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.assertj.core.api.Assertions.assertThat; +import java.util.UUID; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest public class SubscriptionResourceIT { @@ -117,4 +114,4 @@ void verifySubscriptionCycle() throws JsonProcessingException { assertThat(aSubscription.isVerified()).isTrue(); } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/AcmeFinancialResource.java b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/AcmeFinancialResource.java index 9dee457775..176a51533b 100644 --- a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/AcmeFinancialResource.java +++ b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/AcmeFinancialResource.java @@ -18,20 +18,18 @@ */ package org.acme; +import io.quarkus.security.identity.SecurityIdentity; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; - import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkus.security.identity.SecurityIdentity; - @Path("financial-service") public class AcmeFinancialResource { diff --git a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/ExchangeRatesDB.java b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/ExchangeRatesDB.java index a54f583483..d73f20ae51 100644 --- a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/ExchangeRatesDB.java +++ b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/main/java/org/acme/ExchangeRatesDB.java @@ -18,13 +18,11 @@ */ package org.acme; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; import java.util.HashMap; import java.util.Map; -import jakarta.enterprise.context.ApplicationScoped; - -import jakarta.annotation.PostConstruct; - /** * Emulates the Acme Financial Services database, implementation and maintenance of this DB * is out of the scope of this example. diff --git a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/test/java/org/acme/AcmeExchangeResourceIT.java b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/test/java/org/acme/AcmeExchangeResourceIT.java index 80f396a421..d2c85b6ae8 100644 --- a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/test/java/org/acme/AcmeExchangeResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/acme-financial-service/src/test/java/org/acme/AcmeExchangeResourceIT.java @@ -18,20 +18,18 @@ */ package org.acme; -import java.util.stream.Stream; +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.quarkus.test.keycloak.client.KeycloakTestClient; +import io.restassured.http.ContentType; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.quarkus.test.keycloak.client.KeycloakTestClient; -import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.assertj.core.api.Assertions.assertThat; - @QuarkusIntegrationTest class AcmeExchangeResourceIT { diff --git a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/src/main/java/org/kie/kogito/examples/ExchangeWorkflowHelper.java b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/src/main/java/org/kie/kogito/examples/ExchangeWorkflowHelper.java index 0a46100bef..4a3d248a03 100644 --- a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/src/main/java/org/kie/kogito/examples/ExchangeWorkflowHelper.java +++ b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/src/main/java/org/kie/kogito/examples/ExchangeWorkflowHelper.java @@ -18,14 +18,12 @@ */ package org.kie.kogito.examples; +import jakarta.enterprise.context.ApplicationScoped; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; - -import jakarta.enterprise.context.ApplicationScoped; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-order-processing/src/test/java/org/kie/kogito/examples/sw/orders/processing/VerifyWorkflowExecutionIT.java b/serverless-workflow-examples/serverless-workflow-order-processing/src/test/java/org/kie/kogito/examples/sw/orders/processing/VerifyWorkflowExecutionIT.java index 85af1b21ed..0c5ec7b257 100644 --- a/serverless-workflow-examples/serverless-workflow-order-processing/src/test/java/org/kie/kogito/examples/sw/orders/processing/VerifyWorkflowExecutionIT.java +++ b/serverless-workflow-examples/serverless-workflow-order-processing/src/test/java/org/kie/kogito/examples/sw/orders/processing/VerifyWorkflowExecutionIT.java @@ -18,21 +18,6 @@ */ package org.kie.kogito.examples.sw.orders.processing; -import java.util.UUID; - -import jakarta.ws.rs.core.MediaType; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.tomakehurst.wiremock.WireMockServer; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.RestAssured; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.containing; import static com.github.tomakehurst.wiremock.client.WireMock.post; @@ -43,6 +28,17 @@ import static java.util.concurrent.TimeUnit.SECONDS; import static org.awaitility.Awaitility.await; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.tomakehurst.wiremock.WireMockServer; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import jakarta.ws.rs.core.MediaType; +import java.util.UUID; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest public class VerifyWorkflowExecutionIT { diff --git a/serverless-workflow-examples/serverless-workflow-parallel-execution/src/test/java/org/kie/kogito/examples/ParallelStateTest.java b/serverless-workflow-examples/serverless-workflow-parallel-execution/src/test/java/org/kie/kogito/examples/ParallelStateTest.java index bf64f05da5..f6e1afacac 100644 --- a/serverless-workflow-examples/serverless-workflow-parallel-execution/src/test/java/org/kie/kogito/examples/ParallelStateTest.java +++ b/serverless-workflow-examples/serverless-workflow-parallel-execution/src/test/java/org/kie/kogito/examples/ParallelStateTest.java @@ -18,13 +18,12 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.hasLength; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.hasLength; +import org.junit.jupiter.api.Test; @QuarkusTest class ParallelStateTest { diff --git a/serverless-workflow-examples/serverless-workflow-python-quarkus/src/test/java/org/kie/kogito/examples/PythonRestIT.java b/serverless-workflow-examples/serverless-workflow-python-quarkus/src/test/java/org/kie/kogito/examples/PythonRestIT.java index 7f428fe5b5..d90ee64294 100644 --- a/serverless-workflow-examples/serverless-workflow-python-quarkus/src/test/java/org/kie/kogito/examples/PythonRestIT.java +++ b/serverless-workflow-examples/serverless-workflow-python-quarkus/src/test/java/org/kie/kogito/examples/PythonRestIT.java @@ -18,16 +18,13 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.databind.JsonNode; - import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.assertj.core.api.Assertions.assertThat; - +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest public class PythonRestIT { diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/InMemoryQueryRecordRepository.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/InMemoryQueryRecordRepository.java index ed0cd4b7d2..20f7e7e774 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/InMemoryQueryRecordRepository.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/InMemoryQueryRecordRepository.java @@ -18,18 +18,16 @@ */ package org.acme; +import io.quarkus.arc.DefaultBean; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkus.arc.DefaultBean; - /** * This default implementation is used when the persistence is not enabled. */ diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/PostgreSqlQueryRecordRepository.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/PostgreSqlQueryRecordRepository.java index d534e149c7..90516e91e5 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/PostgreSqlQueryRecordRepository.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/PostgreSqlQueryRecordRepository.java @@ -18,6 +18,11 @@ */ package org.acme; +import io.quarkus.arc.properties.IfBuildProperty; +import io.quarkus.runtime.Startup; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -27,17 +32,10 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; import javax.sql.DataSource; -import jakarta.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkus.arc.properties.IfBuildProperty; -import io.quarkus.runtime.Startup; - /** * This PostgreSqlQueryRecordRepository implementation is used when the application is build with the persistence profile. */ diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceHelper.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceHelper.java index 708164fe7c..fb8d62949a 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceHelper.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceHelper.java @@ -18,21 +18,18 @@ */ package org.acme; -import java.time.ZonedDateTime; +import static org.acme.QueryRecord.ERROR; +import static org.acme.QueryRecord.PENDING; +import static org.acme.QueryRecord.RESOLVED; +import com.fasterxml.jackson.databind.JsonNode; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; - +import java.time.ZonedDateTime; import org.kie.kogito.internal.process.runtime.KogitoProcessContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; - -import static org.acme.QueryRecord.ERROR; -import static org.acme.QueryRecord.PENDING; -import static org.acme.QueryRecord.RESOLVED; - /** * Helper class used from the SW workflow actions to update the queries and answers being constructed. */ diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceResource.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceResource.java index 1d53d2fb5c..ce39510dbe 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceResource.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/main/java/org/acme/QueryAnswerServiceResource.java @@ -18,12 +18,11 @@ */ package org.acme; -import java.util.List; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; +import java.util.List; @Path("/queries") @ApplicationScoped diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/QueryAnswerServiceIT.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/QueryAnswerServiceIT.java index 91a9e978b0..ffab99f4e4 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/QueryAnswerServiceIT.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/QueryAnswerServiceIT.java @@ -18,11 +18,24 @@ */ package org.acme.it; +import static io.restassured.RestAssured.given; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import io.cloudevents.jackson.JsonFormat; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import io.restassured.path.json.JsonPath; import java.net.URI; import java.time.OffsetDateTime; import java.util.List; import java.util.UUID; - import org.acme.QueryRecord; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -31,22 +44,6 @@ import org.kie.kogito.test.quarkus.kafka.KafkaTestClient; import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; -import io.cloudevents.jackson.JsonFormat; -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; -import io.restassured.path.json.JsonPath; - -import static io.restassured.RestAssured.given; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; - @QuarkusIntegrationTest @QuarkusTestResource(WireMockQueryServiceResource.class) @QuarkusTestResource(KafkaQuarkusTestResource.class) diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/WireMockQueryServiceResource.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/WireMockQueryServiceResource.java index a6c80dce23..e12c980ed1 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/WireMockQueryServiceResource.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/src/test/java/org/acme/it/WireMockQueryServiceResource.java @@ -18,13 +18,6 @@ */ package org.acme.it; -import java.util.HashMap; -import java.util.Map; - -import com.github.tomakehurst.wiremock.WireMockServer; - -import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; import static com.github.tomakehurst.wiremock.client.WireMock.post; @@ -32,6 +25,11 @@ import static jakarta.ws.rs.core.HttpHeaders.CONTENT_TYPE; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; +import com.github.tomakehurst.wiremock.WireMockServer; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; +import java.util.HashMap; +import java.util.Map; + public class WireMockQueryServiceResource implements QuarkusTestResourceLifecycleManager { public static final String QUERY_SERVICE_URL = "query-service-url"; diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/CloudEventsCustomizer.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/CloudEventsCustomizer.java index b161f0d909..201157f3a2 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/CloudEventsCustomizer.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/CloudEventsCustomizer.java @@ -18,12 +18,10 @@ */ package org.acme; -import jakarta.inject.Singleton; - import com.fasterxml.jackson.databind.ObjectMapper; - import io.cloudevents.jackson.JsonFormat; import io.quarkus.jackson.ObjectMapperCustomizer; +import jakarta.inject.Singleton; /** * Ensure the registration of the CloudEvent jackson module according to the Quarkus suggested procedure. diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/InMemoryQueryRequestRepository.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/InMemoryQueryRequestRepository.java index d8db70f3cc..854ce1fae6 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/InMemoryQueryRequestRepository.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/InMemoryQueryRequestRepository.java @@ -18,19 +18,16 @@ */ package org.acme; +import io.quarkus.arc.DefaultBean; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - -import jakarta.enterprise.context.ApplicationScoped; - -import jakarta.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.quarkus.arc.DefaultBean; - /** * This default implementation is used when the persistence is not enabled. */ diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/PostgreSqlQueryRequestRepository.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/PostgreSqlQueryRequestRepository.java index 3e2541e968..bc9983b963 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/PostgreSqlQueryRequestRepository.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/PostgreSqlQueryRequestRepository.java @@ -18,15 +18,7 @@ */ package org.acme; -import java.util.List; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; -import jakarta.annotation.PostConstruct; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static java.util.stream.Collectors.toList; import io.quarkus.arc.properties.IfBuildProperty; import io.quarkus.runtime.Startup; @@ -34,8 +26,14 @@ import io.vertx.mutiny.sqlclient.RowIterator; import io.vertx.mutiny.sqlclient.RowSet; import io.vertx.mutiny.sqlclient.Tuple; - -import static java.util.stream.Collectors.toList; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.util.List; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This PostgreSqlQueryRequestRepository implementation is used when the application is built with the persistence profile. diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/QueryServiceResource.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/QueryServiceResource.java index 9fa7a40567..33df40ab87 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/QueryServiceResource.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/main/java/org/acme/QueryServiceResource.java @@ -18,11 +18,11 @@ */ package org.acme; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.List; -import java.util.UUID; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; @@ -32,20 +32,16 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.List; +import java.util.UUID; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; import org.eclipse.microprofile.reactive.messaging.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; -import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; - @Path("query-service") @ApplicationScoped public class QueryServiceResource { @@ -106,4 +102,4 @@ public String generateCloudEvent(String processInstanceId, String queryResponse) throw new IllegalArgumentException(e); } } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/test/java/org/acme/it/QueryServiceResourceIT.java b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/test/java/org/acme/it/QueryServiceResourceIT.java index 8590bf6785..2e853faf40 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/test/java/org/acme/it/QueryServiceResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-service/src/test/java/org/acme/it/QueryServiceResourceIT.java @@ -18,17 +18,15 @@ */ package org.acme.it; -import java.util.List; - -import org.acme.QueryRequest; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; import io.restassured.path.json.JsonPath; - -import static io.restassured.RestAssured.given; -import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; +import org.acme.QueryRequest; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest class QueryServiceResourceIT { @@ -93,4 +91,4 @@ private List getCurrentRequests() { .jsonPath(); return currentRequests.getList("", QueryRequest.class); } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/MockService.java b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/MockService.java index 448ffd0175..dd735b012e 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/MockService.java +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/MockService.java @@ -18,12 +18,10 @@ */ package org.kie.kogito.examples; +import jakarta.enterprise.context.ApplicationScoped; import java.util.Objects; import java.util.Optional; import java.util.UUID; - -import jakarta.enterprise.context.ApplicationScoped; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/OrderService.java b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/OrderService.java index 055c1d9c50..51f9b05205 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/OrderService.java +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/OrderService.java @@ -19,7 +19,6 @@ package org.kie.kogito.examples; import jakarta.enterprise.context.ApplicationScoped; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/PaymentService.java b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/PaymentService.java index 478828eb42..e209e9bbd2 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/PaymentService.java +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/PaymentService.java @@ -20,7 +20,6 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/ShippingService.java b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/ShippingService.java index 599256315d..919ed95fa3 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/ShippingService.java +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/ShippingService.java @@ -20,7 +20,6 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/StockService.java b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/StockService.java index e798f64ff8..e926b8b6ca 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/StockService.java +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/main/java/org/kie/kogito/examples/StockService.java @@ -20,7 +20,6 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/test/java/org/kie/kogito/examples/OrderSagaWorkflowIT.java b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/test/java/org/kie/kogito/examples/OrderSagaWorkflowIT.java index 2fe543d9a8..fdbcdfb29a 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/test/java/org/kie/kogito/examples/OrderSagaWorkflowIT.java +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/src/test/java/org/kie/kogito/examples/OrderSagaWorkflowIT.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.notNullValue; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; import io.restassured.response.ValidatableResponse; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.notNullValue; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest public class OrderSagaWorkflowIT { diff --git a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/CountriesClassifierResource.java b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/CountriesClassifierResource.java index 3c4b2766a0..fb4c849bd3 100644 --- a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/CountriesClassifierResource.java +++ b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/CountriesClassifierResource.java @@ -18,21 +18,18 @@ */ package org.kogito.serverless.examples; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Set; - +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; - +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Set; import org.jboss.logging.Logger; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - @Path("/countryclassifier") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) diff --git a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/Country.java b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/Country.java index a2ffe2cda0..338547691a 100644 --- a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/Country.java +++ b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/main/java/org/kogito/serverless/examples/Country.java @@ -18,9 +18,8 @@ */ package org.kogito.serverless.examples; -import java.util.List; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.List; @JsonIgnoreProperties(ignoreUnknown = true) public class Country { diff --git a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/CountryServiceWorkflowTest.java b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/CountryServiceWorkflowTest.java index 65bcaa562d..b972d04356 100644 --- a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/CountryServiceWorkflowTest.java +++ b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/CountryServiceWorkflowTest.java @@ -18,26 +18,22 @@ */ package org.kogito.serverless.examples; -import java.util.HashMap; -import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; import jakarta.inject.Named; - +import java.util.HashMap; +import java.util.Map; import org.junit.jupiter.api.Test; import org.kie.kogito.Model; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusTest; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - @QuarkusTest @QuarkusTestResource(RestCountriesMockServer.class) public class CountryServiceWorkflowTest { diff --git a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/RestCountriesMockServer.java b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/RestCountriesMockServer.java index ec2c6f40b8..a6a58c6c54 100644 --- a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/RestCountriesMockServer.java +++ b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/src/test/java/org/kogito/serverless/examples/RestCountriesMockServer.java @@ -18,20 +18,18 @@ */ package org.kogito.serverless.examples; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; public class RestCountriesMockServer implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-stock-profit/stock-portfolio-service/src/test/java/org/acme/ProfitResourceTest.java b/serverless-workflow-examples/serverless-workflow-stock-profit/stock-portfolio-service/src/test/java/org/acme/ProfitResourceTest.java index b805e52496..4bbb133ff0 100644 --- a/serverless-workflow-examples/serverless-workflow-stock-profit/stock-portfolio-service/src/test/java/org/acme/ProfitResourceTest.java +++ b/serverless-workflow-examples/serverless-workflow-stock-profit/stock-portfolio-service/src/test/java/org/acme/ProfitResourceTest.java @@ -18,11 +18,10 @@ */ package org.acme; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.math.BigDecimal; - -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; class ProfitResourceTest { @@ -31,4 +30,4 @@ void calculateProfit() { BigDecimal profit = ProfitResource.calculateProfit(new BigDecimal("12.56"), new BigDecimal("10.00")); assertEquals(new BigDecimal("0.26"), profit); } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/MockServices.java b/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/MockServices.java index f89bb94fd3..fb5e8a70a0 100644 --- a/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/MockServices.java +++ b/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/MockServices.java @@ -18,17 +18,16 @@ */ package org.acme; -import com.github.tomakehurst.wiremock.WireMockServer; -import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import java.util.Map; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; +import com.github.tomakehurst.wiremock.WireMockServer; +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; +import java.util.Map; + public class MockServices implements QuarkusTestResourceLifecycleManager { private WireMockServer wireMockServer; diff --git a/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/StockProfitIT.java b/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/StockProfitIT.java index 8cc76d9701..c0c0032fb9 100644 --- a/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/StockProfitIT.java +++ b/serverless-workflow-examples/serverless-workflow-stock-profit/stock-profit/src/test/java/org/acme/StockProfitIT.java @@ -18,19 +18,18 @@ */ package org.acme; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; + import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import java.util.Collections; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import java.util.Collections; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; - @QuarkusIntegrationTest @QuarkusTestResource(MockServices.class) class StockProfitIT { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java index bd3bbe07b1..c01239fb5d 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java @@ -18,19 +18,17 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; +import java.util.Collections; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest @QuarkusTestResource(OperationsMockService.class) diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/OperationsMockService.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/OperationsMockService.java index f82871273c..e76f362374 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/OperationsMockService.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/src/test/java/org/kie/kogito/serverless/OperationsMockService.java @@ -18,19 +18,16 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; -import java.util.Map; - -import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import java.util.Collections; +import java.util.Map; +import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; public class OperationsMockService implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java index bd3bbe07b1..c01239fb5d 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java @@ -18,19 +18,17 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; +import java.util.Collections; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest @QuarkusTestResource(OperationsMockService.class) diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/OperationsMockService.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/OperationsMockService.java index f82871273c..e76f362374 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/OperationsMockService.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/src/test/java/org/kie/kogito/serverless/OperationsMockService.java @@ -18,19 +18,16 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; -import java.util.Map; - -import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import java.util.Collections; +import java.util.Map; +import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; public class OperationsMockService implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java index bd3bbe07b1..c01239fb5d 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java @@ -18,19 +18,17 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; +import java.util.Collections; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest @QuarkusTestResource(OperationsMockService.class) diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/OperationsMockService.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/OperationsMockService.java index f82871273c..e76f362374 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/OperationsMockService.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/src/test/java/org/kie/kogito/serverless/OperationsMockService.java @@ -18,19 +18,16 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; -import java.util.Map; - -import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import java.util.Collections; +import java.util.Map; +import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; public class OperationsMockService implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java index bd3bbe07b1..c01239fb5d 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/ConversationFlowIT.java @@ -18,19 +18,17 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; +import java.util.Collections; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest @QuarkusTestResource(OperationsMockService.class) diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/OperationsMockService.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/OperationsMockService.java index 1feeb37869..6ca014ad44 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/OperationsMockService.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/src/test/java/org/kie/kogito/serverless/OperationsMockService.java @@ -18,19 +18,16 @@ */ package org.kie.kogito.serverless; -import java.util.Collections; -import java.util.Map; - -import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; - import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import java.util.Collections; +import java.util.Map; +import org.kie.kogito.event.cloudevents.CloudEventExtensionConstants; public class OperationsMockService implements QuarkusTestResourceLifecycleManager { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/MultiplicationOperation.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/MultiplicationOperation.java index 422dd826c1..0c10d0b5f1 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/MultiplicationOperation.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/MultiplicationOperation.java @@ -18,9 +18,8 @@ */ package org.kie.kogito.examples.sw.temp.multiplication; -import java.util.Objects; - import io.quarkus.runtime.annotations.RegisterForReflection; +import java.util.Objects; /** * See: Multiplication diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResource.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResource.java index 6ed4b72264..f24cf4c94f 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResource.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/main/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResource.java @@ -18,6 +18,7 @@ */ package org.kie.kogito.examples.sw.temp.multiplication; +import io.quarkus.runtime.annotations.RegisterForReflection; import jakarta.validation.constraints.NotNull; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; @@ -25,11 +26,8 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - import org.eclipse.microprofile.openapi.annotations.responses.APIResponseSchema; -import io.quarkus.runtime.annotations.RegisterForReflection; - @Path("/") public class OperationResource { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/test/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResourceIT.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/test/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResourceIT.java index 0b331059cf..f9bc30b90e 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/test/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/multiplication-service/src/test/java/org/kie/kogito/examples/sw/temp/multiplication/OperationResourceIT.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples.sw.temp.multiplication; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.http.ContentType; import io.restassured.response.Response; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; +import org.junit.jupiter.api.Test; @QuarkusIntegrationTest class OperationResourceIT { diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResource.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResource.java index 7648677f01..e13f9cdc7c 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResource.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResource.java @@ -18,6 +18,7 @@ */ package org.kie.kogito.examples.sw.temp.subtraction; +import io.quarkus.runtime.annotations.RegisterForReflection; import jakarta.validation.constraints.NotNull; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; @@ -25,11 +26,8 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - import org.eclipse.microprofile.openapi.annotations.responses.APIResponseSchema; -import io.quarkus.runtime.annotations.RegisterForReflection; - @Path("/") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/SubtractionOperation.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/SubtractionOperation.java index 710e67cc3d..027c291034 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/SubtractionOperation.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/main/java/org/kie/kogito/examples/sw/temp/subtraction/SubtractionOperation.java @@ -18,9 +18,8 @@ */ package org.kie.kogito.examples.sw.temp.subtraction; -import java.util.Objects; - import io.quarkus.runtime.annotations.RegisterForReflection; +import java.util.Objects; /** * See: Subtraction diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/test/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResourceIT.java b/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/test/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResourceIT.java index 9a06b6dc4d..9d65983563 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/test/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResourceIT.java +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/subtraction-service/src/test/java/org/kie/kogito/examples/sw/temp/subtraction/OperationResourceIT.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples.sw.temp.subtraction; -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + @QuarkusIntegrationTest class OperationResourceIT { diff --git a/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/src/test/java/org/kie/kogito/examples/HelloTest.java b/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/src/test/java/org/kie/kogito/examples/HelloTest.java index 15f1c6a1c8..7c510c3527 100644 --- a/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/src/test/java/org/kie/kogito/examples/HelloTest.java +++ b/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/src/test/java/org/kie/kogito/examples/HelloTest.java @@ -18,15 +18,14 @@ */ package org.kie.kogito.examples; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.equalTo; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.equalTo; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; @QuarkusTest class HelloTest { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/EventsProducerResource.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/EventsProducerResource.java index 7611e766aa..f31c658fa8 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/EventsProducerResource.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/EventsProducerResource.java @@ -18,10 +18,11 @@ */ package org.kie.kogito.examples; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.UUID; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; @@ -31,18 +32,13 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.UUID; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; import org.eclipse.microprofile.reactive.messaging.Message; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; -import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; - /** * Helper resource with convenient operations to produce events for the serverless workflows that are waiting for * events to arrive. @@ -216,4 +212,4 @@ public void setEventData(String eventData) { this.eventData = eventData; } } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/VertxRouter.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/VertxRouter.java index d3cc018eeb..f8ed908c51 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/VertxRouter.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/main/java/org/kie/kogito/examples/VertxRouter.java @@ -18,11 +18,10 @@ */ package org.kie.kogito.examples; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.event.Observes; - import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.Router; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; @ApplicationScoped public class VertxRouter { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/test/java/org/kie/kogito/examples/TimeoutIT.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/test/java/org/kie/kogito/examples/TimeoutIT.java index edaff888be..b624383605 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/test/java/org/kie/kogito/examples/TimeoutIT.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/src/test/java/org/kie/kogito/examples/TimeoutIT.java @@ -18,18 +18,17 @@ */ package org.kie.kogito.examples; -import java.util.concurrent.TimeUnit; +import static io.restassured.RestAssured.given; +import static org.awaitility.Awaitility.await; +import static org.hamcrest.Matchers.equalTo; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static io.restassured.RestAssured.given; -import static org.awaitility.Awaitility.await; -import static org.hamcrest.Matchers.equalTo; - @QuarkusIntegrationTest class TimeoutIT { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/EventsProducerResource.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/EventsProducerResource.java index ab6046e46e..4a63df8082 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/EventsProducerResource.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/EventsProducerResource.java @@ -18,10 +18,13 @@ */ package org.kie.kogito.examples; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.UUID; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cloudevents.core.builder.CloudEventBuilder; +import io.cloudevents.jackson.JsonCloudEventData; +import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; +import io.vertx.core.http.HttpMethod; +import io.vertx.ext.web.Router; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.event.Observes; import jakarta.inject.Inject; @@ -32,20 +35,13 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - -import io.vertx.core.http.HttpMethod; -import io.vertx.ext.web.Router; +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.UUID; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; import org.eclipse.microprofile.reactive.messaging.Message; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.cloudevents.core.builder.CloudEventBuilder; -import io.cloudevents.jackson.JsonCloudEventData; -import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; - /** * Helper resource with convenient operations to produce events for the serverless workflows that are waiting for * events to arrive. @@ -219,4 +215,4 @@ public void setEventData(String eventData) { this.eventData = eventData; } } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/VertxRouter.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/VertxRouter.java index d3cc018eeb..f8ed908c51 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/VertxRouter.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/main/java/org/kie/kogito/examples/VertxRouter.java @@ -18,11 +18,10 @@ */ package org.kie.kogito.examples; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.event.Observes; - import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.Router; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; @ApplicationScoped public class VertxRouter { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/test/java/org/kie/kogito/examples/TimeoutIT.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/test/java/org/kie/kogito/examples/TimeoutIT.java index edaff888be..b624383605 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/test/java/org/kie/kogito/examples/TimeoutIT.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/src/test/java/org/kie/kogito/examples/TimeoutIT.java @@ -18,18 +18,17 @@ */ package org.kie.kogito.examples; -import java.util.concurrent.TimeUnit; +import static io.restassured.RestAssured.given; +import static org.awaitility.Awaitility.await; +import static org.hamcrest.Matchers.equalTo; import io.quarkus.test.junit.QuarkusIntegrationTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static io.restassured.RestAssured.given; -import static org.awaitility.Awaitility.await; -import static org.hamcrest.Matchers.equalTo; - @QuarkusIntegrationTest class TimeoutIT { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CallbackStateTimeoutsClient.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CallbackStateTimeoutsClient.java index 85b416b85b..22f37aa2a3 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CallbackStateTimeoutsClient.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CallbackStateTimeoutsClient.java @@ -18,7 +18,7 @@ */ package org.kie.kogito.examples; -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import static org.kie.kogito.examples.CallbackStateTimeoutsClient.CONFIG_KEY; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DefaultValue; @@ -31,8 +31,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - -import static org.kie.kogito.examples.CallbackStateTimeoutsClient.CONFIG_KEY; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @Path("/") @RegisterRestClient(configKey = CONFIG_KEY) diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CloudEventsCustomizer.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CloudEventsCustomizer.java index 5979828a07..a57450d5d6 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CloudEventsCustomizer.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/CloudEventsCustomizer.java @@ -21,7 +21,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.cloudevents.jackson.JsonFormat; import io.quarkus.jackson.ObjectMapperCustomizer; - import jakarta.inject.Singleton; /** diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventStateTimeoutsClient.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventStateTimeoutsClient.java index 57614e9fb3..502c68c850 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventStateTimeoutsClient.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventStateTimeoutsClient.java @@ -18,7 +18,7 @@ */ package org.kie.kogito.examples; -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import static org.kie.kogito.examples.EventStateTimeoutsClient.CONFIG_KEY; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DefaultValue; @@ -31,8 +31,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - -import static org.kie.kogito.examples.EventStateTimeoutsClient.CONFIG_KEY; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @Path("/") @RegisterRestClient(configKey = CONFIG_KEY) diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventsProducerResource.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventsProducerResource.java index 55d8412535..dc72a89c7d 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventsProducerResource.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/EventsProducerResource.java @@ -22,8 +22,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.cloudevents.core.builder.CloudEventBuilder; import io.cloudevents.jackson.JsonCloudEventData; -import org.eclipse.microprofile.rest.client.inject.RestClient; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; @@ -36,6 +34,7 @@ import java.net.URI; import java.time.OffsetDateTime; import java.util.UUID; +import org.eclipse.microprofile.rest.client.inject.RestClient; /** * Helper resource with convenient operations to produce events for the serverless workflows that are waiting for @@ -224,4 +223,4 @@ public void setEventData(String eventData) { this.eventData = eventData; } } -} \ No newline at end of file +} diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/SwitchStateTimeoutsClient.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/SwitchStateTimeoutsClient.java index b02d854a83..f1d1a147f0 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/SwitchStateTimeoutsClient.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/SwitchStateTimeoutsClient.java @@ -18,7 +18,7 @@ */ package org.kie.kogito.examples; -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import static org.kie.kogito.examples.SwitchStateTimeoutsClient.CONFIG_KEY; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DefaultValue; @@ -31,8 +31,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - -import static org.kie.kogito.examples.SwitchStateTimeoutsClient.CONFIG_KEY; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @Path("/") @RegisterRestClient(configKey = CONFIG_KEY) diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/VertxRouter.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/VertxRouter.java index d3cc018eeb..f8ed908c51 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/VertxRouter.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/VertxRouter.java @@ -18,11 +18,10 @@ */ package org.kie.kogito.examples; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.event.Observes; - import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.Router; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; @ApplicationScoped public class VertxRouter { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowClient.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowClient.java index d4c091ad6e..d74d9d7e05 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowClient.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowClient.java @@ -18,14 +18,13 @@ */ package org.kie.kogito.examples; -import org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam; - import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; +import org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam; public interface WorkflowClient { diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowTimeoutsClient.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowTimeoutsClient.java index 70fbcf6fa9..d8451c1cb0 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowTimeoutsClient.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowTimeoutsClient.java @@ -18,7 +18,7 @@ */ package org.kie.kogito.examples; -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import static org.kie.kogito.examples.WorkflowTimeoutsClient.CONFIG_KEY; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.DefaultValue; @@ -31,8 +31,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - -import static org.kie.kogito.examples.WorkflowTimeoutsClient.CONFIG_KEY; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @Path("/") @RegisterRestClient(configKey = CONFIG_KEY) diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowsProxyResource.java b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowsProxyResource.java index 9ef3481841..ae6a3daadb 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowsProxyResource.java +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/src/main/java/org/kie/kogito/examples/WorkflowsProxyResource.java @@ -18,8 +18,6 @@ */ package org.kie.kogito.examples; -import org.eclipse.microprofile.rest.client.inject.RestClient; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; @@ -33,6 +31,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; +import org.eclipse.microprofile.rest.client.inject.RestClient; /** * The objective of this class is to provide a simple proxy for the invocations from the UI to the SWs, and avoid From c49c486ab07ae6a4767bf078d052a79764cfe017 Mon Sep 17 00:00:00 2001 From: Enrique Date: Mon, 7 Oct 2024 20:04:20 +0200 Subject: [PATCH 2/3] [incubator-kie-issues-1484] Create endpoints for user task (#2018) --- .../quarkus/ServiceDeskProcessTest.java | 171 ++++++++++++-- .../test/java/org/acme/travel/TravelIT.java | 80 ++++--- .../kie/kogito/examples/PersonsRestIT.java | 50 +++- .../config/CustomWorkItemHandlerConfig.java | 41 ---- .../CustomHumanTaskWorkItemHandler.java | 72 ------ .../usertasks/CustomUserTaskLifeCycle.java | 219 ++++++++++++++++++ .../quarkus/ApprovalsProcessTest.java | 69 +++--- .../travels/quarkus/ApprovalsProcessTest.java | 61 +++-- .../org/kie/kogito/hr/HiringProcessIT.java | 36 ++- .../org/acme/travels/ApprovalsProcessIT.java | 41 ++-- .../org/acme/travels/ApprovalsRestIT.java | 35 +-- .../quarkus/ApprovalsProcessTest.java | 51 ++-- .../springboot/ServiceDeskProcessTest.java | 168 ++++++++++++-- .../main/resources/traffic-rules-dmn-wih.bpmn | 4 +- .../org/kie/kogito/examples/persons.bpmn2 | 70 +++--- .../kogito/examples/demo/OrdersProcessIT.java | 21 +- .../kogito/examples/demo/PersonsRestIT.java | 51 +++- .../config/CustomWorkItemHandlerConfig.java | 40 ---- .../CustomHumanTaskWorkItemHandler.java | 73 ------ .../usertasks/CustomUserTaskLifeCycle.java | 218 +++++++++++++++++ .../springboot/ApprovalsProcessTest.java | 86 ++++--- .../springboot/ApprovalsProcessTest.java | 49 ++-- .../oidc/springboot/ApprovalsProcessTest.java | 51 ++-- .../springboot/ApprovalsProcessTest.java | 51 ++-- 24 files changed, 1215 insertions(+), 593 deletions(-) delete mode 100644 kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java delete mode 100644 kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java create mode 100644 kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java delete mode 100644 kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java delete mode 100644 kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java create mode 100644 kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java diff --git a/kogito-quarkus-examples/flexible-process-quarkus/src/test/java/org/kie/kogito/flexible/example/quarkus/ServiceDeskProcessTest.java b/kogito-quarkus-examples/flexible-process-quarkus/src/test/java/org/kie/kogito/flexible/example/quarkus/ServiceDeskProcessTest.java index a5f39fc5cf..3bcad063f1 100644 --- a/kogito-quarkus-examples/flexible-process-quarkus/src/test/java/org/kie/kogito/flexible/example/quarkus/ServiceDeskProcessTest.java +++ b/kogito-quarkus-examples/flexible-process-quarkus/src/test/java/org/kie/kogito/flexible/example/quarkus/ServiceDeskProcessTest.java @@ -18,6 +18,7 @@ */ package org.kie.kogito.flexible.example.quarkus; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +43,7 @@ class ServiceDeskProcessTest { private static final String BASE_PATH = "/serviceDesk"; + private static final String USER_TASK_BASE_PATH = "/usertasks/instance"; static { RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); @@ -91,31 +93,75 @@ private String createSupportCase() { } private void addSupportComment(String id) { - String location = given() + given() .basePath(BASE_PATH) .contentType(ContentType.JSON) + .queryParam("user", "kelly") .queryParam("group", "support") .when() - .post("/{id}/ReceiveSupportComment", id) + .post("/{id}/ReceiveSupportComment/trigger", id) .then() .statusCode(201) .header("Location", notNullValue()) .extract() .header("Location"); - String taskId = location.substring(location.lastIndexOf("/") + 1); + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "kelly") + .queryParam("group", "support") + .contentType(ContentType.JSON) + .when() + .get() + .then() + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "claim") + .queryParam("user", "kelly") + .queryParam("group", "support") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); Map params = new HashMap<>(); params.put("comment", "Have you tried to turn it off and on again?"); given() - .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) .queryParam("user", "kelly") .queryParam("group", "support") + .body(params) + .when() + .put("/{userTaskId}/outputs", userTaskId) + .then() + .statusCode(200); + + given() .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "kelly") + .queryParam("group", "support") + .body(Collections.emptyMap()) .when() - .body(params) - .post("/{id}/ReceiveSupportComment/{taskId}", id, taskId) + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); + + given() + .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .when() + .get(id) .then() .statusCode(200) .body("supportCase.state", is(State.WAITING_FOR_CUSTOMER.name())) @@ -125,37 +171,82 @@ private void addSupportComment(String id) { } private void addCustomerComment(String id) { - String location = given() + given() .basePath(BASE_PATH) .contentType(ContentType.JSON) + .queryParam("user", "Paco") .queryParam("group", "customer") .when() - .post("/{id}/ReceiveCustomerComment", id) + .post("/{id}/ReceiveCustomerComment/trigger", id) .then() .statusCode(201) .header("Location", notNullValue()) .extract() .header("Location"); - String taskId = location.substring(location.lastIndexOf("/") + 1); + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "Paco") + .queryParam("group", "customer") + .contentType(ContentType.JSON) + .when() + .get() + .then() + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "claim") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); Map params = new HashMap<>(); params.put("comment", "Great idea!"); given() - .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) .queryParam("user", "Paco") .queryParam("group", "customer") + .body(params) + .when() + .put("/{userTaskId}/outputs", userTaskId) + .then() + .statusCode(200); + + given() .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) .when() - .body(params) - .post("/{id}/ReceiveCustomerComment/{taskId}", id, taskId) + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); + + given() + .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .when() + .get(id) .then() .statusCode(200) .body("supportCase.state", is(State.WAITING_FOR_OWNER.name())) .body("supportCase.comments[1].text", is(params.get("comment"))) .body("supportCase.comments[1].author", is("Paco")) .body("supportCase.comments[1].date", notNullValue()); + } private void resolveCase(String id) { @@ -170,9 +261,10 @@ private void resolveCase(String id) { } private void sendQuestionnaire(String id) { - String taskId = given() + given() .basePath(BASE_PATH) .contentType(ContentType.JSON) + .queryParam("user", "Paco") .queryParam("group", "customer") .when() .get("/{id}/tasks", id) @@ -182,24 +274,59 @@ private void sendQuestionnaire(String id) { .body("[0].name", is("Questionnaire")) .extract() .path("[0].id"); + + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "Paco") + .queryParam("group", "customer") + .contentType(ContentType.JSON) + .when() + .get() + .then() + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "claim") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); + Map params = new HashMap<>(); params.put("comment", "Kogito is great!"); params.put("evaluation", 10); given() - .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) .queryParam("user", "Paco") .queryParam("group", "customer") + .body(params) + .when() + .put("/{userTaskId}/outputs", userTaskId) + .then() + .statusCode(200); + + given() .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) .when() - .body(params) - .post("/{id}/Questionnaire/{taskId}/", id, taskId) + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200) - .body("supportCase.state", is(State.CLOSED.name())) - .body("supportCase.questionnaire.comment", is(params.get("comment"))) - .body("supportCase.questionnaire.evaluation", is(params.get("evaluation"))) - .body("supportCase.questionnaire.date", notNullValue()); + .statusCode(200); + } private void checkAllProcessesFinished() { @@ -207,7 +334,7 @@ private void checkAllProcessesFinished() { .basePath(BASE_PATH) .contentType(ContentType.JSON) .when() - .get("/") + .get("") .as(List.class); assertTrue(processes.isEmpty()); diff --git a/kogito-quarkus-examples/kogito-travel-agency/extended/travels/src/test/java/org/acme/travel/TravelIT.java b/kogito-quarkus-examples/kogito-travel-agency/extended/travels/src/test/java/org/acme/travel/TravelIT.java index b04106ebc0..c9aab73b40 100644 --- a/kogito-quarkus-examples/kogito-travel-agency/extended/travels/src/test/java/org/acme/travel/TravelIT.java +++ b/kogito-quarkus-examples/kogito-travel-agency/extended/travels/src/test/java/org/acme/travel/TravelIT.java @@ -41,6 +41,9 @@ import org.kie.kogito.process.WorkItem; import org.kie.kogito.testcontainers.quarkus.InfinispanQuarkusTestResource; import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; @@ -49,6 +52,7 @@ import jakarta.inject.Named; import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.core.StringContains.containsString; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -74,31 +78,31 @@ public class TravelIT { @Named("travels") Process travelsProcess; - private ProcessInstance processInstance; + @Inject + UserTasks userTasks; @BeforeEach public void cleanUp() { abort(travelsProcess.instances()); - processInstance = null; } @Test public void testTravelNoVisaRequired() { - whenNewTravel(TRAVELLER_FROM_POLAND, TRIP_TO_POLAND); - thenProcessIsActive(); - thenHotelAndFlightAreChosen(); + String processInstance = whenNewTravel(TRAVELLER_FROM_POLAND, TRIP_TO_POLAND); + thenProcessIsActive(processInstance); + thenHotelAndFlightAreChosen(processInstance); - whenConfirmTravel(); - thenProcessIsCompleted(); + whenConfirmTravel(processInstance); + thenProcessIsCompleted(processInstance); } @Test public void testTravelVisaRequired() { - whenNewTravel(TRAVELLER_FROM_POLAND, TRIP_TO_US); - thenProcessIsActive(); + String processInstance = whenNewTravel(TRAVELLER_FROM_POLAND, TRIP_TO_US); + thenProcessIsActive(processInstance); - whenAddVisaApplication(); - thenProcessIsActive(); + whenAddVisaApplication(processInstance); + thenProcessIsActive(processInstance); } @Test @@ -114,7 +118,7 @@ public void testProcessMetrics() { PROJECT_ARTIFACT_ID, PROJECT_VERSION))); } - private void whenNewTravel(Traveller traveller, Trip trip) { + private String whenNewTravel(Traveller traveller, Trip trip) { Model m = travelsProcess.createModel(); Map parameters = new HashMap<>(); parameters.put("traveller", traveller); @@ -122,26 +126,38 @@ private void whenNewTravel(Traveller traveller, Trip trip) { m.fromMap(parameters); - this.processInstance = travelsProcess.createInstance(m); - this.processInstance.start(); + ProcessInstance processInstance = travelsProcess.createInstance(m); + processInstance.start(); + return processInstance.id(); } - private void whenConfirmTravel() { - WorkItem workItem = thenNextStepIs(STEP_CONFIRM_TRAVEL, SECURITY_POLICY_JDOE); - Map results = new HashMap<>(); - results.put("approve", true); - processInstance.completeWorkItem(workItem.getId(), results, SECURITY_POLICY_JDOE); + private void whenConfirmTravel(String processInstance) { + WorkItem workItem = thenNextStepIs(processInstance, STEP_CONFIRM_TRAVEL, SECURITY_POLICY_JDOE); + assertThat(workItem).isNotNull(); + + List userTaskInstances = userTasks.instances().findByIdentity(IdentityProviders.of("jdoe")); + userTaskInstances.forEach(ut -> { + ut.setOutput("approve", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), IdentityProviders.of("jdoe")); + }); + } - private void whenAddVisaApplication() { - Map results = new HashMap<>(); - results.put("visaApplication", new VisaApplication("Jan", "Kowalski", "New York", "US", 10, "XXX098765")); - results.put("visaResolution", new VisaResolution(true, "Test reason")); - WorkItem workItem = thenNextStepIs(STEP_VISA_APPLICATION, SECURITY_POLICY_JDOE); - processInstance.completeWorkItem(workItem.getId(), results, SECURITY_POLICY_JDOE); + private void whenAddVisaApplication(String id) { + ProcessInstance processInstance = travelsProcess.instances().findById(id).get(); + WorkItem workItem = thenNextStepIs(processInstance.id(), STEP_VISA_APPLICATION, SECURITY_POLICY_JDOE); + assertThat(workItem).isNotNull(); + List userTaskInstances = userTasks.instances().findByIdentity(IdentityProviders.of("jdoe")); + userTaskInstances.forEach(ut -> { + ut.setOutput("visaApplication", new VisaApplication("Jan", "Kowalski", "New York", "US", 10, "XXX098765")); + ut.setOutput("visaResolution", new VisaResolution(true, "Test reason")); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), IdentityProviders.of("jdoe")); + }); + } - private WorkItem thenNextStepIs(String expected, SecurityPolicy policy) { + private WorkItem thenNextStepIs(String id, String expected, SecurityPolicy policy) { + ProcessInstance processInstance = travelsProcess.instances().findById(id).get(); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); WorkItem next = workItems.get(0); @@ -149,15 +165,17 @@ private WorkItem thenNextStepIs(String expected, SecurityPolicy policy) { return next; } - private void thenProcessIsActive() { - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, this.processInstance.status()); + private void thenProcessIsActive(String id) { + ProcessInstance processInstance = travelsProcess.instances().findById(id).get(); + assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); } - private void thenProcessIsCompleted() { - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, this.processInstance.status()); + private void thenProcessIsCompleted(String id) { + assertThat(travelsProcess.instances().findById(id)).isEmpty(); } - private void thenHotelAndFlightAreChosen() { + private void thenHotelAndFlightAreChosen(String id) { + ProcessInstance processInstance = travelsProcess.instances().findById(id).get(); Model result = (Model) processInstance.variables(); assertEquals(6, result.toMap().size()); Hotel hotel = (Hotel) result.toMap().get("hotel"); diff --git a/kogito-quarkus-examples/process-quarkus-example/src/test/java/org/kie/kogito/examples/PersonsRestIT.java b/kogito-quarkus-examples/process-quarkus-example/src/test/java/org/kie/kogito/examples/PersonsRestIT.java index 011eba9786..3981f47497 100644 --- a/kogito-quarkus-examples/process-quarkus-example/src/test/java/org/kie/kogito/examples/PersonsRestIT.java +++ b/kogito-quarkus-examples/process-quarkus-example/src/test/java/org/kie/kogito/examples/PersonsRestIT.java @@ -18,6 +18,8 @@ */ package org.kie.kogito.examples; +import java.util.Collections; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIfSystemProperty; @@ -34,18 +36,20 @@ import jakarta.inject.Named; import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.kie.kogito.test.utils.ProcessInstancesTestUtils.abort; -@SuppressWarnings("rawtypes") @QuarkusTest @QuarkusTestResource(value = InfinispanQuarkusTestResource.Conditional.class) @QuarkusTestResource(value = KafkaQuarkusTestResource.Conditional.class) public class PersonsRestIT { + private static String USER_TASK_BASE_PATH = "/usertasks/instance"; + @Inject @Named("persons") Process personProcess; @@ -236,19 +240,45 @@ public void testChildPersonsRestWithSecurityPolicyAndLifeCycles() { .body("[0].name", is("ChildrenHandling")) .extract() .path("[0].id"); + + assertThat(taskId).isNotNull(); // test claim task - String fixedOrderPayload = "{}"; - given().contentType(ContentType.JSON).accept(ContentType.JSON).body(fixedOrderPayload).when().post("/persons/" + firstCreatedId + "/ChildrenHandling/" + taskId + "?phase=claim&user=admin") + + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "admin") + .queryParam("group", "admins") + .contentType(ContentType.JSON) + .when() + .get() .then() - .statusCode(200).body("id", is(firstCreatedId)); - // test release task - given().contentType(ContentType.JSON).accept(ContentType.JSON).body(fixedOrderPayload).when().post("/persons/" + firstCreatedId + "/ChildrenHandling/" + taskId + "?phase=release&user=admin") + .statusCode(200) + .extract() + .body() + .path("[0].id"); + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "release") + .queryParam("user", "admin") + .queryParam("group", "admins") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200).body("id", is(firstCreatedId)); - // test skip - given().contentType(ContentType.JSON).accept(ContentType.JSON).body(fixedOrderPayload).when().post("/persons/" + firstCreatedId + "/ChildrenHandling/" + taskId + "?phase=skip&user=admin") + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "skip") + .queryParam("user", "admin") + .queryParam("group", "admins") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200).body("id", is(firstCreatedId)); + .statusCode(200); // get all persons make sure there is zero given().accept(ContentType.JSON).when().get("/persons").then().statusCode(200) diff --git a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java b/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java deleted file mode 100644 index 745f9f2e06..0000000000 --- a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels.config; - -import org.acme.travels.usertasks.CustomHumanTaskWorkItemHandler; -import org.kie.kogito.process.impl.DefaultWorkItemHandlerConfig; - -import jakarta.enterprise.context.ApplicationScoped; - -/** - * Custom work item handler configuration to change default work item handler for user tasks - * to take into account custom phases - * - *
    - *
  • Start
  • - *
  • Complete - an extension to default Complete phase that will allow only completion from started tasks
  • - *
- * - */ -@ApplicationScoped -public class CustomWorkItemHandlerConfig extends DefaultWorkItemHandlerConfig { - { - register("Human Task", new CustomHumanTaskWorkItemHandler()); - } -} diff --git a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java b/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java deleted file mode 100644 index 0a3fa0eabb..0000000000 --- a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels.usertasks; - -import java.util.Optional; - -import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItem; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemManager; -import org.kie.kogito.internal.process.workitem.WorkItemLifeCycle; -import org.kie.kogito.internal.process.workitem.WorkItemPhaseState; -import org.kie.kogito.internal.process.workitem.WorkItemTerminationType; -import org.kie.kogito.internal.process.workitem.WorkItemTransition; -import org.kie.kogito.process.workitems.impl.DefaultKogitoWorkItemHandler; -import org.kie.kogito.process.workitems.impl.DefaultWorkItemLifeCycle; -import org.kie.kogito.process.workitems.impl.DefaultWorkItemLifeCyclePhase; - -public class CustomHumanTaskWorkItemHandler extends DefaultKogitoWorkItemHandler { - - public static final String TRANSITION_COMPLETE = "complete"; - public static final String TRANSITION_ABORT = "abort"; - public static final String TRANSITION_ACTIVATE = "activate"; - public static final String TRANSITION_START = "start"; - public static final String TRANSITION_SKIP = "skip"; - - @Override - public WorkItemLifeCycle initialize() { - WorkItemPhaseState initialized = WorkItemPhaseState.initialized(); - WorkItemPhaseState completed = WorkItemPhaseState.of("Completed", WorkItemTerminationType.COMPLETE); - WorkItemPhaseState aborted = WorkItemPhaseState.of("Aborted", WorkItemTerminationType.ABORT); - WorkItemPhaseState activated = WorkItemPhaseState.of("Activated"); - WorkItemPhaseState started = WorkItemPhaseState.of("Started"); - - DefaultWorkItemLifeCyclePhase active = new DefaultWorkItemLifeCyclePhase(TRANSITION_ACTIVATE, initialized, activated, this::activateWorkItemHandler); - DefaultWorkItemLifeCyclePhase start = new DefaultWorkItemLifeCyclePhase(TRANSITION_START, activated, started, this::activateWorkItemHandler); - DefaultWorkItemLifeCyclePhase complete = new DefaultWorkItemLifeCyclePhase(TRANSITION_COMPLETE, started, completed, this::completeWorkItemHandler); - DefaultWorkItemLifeCyclePhase abort = new DefaultWorkItemLifeCyclePhase(TRANSITION_ABORT, started, aborted, this::abortWorkItemHandler); - - return new DefaultWorkItemLifeCycle(active, start, abort, complete); - } - - @Override - public Optional completeWorkItemHandler(KogitoWorkItemManager manager, KogitoWorkItemHandler handler, KogitoWorkItem workitem, WorkItemTransition transition) { - getUserFromTransition(transition).ifPresent(e -> workitem.setOutput("ActorId", e)); - return Optional.empty(); - } - - private Optional getUserFromTransition(WorkItemTransition transition) { - Optional securityPolicy = transition.policies().stream().filter(SecurityPolicy.class::isInstance).map(SecurityPolicy.class::cast).findAny(); - if (securityPolicy.isPresent()) { - return Optional.ofNullable(securityPolicy.get().getUser()); - } - return Optional.empty(); - } -} diff --git a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java b/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java new file mode 100644 index 0000000000..e372c4ef1b --- /dev/null +++ b/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.acme.travels.usertasks; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.kie.kogito.auth.IdentityProvider; +import org.kie.kogito.internal.process.workitem.NotAuthorizedException; +import org.kie.kogito.usertask.UserTaskAssignmentStrategy; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.impl.DefaultUserTaskInstance; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskTransitionToken; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTransition; +import org.kie.kogito.usertask.lifecycle.UserTaskLifeCycle; +import org.kie.kogito.usertask.lifecycle.UserTaskState; +import org.kie.kogito.usertask.lifecycle.UserTaskState.TerminationType; +import org.kie.kogito.usertask.lifecycle.UserTaskTransition; +import org.kie.kogito.usertask.lifecycle.UserTaskTransitionException; +import org.kie.kogito.usertask.lifecycle.UserTaskTransitionToken; + +import jakarta.inject.Singleton; + +@Singleton +public class CustomUserTaskLifeCycle implements UserTaskLifeCycle { + public static final String WORKFLOW_ENGINE_USER = "WORKFLOW_ENGINE_USER"; + + public static final String PARAMETER_USER = "USER"; + public static final String PARAMETER_NOTIFY = "NOTIFY"; + + public static final String ACTIVATE = "activate"; + public static final String START = "start"; + public static final String CLAIM = "claim"; + public static final String RELEASE = "release"; + public static final String COMPLETE = "complete"; + public static final String SKIP = "skip"; + public static final String FAIL = "fail"; + + public static final UserTaskState INACTIVE = UserTaskState.initalized(); + public static final UserTaskState ACTIVE = UserTaskState.of("Active"); + public static final UserTaskState STARTED = UserTaskState.of("Started"); + public static final UserTaskState RESERVED = UserTaskState.of("Reserved"); + public static final UserTaskState COMPLETED = UserTaskState.of("Completed", TerminationType.COMPLETED); + public static final UserTaskState OBSOLETE = UserTaskState.of("Obsolete", TerminationType.OBSOLETE); + + private final UserTaskTransition T_NEW_ACTIVE = new DefaultUserTransition(ACTIVATE, INACTIVE, ACTIVE, this::activate); + private final UserTaskTransition T_ACTIVE_START = new DefaultUserTransition(START, ACTIVE, STARTED, this::start); + private final UserTaskTransition T_START_RESERVED = new DefaultUserTransition(CLAIM, STARTED, RESERVED, this::claim); + private final UserTaskTransition T_RESERVED_COMPLETED = new DefaultUserTransition(COMPLETE, RESERVED, COMPLETED, this::complete); + + private final UserTaskTransition T_ACTIVE_SKIPPED = new DefaultUserTransition(SKIP, ACTIVE, OBSOLETE, this::skip); + private final UserTaskTransition T_STARTED_SKIPPED = new DefaultUserTransition(SKIP, STARTED, OBSOLETE, this::skip); + private final UserTaskTransition T_RESERVED_SKIPPED = new DefaultUserTransition(SKIP, RESERVED, OBSOLETE, this::skip); + + private final UserTaskTransition T_RESERVED_ACTIVE = new DefaultUserTransition(RELEASE, RESERVED, ACTIVE, this::release); + + private List transitions; + + public CustomUserTaskLifeCycle() { + transitions = List.of( + T_NEW_ACTIVE, + T_ACTIVE_START, + T_START_RESERVED, + T_ACTIVE_SKIPPED, + T_STARTED_SKIPPED, + T_RESERVED_ACTIVE, + T_RESERVED_COMPLETED, + T_RESERVED_SKIPPED); + } + + @Override + public List allowedTransitions(UserTaskInstance userTaskInstance) { + return transitions.stream().filter(t -> t.source().equals(userTaskInstance.getStatus())).toList(); + } + + @Override + public Optional transition(UserTaskInstance userTaskInstance, UserTaskTransitionToken userTaskTransitionToken, IdentityProvider identityProvider) { + checkPermission(userTaskInstance, identityProvider); + UserTaskTransition transition = transitions.stream() + .filter(t -> t.source().equals(userTaskInstance.getStatus()) && t.id().equals(userTaskTransitionToken.transitionId())) + .findFirst() + .orElseThrow(() -> new UserTaskTransitionException("Invalid transition from " + userTaskInstance.getStatus())); + return transition.executor().execute(userTaskInstance, userTaskTransitionToken, identityProvider); + } + + @Override + public UserTaskTransitionToken newCompleteTransitionToken(UserTaskInstance userTaskInstance, Map data) { + return newTransitionToken(COMPLETE, userTaskInstance.getStatus(), data); + } + + @Override + public UserTaskTransitionToken newAbortTransitionToken(UserTaskInstance userTaskInstance, Map data) { + return newTransitionToken(SKIP, userTaskInstance.getStatus(), data); + } + + @Override + public UserTaskTransitionToken newTransitionToken(String transitionId, UserTaskInstance userTaskInstance, Map data) { + return newTransitionToken(transitionId, userTaskInstance.getStatus(), data); + } + + public UserTaskTransitionToken newTransitionToken(String transitionId, UserTaskState state, Map data) { + UserTaskTransition transition = transitions.stream().filter(e -> e.source().equals(state) && e.id().equals(transitionId)).findAny() + .orElseThrow(() -> new RuntimeException("Invalid transition " + transitionId + " from " + state)); + return new DefaultUserTaskTransitionToken(transition.id(), transition.source(), transition.target(), data); + } + + public Optional activate(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + return Optional.empty(); + } + + public Optional start(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + String user = assignStrategy(userTaskInstance, identityProvider); + if (user != null) { + return Optional.of(newTransitionToken(CLAIM, STARTED, Map.of(PARAMETER_USER, user))); + } + return Optional.empty(); + } + + public Optional claim(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + if (userTaskInstance instanceof DefaultUserTaskInstance defaultUserTaskInstance) { + if (token.data().containsKey(PARAMETER_USER)) { + defaultUserTaskInstance.setActuaOwner((String) token.data().get(PARAMETER_USER)); + } else { + defaultUserTaskInstance.setActuaOwner(identityProvider.getName()); + } + } + return Optional.empty(); + } + + public Optional release(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + if (userTaskInstance instanceof DefaultUserTaskInstance defaultUserTaskInstance) { + defaultUserTaskInstance.setActuaOwner(null); + } + return Optional.empty(); + } + + public Optional complete(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + token.data().forEach(userTaskInstance::setOutput); + return Optional.empty(); + } + + public Optional skip(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + if (token.data().containsKey(PARAMETER_NOTIFY)) { + userTaskInstance.getMetadata().put(PARAMETER_NOTIFY, token.data().get(PARAMETER_NOTIFY)); + } + if (userTaskInstance instanceof DefaultUserTaskInstance defaultUserTaskInstance) { + defaultUserTaskInstance.setActuaOwner(identityProvider.getName()); + } + return Optional.empty(); + } + + private String assignStrategy(UserTaskInstance userTaskInstance, IdentityProvider identityProvider) { + UserTaskAssignmentStrategy assignmentStrategy = userTaskInstance.getUserTask().getAssignmentStrategy(); + return assignmentStrategy.computeAssigment(userTaskInstance, identityProvider).orElse(null); + } + + private void checkPermission(UserTaskInstance userTaskInstance, IdentityProvider identityProvider) { + String user = identityProvider.getName(); + Collection roles = identityProvider.getRoles(); + + if (WORKFLOW_ENGINE_USER.equals(user)) { + return; + } + + // first we check admins + Set adminUsers = userTaskInstance.getAdminUsers(); + if (adminUsers.contains(user)) { + return; + } + + Set userAdminGroups = new HashSet<>(userTaskInstance.getAdminGroups()); + userAdminGroups.retainAll(roles); + if (!userAdminGroups.isEmpty()) { + return; + } + + if (userTaskInstance.getActualOwner() != null && userTaskInstance.getActualOwner().equals(user)) { + return; + } + + if (List.of(INACTIVE, ACTIVE, STARTED).contains(userTaskInstance.getStatus())) { + // there is no user + Set users = new HashSet<>(userTaskInstance.getPotentialUsers()); + users.removeAll(userTaskInstance.getExcludedUsers()); + if (users.contains(identityProvider.getName())) { + return; + } + + Set userPotGroups = new HashSet<>(userTaskInstance.getPotentialGroups()); + userPotGroups.retainAll(roles); + if (!userPotGroups.isEmpty()) { + return; + } + } + + throw new NotAuthorizedException("user " + user + " with roles " + roles + " not autorized to perform an operation on user task " + userTaskInstance.getId()); + } + +} diff --git a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/test/java/org/acme/travels/custom/lifecycle/quarkus/ApprovalsProcessTest.java b/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/test/java/org/acme/travels/custom/lifecycle/quarkus/ApprovalsProcessTest.java index 59af5b65fb..14935d692b 100644 --- a/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/test/java/org/acme/travels/custom/lifecycle/quarkus/ApprovalsProcessTest.java +++ b/kogito-quarkus-examples/process-usertasks-custom-lifecycle-quarkus/src/test/java/org/acme/travels/custom/lifecycle/quarkus/ApprovalsProcessTest.java @@ -25,16 +25,17 @@ import org.acme.travels.Address; import org.acme.travels.Traveller; +import org.acme.travels.usertasks.CustomUserTaskLifeCycle; import org.junit.jupiter.api.Test; import org.kie.kogito.Model; import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.InvalidTransitionException; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; import io.quarkus.test.junit.QuarkusTest; @@ -42,9 +43,9 @@ import jakarta.inject.Named; import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; @QuarkusTest public class ApprovalsProcessTest { @@ -53,6 +54,9 @@ public class ApprovalsProcessTest { @Inject Process approvalsProcess; + @Inject + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -76,9 +80,6 @@ public void testApprovalProcess() { assertEquals(1, workItems.size()); Map results = new HashMap<>(); results.put("approved", true); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); @@ -94,16 +95,8 @@ public void testApprovalProcess() { assertEquals(1, workItems.size()); results.put("approved", false); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); + assertThat(approvalsProcess.instances().findById(processInstance.id())).isNotPresent(); } @Test @@ -128,18 +121,15 @@ public void testApprovalProcessViaPhases() { List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - final String wiId = workItems.get(0).getId(); - - // test to make sure you can't complete if the task is not in started state - assertThrows(InvalidTransitionException.class, () -> processInstance.completeWorkItem(wiId, - Collections.singletonMap("approved", true), - SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))))); - - // now test going through phases - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), Collections.singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", Collections.singletonList("managers")); + ut.transition(CustomUserTaskLifeCycle.START, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(CustomUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(CustomUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); @@ -148,21 +138,20 @@ public void testApprovalProcessViaPhases() { identity = IdentityProviders.of("john", Collections.singletonList("managers")); policy = SecurityPolicy.of(identity); - processInstance.workItems(policy); - workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), Collections.singletonMap("approved", false), policy)); - - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", Collections.singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(CustomUserTaskLifeCycle.ACTIVE); + ut.transition(CustomUserTaskLifeCycle.START, Collections.emptyMap(), userIdentity); + ut.transition(CustomUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + ut.setOutput("approved", false); + ut.transition(CustomUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); + + assertThat(approvalsProcess.instances().findById(processInstance.id())).isNotPresent(); } } diff --git a/kogito-quarkus-examples/process-usertasks-quarkus/src/test/java/org/acme/travels/quarkus/ApprovalsProcessTest.java b/kogito-quarkus-examples/process-usertasks-quarkus/src/test/java/org/acme/travels/quarkus/ApprovalsProcessTest.java index b4a1690b2d..a00b83db87 100644 --- a/kogito-quarkus-examples/process-usertasks-quarkus/src/test/java/org/acme/travels/quarkus/ApprovalsProcessTest.java +++ b/kogito-quarkus-examples/process-usertasks-quarkus/src/test/java/org/acme/travels/quarkus/ApprovalsProcessTest.java @@ -27,18 +27,23 @@ import org.acme.travels.Traveller; import org.junit.jupiter.api.Test; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; import jakarta.inject.Named; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -49,6 +54,9 @@ public class ApprovalsProcessTest { @Inject Process approvalsProcess; + @Inject + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -65,8 +73,6 @@ public void testApprovalProcess() { SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); - processInstance.workItems(policy); - List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); Map results = new HashMap<>(); @@ -77,9 +83,7 @@ public void testApprovalProcess() { workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); + policy = SecurityPolicy.of(IdentityProviders.of("manager", Collections.singletonList("managers"))); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); @@ -90,7 +94,7 @@ public void testApprovalProcess() { Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } @@ -109,39 +113,46 @@ public void testApprovalProcessViaPhases() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), Collections.singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("mgmt"))); + policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); + identity = IdentityProviders.of("john", singletonList("managers")); + policy = SecurityPolicy.of(identity); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), Collections.singletonMap("approved", false), policy)); + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", singletonList("managers")); + ut.transition(DefaultUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", false); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); + // at this point the process instance does not exits. + + assertThat(approvalsProcess.instances().findById(processInstance.id())).isEmpty(); - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); } } diff --git a/kogito-quarkus-examples/process-usertasks-timer-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java b/kogito-quarkus-examples/process-usertasks-timer-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java index 4de5711322..fda6a39721 100644 --- a/kogito-quarkus-examples/process-usertasks-timer-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java +++ b/kogito-quarkus-examples/process-usertasks-timer-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java @@ -19,12 +19,14 @@ package org.kie.kogito.hr; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; import org.kie.kogito.process.Process; @@ -32,6 +34,9 @@ import org.kie.kogito.process.WorkItem; import org.kie.kogito.testcontainers.quarkus.InfinispanQuarkusTestResource; import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; @@ -39,6 +44,7 @@ import jakarta.inject.Inject; import jakarta.inject.Named; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -51,6 +57,9 @@ public class HiringProcessIT { @Inject Process hiringProcess; + @Inject + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -65,28 +74,33 @@ public void testApprovalProcess() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("jdoe", Arrays.asList("HR", "IT"))); + IdentityProvider jdoeUser = IdentityProviders.of("jdoe", Arrays.asList("HR", "IT")); + SecurityPolicy policy = SecurityPolicy.of(jdoeUser); processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - Map results = new HashMap<>(); - results.put("approve", true); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); + + List userTaskInstances = userTasks.instances().findByIdentity(IdentityProviders.of("jdoe")); + userTaskInstances.forEach(ut -> { + ut.setOutput("approve", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), IdentityProviders.of("jdoe")); + }); processInstance.workItems(policy); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - results.put("approve", false); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); + userTaskInstances = userTasks.instances().findByIdentity(IdentityProviders.of("jdoe")); + userTaskInstances.forEach(ut -> { + ut.setOutput("approve", false); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), IdentityProviders.of("jdoe")); + }); + + // process does not exist anymore + assertThat(hiringProcess.instances().findById(processInstance.id())).isEmpty(); - Model result = (Model) processInstance.variables(); - assertEquals(3, result.toMap().size()); - assertEquals(true, result.toMap().get("hr_approval")); - assertEquals(false, result.toMap().get("it_approval")); } } diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsProcessIT.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsProcessIT.java index 5485991eaf..abcb465b3a 100644 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsProcessIT.java +++ b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsProcessIT.java @@ -25,33 +25,35 @@ import org.junit.jupiter.api.Test; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; -import org.kie.kogito.testcontainers.quarkus.KeycloakQuarkusTestResource; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; -import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; import jakarta.inject.Named; import static java.util.Collections.emptyMap; -import static java.util.Collections.singletonMap; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @QuarkusTest -@QuarkusTestResource(KeycloakQuarkusTestResource.class) public class ApprovalsProcessIT { @Named("approvals") @Inject Process approvalsProcess; + @Inject + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -92,7 +94,7 @@ public void testApprovalProcess() { Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } @@ -118,10 +120,12 @@ public void testApprovalProcessViaPhases() { List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", true), policy)); + IdentityProvider managerUser = IdentityProviders.of("manager"); + List userTasksInstances = userTasks.instances().findByIdentity(managerUser); + userTasksInstances.forEach(ut -> { + ut.setOutput("approved", true); + ut.transition("complete", emptyMap(), managerUser); + }); policy = SecurityPolicy.of(IdentityProviders.of("admin", Arrays.asList("mgmt"))); workItems = processInstance.workItems(policy); @@ -134,16 +138,15 @@ public void testApprovalProcessViaPhases() { workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", false), policy)); + IdentityProvider johnUser = IdentityProviders.of("john", List.of("managers")); + userTasksInstances = userTasks.instances().findByIdentity(johnUser); + userTasksInstances.forEach(ut -> { + ut.transition("claim", emptyMap(), johnUser); + ut.setOutput("approved", false); + ut.transition("complete", emptyMap(), johnUser); + }); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); + assertThat(approvalsProcess.instances().findById(processInstance.id())).isEmpty(); - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); } } diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsRestIT.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsRestIT.java index 8ff5644773..edaf5057ff 100644 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsRestIT.java +++ b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus/src/test/java/org/acme/travels/ApprovalsRestIT.java @@ -28,6 +28,7 @@ import io.restassured.http.ContentType; import static io.restassured.RestAssured.given; +import static java.util.Collections.emptyMap; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -35,6 +36,8 @@ @QuarkusTestResource(KeycloakQuarkusTestResource.class) public class ApprovalsRestIT { + private static final String USER_TASK_BASE_PATH = "/usertasks/instance"; + @QuarkusTestProperty(name = "quarkus.oidc.auth-server-url") private String keycloakUrl; @@ -50,7 +53,6 @@ public void testStartApprovalUnauthorized() { .statusCode(401); } - @SuppressWarnings("rawtypes") @Test public void testStartApprovalAuthorized() { @@ -85,31 +87,32 @@ public void testStartApprovalAuthorized() { .body("id", is(id)); // tasks assigned in just started approval - - String taskInfo = given() - .auth() - .oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) + String userTaskId = given() + .auth().oauth2(getAccessToken("mary")) + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "mary") + .queryParam("group", "managers") + .contentType(ContentType.JSON) .when() - .get("/approvals/" + id + "/tasks?user=admin&group=managers") + .get() .then() .statusCode(200) - .body("size()", is(1)) - .body("[0].name", is("firstLineApproval")) .extract() + .body() .path("[0].id"); - String payload = "{}"; given() - .auth().oauth2(getAccessToken("mary")) .contentType(ContentType.JSON) - .accept(ContentType.JSON) - .body(payload) + .auth().oauth2(getAccessToken("mary")) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "manager") + .queryParam("group", "managers") + .body(emptyMap()) .when() - .post("/approvals/" + id + "/firstLineApproval/" + taskInfo + "?user=mary&group=managers") + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200) - .body("id", is(id)); + .statusCode(200); // lastly abort the approval given() diff --git a/kogito-quarkus-examples/process-usertasks-with-security-quarkus/src/test/java/org/acme/travels/security/quarkus/ApprovalsProcessTest.java b/kogito-quarkus-examples/process-usertasks-with-security-quarkus/src/test/java/org/acme/travels/security/quarkus/ApprovalsProcessTest.java index 7faa81a290..ca90e9a6e2 100644 --- a/kogito-quarkus-examples/process-usertasks-with-security-quarkus/src/test/java/org/acme/travels/security/quarkus/ApprovalsProcessTest.java +++ b/kogito-quarkus-examples/process-usertasks-with-security-quarkus/src/test/java/org/acme/travels/security/quarkus/ApprovalsProcessTest.java @@ -27,20 +27,23 @@ import org.acme.travels.Traveller; import org.junit.jupiter.api.Test; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; import jakarta.inject.Named; -import static java.util.Collections.emptyMap; -import static java.util.Collections.singletonMap; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -51,6 +54,9 @@ public class ApprovalsProcessTest { @Inject Process approvalsProcess; + @Inject + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -92,7 +98,7 @@ public void testApprovalProcess() { Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } @@ -111,38 +117,47 @@ public void testApprovalProcessViaPhases() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("mgmt"))); + policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); + identity = IdentityProviders.of("john", singletonList("managers")); + policy = SecurityPolicy.of(identity); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", false), policy)); - + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", singletonList("managers")); + ut.transition(DefaultUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", false); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } diff --git a/kogito-springboot-examples/flexible-process-springboot/src/test/java/org/kie/kogito/flexible/example/springboot/ServiceDeskProcessTest.java b/kogito-springboot-examples/flexible-process-springboot/src/test/java/org/kie/kogito/flexible/example/springboot/ServiceDeskProcessTest.java index d0f5da8495..26b16e4828 100644 --- a/kogito-springboot-examples/flexible-process-springboot/src/test/java/org/kie/kogito/flexible/example/springboot/ServiceDeskProcessTest.java +++ b/kogito-springboot-examples/flexible-process-springboot/src/test/java/org/kie/kogito/flexible/example/springboot/ServiceDeskProcessTest.java @@ -18,6 +18,7 @@ */ package org.kie.kogito.flexible.example.springboot; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -51,6 +52,7 @@ class ServiceDeskProcessTest { int port; private static final String BASE_PATH = "/serviceDesk"; + private static final String USER_TASK_BASE_PATH = "/usertasks/instance"; static { RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); @@ -68,7 +70,6 @@ void testSupportCaseExample() { addCustomerComment(id); resolveCase(id); sendQuestionnaire(id); - checkAllProcessesFinished(); } @@ -106,32 +107,75 @@ private String createSupportCase() { } private void addSupportComment(String id) { - String location = given() + given() .basePath(BASE_PATH) .contentType(ContentType.JSON) .queryParam("user", "kelly") .queryParam("group", "support") .when() - .post("/{id}/ReceiveSupportComment", id) + .post("/{id}/ReceiveSupportComment/trigger", id) .then() .statusCode(201) .header("Location", notNullValue()) .extract() .header("Location"); - String taskId = location.substring(location.lastIndexOf("/") + 1); + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "kelly") + .queryParam("group", "support") + .contentType(ContentType.JSON) + .when() + .get() + .then() + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "claim") + .queryParam("user", "kelly") + .queryParam("group", "support") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); Map params = new HashMap<>(); params.put("comment", "Have you tried to turn it off and on again?"); given() - .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) .queryParam("user", "kelly") .queryParam("group", "support") + .body(params) + .when() + .put("/{userTaskId}/outputs", userTaskId) + .then() + .statusCode(200); + + given() .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "kelly") + .queryParam("group", "support") + .body(Collections.emptyMap()) .when() - .body(params) - .post("/{id}/ReceiveSupportComment/{taskId}", id, taskId) + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); + + given() + .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .when() + .get(id) .then() .statusCode(200) .body("supportCase.state", is(State.WAITING_FOR_CUSTOMER.name())) @@ -141,38 +185,82 @@ private void addSupportComment(String id) { } private void addCustomerComment(String id) { - String location = given() + given() .basePath(BASE_PATH) .contentType(ContentType.JSON) .queryParam("user", "Paco") .queryParam("group", "customer") .when() - .post("/{id}/ReceiveCustomerComment", id) + .post("/{id}/ReceiveCustomerComment/trigger", id) .then() .statusCode(201) .header("Location", notNullValue()) .extract() .header("Location"); - String taskId = location.substring(location.lastIndexOf("/") + 1); + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "Paco") + .queryParam("group", "customer") + .contentType(ContentType.JSON) + .when() + .get() + .then() + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "claim") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); Map params = new HashMap<>(); params.put("comment", "Great idea!"); given() - .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) .queryParam("user", "Paco") .queryParam("group", "customer") + .body(params) + .when() + .put("/{userTaskId}/outputs", userTaskId) + .then() + .statusCode(200); + + given() .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) .when() - .body(params) - .post("/{id}/ReceiveCustomerComment/{taskId}", id, taskId) + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); + + given() + .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .when() + .get(id) .then() .statusCode(200) .body("supportCase.state", is(State.WAITING_FOR_OWNER.name())) .body("supportCase.comments[1].text", is(params.get("comment"))) .body("supportCase.comments[1].author", is("Paco")) .body("supportCase.comments[1].date", notNullValue()); + } private void resolveCase(String id) { @@ -186,9 +274,8 @@ private void resolveCase(String id) { .body("supportCase.state", is(State.RESOLVED.name())); } - @SuppressWarnings("unchecked") private void sendQuestionnaire(String id) { - String taskId = given() + given() .basePath(BASE_PATH) .contentType(ContentType.JSON) .queryParam("user", "Paco") @@ -201,26 +288,59 @@ private void sendQuestionnaire(String id) { .body("[0].name", is("Questionnaire")) .extract() .path("[0].id"); - ; + + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "Paco") + .queryParam("group", "customer") + .contentType(ContentType.JSON) + .when() + .get() + .then() + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "claim") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) + .then() + .statusCode(200); Map params = new HashMap<>(); params.put("comment", "Kogito is great!"); params.put("evaluation", 10); given() - .basePath(BASE_PATH) + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) .queryParam("user", "Paco") .queryParam("group", "customer") + .body(params) + .when() + .put("/{userTaskId}/outputs", userTaskId) + .then() + .statusCode(200); + + given() .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "complete") + .queryParam("user", "Paco") + .queryParam("group", "customer") + .body(Collections.emptyMap()) .when() - .body(params) - .post("/{id}/Questionnaire/{taskId}", id, taskId) + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200) - .body("supportCase.state", is(State.CLOSED.name())) - .body("supportCase.questionnaire.comment", is(params.get("comment"))) - .body("supportCase.questionnaire.evaluation", is(params.get("evaluation"))) - .body("supportCase.questionnaire.date", notNullValue()); + .statusCode(200); + } private void checkAllProcessesFinished() { diff --git a/kogito-springboot-examples/process-decisions-rest-springboot/src/main/resources/traffic-rules-dmn-wih.bpmn b/kogito-springboot-examples/process-decisions-rest-springboot/src/main/resources/traffic-rules-dmn-wih.bpmn index 6aa79d7bdf..539081fd1d 100644 --- a/kogito-springboot-examples/process-decisions-rest-springboot/src/main/resources/traffic-rules-dmn-wih.bpmn +++ b/kogito-springboot-examples/process-decisions-rest-springboot/src/main/resources/traffic-rules-dmn-wih.bpmn @@ -156,7 +156,7 @@ DMN]]> _38F4877F-50AD-4500-98E1-9B4FD3972291_TaskNameInputX - + @@ -228,7 +228,7 @@ DRL]]> _D8D9E6BA-5940-41F5-BF3A-1A08ADA72A4C_TaskNameInputX - + diff --git a/kogito-springboot-examples/process-springboot-example/src/main/resources/org/kie/kogito/examples/persons.bpmn2 b/kogito-springboot-examples/process-springboot-example/src/main/resources/org/kie/kogito/examples/persons.bpmn2 index ca5242103c..c6a3946d17 100644 --- a/kogito-springboot-examples/process-springboot-example/src/main/resources/org/kie/kogito/examples/persons.bpmn2 +++ b/kogito-springboot-examples/process-springboot-example/src/main/resources/org/kie/kogito/examples/persons.bpmn2 @@ -1,18 +1,18 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -21,10 +21,10 @@ - + - + @@ -73,7 +73,7 @@ SequenceFlow_5 SequenceFlow_3 - + @@ -82,40 +82,40 @@ SequenceFlow_3 SequenceFlow_4 - - - - + + + + - UserTask_1_TaskNameInputX - UserTask_1_personInputX - UserTask_1_SkippableInputX - UserTask_1_PriorityInputX + UserTask_2_TaskNameInputX + UserTask_2_personInputX + UserTask_2_SkippableInputX + UserTask_2_PriorityInputX - UserTask_1_TaskNameInputX + UserTask_2_TaskNameInputX - + person - UserTask_1_personInputX + UserTask_2_personInputX - UserTask_1_SkippableInputX + UserTask_2_SkippableInputX - + - UserTask_1_PriorityInputX + UserTask_2_PriorityInputX - + @@ -149,7 +149,7 @@ - + @@ -166,11 +166,11 @@ - + - + @@ -189,7 +189,7 @@ - + diff --git a/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/OrdersProcessIT.java b/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/OrdersProcessIT.java index f19c009b4f..06ea627bd1 100644 --- a/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/OrdersProcessIT.java +++ b/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/OrdersProcessIT.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; import org.kie.kogito.examples.DemoApplication; @@ -36,6 +37,9 @@ import org.kie.kogito.process.WorkItem; import org.kie.kogito.testcontainers.springboot.InfinispanSpringBootTestResource; import org.kie.kogito.testcontainers.springboot.KafkaSpringBootTestResource; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; @@ -62,6 +66,9 @@ public class OrdersProcessIT { @Qualifier("demo.orderItems") Process orderItemsProcess; + @Autowired + UserTasks userTasks; + private SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); @Test @@ -86,9 +93,11 @@ public void testOrderProcess() { ProcessInstance childProcessInstance = getFirst(orderItemProcesses); - List workItems = childProcessInstance.workItems(policy); - assertEquals(1, workItems.size()); - childProcessInstance.completeWorkItem(workItems.get(0).getId(), null, policy); + IdentityProvider johnUser = IdentityProviders.of("john", Collections.singletonList("managers")); + List userTaskInstances = userTasks.instances().findByIdentity(johnUser); + userTaskInstances.forEach(ut -> { + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), johnUser); + }); assertEquals(ProcessInstance.STATE_COMPLETED, childProcessInstance.status()); Optional pi = orderProcess.instances().findById(processInstance.id()); @@ -133,7 +142,11 @@ public void testOrderProcessWithError() { List workItems = childProcessInstance.workItems(policy); assertEquals(1, workItems.size()); - childProcessInstance.completeWorkItem(workItems.get(0).getId(), null, policy); + IdentityProvider johnUser = IdentityProviders.of("john", Collections.singletonList("managers")); + List userTaskInstances = userTasks.instances().findByIdentity(johnUser); + userTaskInstances.forEach(ut -> { + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), johnUser); + }); assertEquals(ProcessInstance.STATE_COMPLETED, childProcessInstance.status()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.status()); diff --git a/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/PersonsRestIT.java b/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/PersonsRestIT.java index 8935e8648f..2b0c5844ce 100644 --- a/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/PersonsRestIT.java +++ b/kogito-springboot-examples/process-springboot-example/src/test/java/org/kie/kogito/examples/demo/PersonsRestIT.java @@ -18,6 +18,8 @@ */ package org.kie.kogito.examples.demo; +import java.util.Collections; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIfSystemProperty; @@ -38,6 +40,7 @@ import io.restassured.http.ContentType; import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -49,6 +52,7 @@ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = DemoApplication.class) @ContextConfiguration(initializers = { InfinispanSpringBootTestResource.Conditional.class, KafkaSpringBootTestResource.Conditional.class }) public class PersonsRestIT { + private static final String USER_TASK_BASE_PATH = "/usertasks/instance"; @Autowired @Qualifier("persons") @@ -244,19 +248,44 @@ public void testChildPersonsRestWithSecurityPolicyAndLifeCycles() { .extract() .path("[0].id"); + assertThat(taskId).isNotNull(); // test claim task - String fixedOrderPayload = "{}"; - given().contentType(ContentType.JSON).accept(ContentType.JSON).body(fixedOrderPayload).when().post("/persons/" + firstCreatedId + "/ChildrenHandling/" + taskId + "?phase=claim&user=admin") + String userTaskId = given() + .basePath(USER_TASK_BASE_PATH) + .queryParam("user", "admin") + .queryParam("group", "admins") + .contentType(ContentType.JSON) + .when() + .get() .then() - .statusCode(200).body("id", is(firstCreatedId)); - // test release task - given().contentType(ContentType.JSON).accept(ContentType.JSON).body(fixedOrderPayload).when().post("/persons/" + firstCreatedId + "/ChildrenHandling/" + taskId + "?phase=release&user=admin") + .statusCode(200) + .extract() + .body() + .path("[0].id"); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "release") + .queryParam("user", "admin") + .queryParam("group", "admins") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200).body("id", is(firstCreatedId)); - // test skip - given().contentType(ContentType.JSON).accept(ContentType.JSON).body(fixedOrderPayload).when().post("/persons/" + firstCreatedId + "/ChildrenHandling/" + taskId + "?phase=skip&user=admin") + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .basePath(USER_TASK_BASE_PATH) + .queryParam("transitionId", "skip") + .queryParam("user", "admin") + .queryParam("group", "admins") + .body(Collections.emptyMap()) + .when() + .post("/{userTaskId}/transition", userTaskId) .then() - .statusCode(200).body("id", is(firstCreatedId)); + .statusCode(200); // get all persons make sure there is zero given().accept(ContentType.JSON).when().get("/persons").then().statusCode(200) @@ -272,7 +301,7 @@ public void testPersonsRestStartFromUserTask() { // test new person String addPersonPayload = "{\"person\" : {\"name\" : \"Jane Doe\", \"age\" : 30}}"; String firstCreatedId = given().contentType(ContentType.JSON).accept(ContentType.JSON) - .header("X-KOGITO-StartFromNode", "UserTask_1")// this instructs to start from user task and skip any node before it + .header("X-KOGITO-StartFromNode", "UserTask_2")// this instructs to start from user task and skip any node before it .body(addPersonPayload).when() .post("/persons").then().statusCode(201) .body("id", notNullValue(), "person.adult", is(false))// since rule evaluation was skipped adult is still false even though age is about the 18 limit @@ -445,7 +474,7 @@ public void testChildPersonsRestCancelAndTriggerNodeViaMgmtInterface() { .statusCode(200); // then trigger new node instance via management interface - given().contentType(ContentType.JSON).accept(ContentType.JSON).when().post("/management/processes/persons/instances/" + firstCreatedId + "/nodes/UserTask_1").then() + given().contentType(ContentType.JSON).accept(ContentType.JSON).when().post("/management/processes/persons/instances/" + firstCreatedId + "/nodes/UserTask_2").then() .statusCode(200); taskId = given() diff --git a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java b/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java deleted file mode 100644 index 7727ba2c44..0000000000 --- a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/config/CustomWorkItemHandlerConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels.config; - -import org.acme.travels.usertasks.CustomHumanTaskWorkItemHandler; -import org.kie.kogito.process.impl.DefaultWorkItemHandlerConfig; -import org.springframework.stereotype.Component; - -/** - * Custom work item handler configuration to change default work item handler for user tasks - * to take into account custom phases - * - *
    - *
  • Start
  • - *
  • Complete - an extension to default Complete phase that will allow only completion from started tasks
  • - *
- * - */ -@Component -public class CustomWorkItemHandlerConfig extends DefaultWorkItemHandlerConfig { - { - register("Human Task", new CustomHumanTaskWorkItemHandler()); - } -} \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java b/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java deleted file mode 100644 index aa22513441..0000000000 --- a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomHumanTaskWorkItemHandler.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.acme.travels.usertasks; - -import java.util.Optional; - -import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItem; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemManager; -import org.kie.kogito.internal.process.workitem.WorkItemLifeCycle; -import org.kie.kogito.internal.process.workitem.WorkItemPhaseState; -import org.kie.kogito.internal.process.workitem.WorkItemTerminationType; -import org.kie.kogito.internal.process.workitem.WorkItemTransition; -import org.kie.kogito.process.workitems.impl.DefaultKogitoWorkItemHandler; -import org.kie.kogito.process.workitems.impl.DefaultWorkItemLifeCycle; -import org.kie.kogito.process.workitems.impl.DefaultWorkItemLifeCyclePhase; - -public class CustomHumanTaskWorkItemHandler extends DefaultKogitoWorkItemHandler { - - public static final String TRANSITION_COMPLETE = "complete"; - public static final String TRANSITION_ABORT = "abort"; - public static final String TRANSITION_ACTIVATE = "activate"; - public static final String TRANSITION_START = "start"; - public static final String TRANSITION_SKIP = "skip"; - - @Override - public WorkItemLifeCycle initialize() { - WorkItemPhaseState initialized = WorkItemPhaseState.initialized(); - WorkItemPhaseState completed = WorkItemPhaseState.of("Completed", WorkItemTerminationType.COMPLETE); - WorkItemPhaseState aborted = WorkItemPhaseState.of("Aborted", WorkItemTerminationType.ABORT); - WorkItemPhaseState activated = WorkItemPhaseState.of("Activated"); - WorkItemPhaseState started = WorkItemPhaseState.of("Started"); - - DefaultWorkItemLifeCyclePhase active = new DefaultWorkItemLifeCyclePhase(TRANSITION_ACTIVATE, initialized, activated, this::activateWorkItemHandler); - DefaultWorkItemLifeCyclePhase start = new DefaultWorkItemLifeCyclePhase(TRANSITION_START, activated, started, this::activateWorkItemHandler); - DefaultWorkItemLifeCyclePhase complete = new DefaultWorkItemLifeCyclePhase(TRANSITION_COMPLETE, started, completed, this::completeWorkItemHandler); - DefaultWorkItemLifeCyclePhase abort = new DefaultWorkItemLifeCyclePhase(TRANSITION_ABORT, started, aborted, this::abortWorkItemHandler); - - return new DefaultWorkItemLifeCycle(active, start, abort, complete); - } - - @Override - public Optional completeWorkItemHandler(KogitoWorkItemManager manager, KogitoWorkItemHandler handler, KogitoWorkItem workitem, WorkItemTransition transition) { - getUserFromTransition(transition).ifPresent(e -> workitem.setOutput("ActorId", e)); - return Optional.empty(); - } - - private Optional getUserFromTransition(WorkItemTransition transition) { - Optional securityPolicy = transition.policies().stream().filter(SecurityPolicy.class::isInstance).map(SecurityPolicy.class::cast).findAny(); - if (securityPolicy.isPresent()) { - return Optional.ofNullable(securityPolicy.get().getUser()); - } - return Optional.empty(); - } -} diff --git a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java b/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java new file mode 100644 index 0000000000..fe1c4b7365 --- /dev/null +++ b/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/main/java/org/acme/travels/usertasks/CustomUserTaskLifeCycle.java @@ -0,0 +1,218 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.acme.travels.usertasks; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.kie.kogito.auth.IdentityProvider; +import org.kie.kogito.internal.process.workitem.NotAuthorizedException; +import org.kie.kogito.usertask.UserTaskAssignmentStrategy; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.impl.DefaultUserTaskInstance; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskTransitionToken; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTransition; +import org.kie.kogito.usertask.lifecycle.UserTaskLifeCycle; +import org.kie.kogito.usertask.lifecycle.UserTaskState; +import org.kie.kogito.usertask.lifecycle.UserTaskState.TerminationType; +import org.kie.kogito.usertask.lifecycle.UserTaskTransition; +import org.kie.kogito.usertask.lifecycle.UserTaskTransitionException; +import org.kie.kogito.usertask.lifecycle.UserTaskTransitionToken; +import org.springframework.stereotype.Component; + +@Component +public class CustomUserTaskLifeCycle implements UserTaskLifeCycle { + public static final String WORKFLOW_ENGINE_USER = "WORKFLOW_ENGINE_USER"; + + public static final String PARAMETER_USER = "USER"; + public static final String PARAMETER_NOTIFY = "NOTIFY"; + + public static final String ACTIVATE = "activate"; + public static final String START = "start"; + public static final String CLAIM = "claim"; + public static final String RELEASE = "release"; + public static final String COMPLETE = "complete"; + public static final String SKIP = "skip"; + public static final String FAIL = "fail"; + + public static final UserTaskState INACTIVE = UserTaskState.initalized(); + public static final UserTaskState ACTIVE = UserTaskState.of("Active"); + public static final UserTaskState STARTED = UserTaskState.of("Started"); + public static final UserTaskState RESERVED = UserTaskState.of("Reserved"); + public static final UserTaskState COMPLETED = UserTaskState.of("Completed", TerminationType.COMPLETED); + public static final UserTaskState OBSOLETE = UserTaskState.of("Obsolete", TerminationType.OBSOLETE); + + private final UserTaskTransition T_NEW_ACTIVE = new DefaultUserTransition(ACTIVATE, INACTIVE, ACTIVE, this::activate); + private final UserTaskTransition T_ACTIVE_START = new DefaultUserTransition(START, ACTIVE, STARTED, this::start); + private final UserTaskTransition T_START_RESERVED = new DefaultUserTransition(CLAIM, STARTED, RESERVED, this::claim); + private final UserTaskTransition T_RESERVED_COMPLETED = new DefaultUserTransition(COMPLETE, RESERVED, COMPLETED, this::complete); + + private final UserTaskTransition T_ACTIVE_SKIPPED = new DefaultUserTransition(SKIP, ACTIVE, OBSOLETE, this::skip); + private final UserTaskTransition T_STARTED_SKIPPED = new DefaultUserTransition(SKIP, STARTED, OBSOLETE, this::skip); + private final UserTaskTransition T_RESERVED_SKIPPED = new DefaultUserTransition(SKIP, RESERVED, OBSOLETE, this::skip); + + private final UserTaskTransition T_RESERVED_ACTIVE = new DefaultUserTransition(RELEASE, RESERVED, ACTIVE, this::release); + + private List transitions; + + public CustomUserTaskLifeCycle() { + transitions = List.of( + T_NEW_ACTIVE, + T_ACTIVE_START, + T_START_RESERVED, + T_ACTIVE_SKIPPED, + T_STARTED_SKIPPED, + T_RESERVED_ACTIVE, + T_RESERVED_COMPLETED, + T_RESERVED_SKIPPED); + } + + @Override + public List allowedTransitions(UserTaskInstance userTaskInstance) { + return transitions.stream().filter(t -> t.source().equals(userTaskInstance.getStatus())).toList(); + } + + @Override + public Optional transition(UserTaskInstance userTaskInstance, UserTaskTransitionToken userTaskTransitionToken, IdentityProvider identityProvider) { + checkPermission(userTaskInstance, identityProvider); + UserTaskTransition transition = transitions.stream() + .filter(t -> t.source().equals(userTaskInstance.getStatus()) && t.id().equals(userTaskTransitionToken.transitionId())) + .findFirst() + .orElseThrow(() -> new UserTaskTransitionException("Invalid transition from " + userTaskInstance.getStatus())); + return transition.executor().execute(userTaskInstance, userTaskTransitionToken, identityProvider); + } + + @Override + public UserTaskTransitionToken newCompleteTransitionToken(UserTaskInstance userTaskInstance, Map data) { + return newTransitionToken(COMPLETE, userTaskInstance.getStatus(), data); + } + + @Override + public UserTaskTransitionToken newAbortTransitionToken(UserTaskInstance userTaskInstance, Map data) { + return newTransitionToken(SKIP, userTaskInstance.getStatus(), data); + } + + @Override + public UserTaskTransitionToken newTransitionToken(String transitionId, UserTaskInstance userTaskInstance, Map data) { + return newTransitionToken(transitionId, userTaskInstance.getStatus(), data); + } + + public UserTaskTransitionToken newTransitionToken(String transitionId, UserTaskState state, Map data) { + UserTaskTransition transition = transitions.stream().filter(e -> e.source().equals(state) && e.id().equals(transitionId)).findAny() + .orElseThrow(() -> new RuntimeException("Invalid transition " + transitionId + " from " + state)); + return new DefaultUserTaskTransitionToken(transition.id(), transition.source(), transition.target(), data); + } + + public Optional activate(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + return Optional.empty(); + } + + public Optional start(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + String user = assignStrategy(userTaskInstance, identityProvider); + if (user != null) { + return Optional.of(newTransitionToken(CLAIM, STARTED, Map.of(PARAMETER_USER, user))); + } + return Optional.empty(); + } + + public Optional claim(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + if (userTaskInstance instanceof DefaultUserTaskInstance defaultUserTaskInstance) { + if (token.data().containsKey(PARAMETER_USER)) { + defaultUserTaskInstance.setActuaOwner((String) token.data().get(PARAMETER_USER)); + } else { + defaultUserTaskInstance.setActuaOwner(identityProvider.getName()); + } + } + return Optional.empty(); + } + + public Optional release(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + if (userTaskInstance instanceof DefaultUserTaskInstance defaultUserTaskInstance) { + defaultUserTaskInstance.setActuaOwner(null); + } + return Optional.empty(); + } + + public Optional complete(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + token.data().forEach(userTaskInstance::setOutput); + return Optional.empty(); + } + + public Optional skip(UserTaskInstance userTaskInstance, UserTaskTransitionToken token, IdentityProvider identityProvider) { + if (token.data().containsKey(PARAMETER_NOTIFY)) { + userTaskInstance.getMetadata().put(PARAMETER_NOTIFY, token.data().get(PARAMETER_NOTIFY)); + } + if (userTaskInstance instanceof DefaultUserTaskInstance defaultUserTaskInstance) { + defaultUserTaskInstance.setActuaOwner(identityProvider.getName()); + } + return Optional.empty(); + } + + private String assignStrategy(UserTaskInstance userTaskInstance, IdentityProvider identityProvider) { + UserTaskAssignmentStrategy assignmentStrategy = userTaskInstance.getUserTask().getAssignmentStrategy(); + return assignmentStrategy.computeAssigment(userTaskInstance, identityProvider).orElse(null); + } + + private void checkPermission(UserTaskInstance userTaskInstance, IdentityProvider identityProvider) { + String user = identityProvider.getName(); + Collection roles = identityProvider.getRoles(); + + if (WORKFLOW_ENGINE_USER.equals(user)) { + return; + } + + // first we check admins + Set adminUsers = userTaskInstance.getAdminUsers(); + if (adminUsers.contains(user)) { + return; + } + + Set userAdminGroups = new HashSet<>(userTaskInstance.getAdminGroups()); + userAdminGroups.retainAll(roles); + if (!userAdminGroups.isEmpty()) { + return; + } + + if (userTaskInstance.getActualOwner() != null && userTaskInstance.getActualOwner().equals(user)) { + return; + } + + if (List.of(INACTIVE, ACTIVE, STARTED).contains(userTaskInstance.getStatus())) { + // there is no user + Set users = new HashSet<>(userTaskInstance.getPotentialUsers()); + users.removeAll(userTaskInstance.getExcludedUsers()); + if (users.contains(identityProvider.getName())) { + return; + } + + Set userPotGroups = new HashSet<>(userTaskInstance.getPotentialGroups()); + userPotGroups.retainAll(roles); + if (!userPotGroups.isEmpty()) { + return; + } + } + + throw new NotAuthorizedException("user " + user + " with roles " + roles + " not autorized to perform an operation on user task " + userTaskInstance.getId()); + } + +} diff --git a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/test/java/org/acme/travels/custom/lifecycle/springboot/ApprovalsProcessTest.java b/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/test/java/org/acme/travels/custom/lifecycle/springboot/ApprovalsProcessTest.java index e761d10a67..9907beb486 100644 --- a/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/test/java/org/acme/travels/custom/lifecycle/springboot/ApprovalsProcessTest.java +++ b/kogito-springboot-examples/process-usertasks-custom-lifecycle-springboot/src/test/java/org/acme/travels/custom/lifecycle/springboot/ApprovalsProcessTest.java @@ -25,17 +25,19 @@ import org.acme.travels.Address; import org.acme.travels.Traveller; +import org.acme.travels.usertasks.CustomUserTaskLifeCycle; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.InvalidTransitionException; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; import org.kie.kogito.tests.KogitoInfinispanSpringbootApplication; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; @@ -44,10 +46,9 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import static java.util.Collections.singletonList; -import static java.util.Collections.singletonMap; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.fail; @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = KogitoInfinispanSpringbootApplication.class) @@ -58,6 +59,9 @@ public class ApprovalsProcessTest { @Qualifier("approvals") Process approvalsProcess; + @Autowired + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -72,7 +76,8 @@ public void testApprovalProcess() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", Collections.singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); processInstance.workItems(policy); @@ -80,15 +85,14 @@ public void testApprovalProcess() { assertEquals(1, workItems.size()); Map results = new HashMap<>(); results.put("approved", true); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", singletonList("managers"))); + identity = IdentityProviders.of("john", Collections.singletonList("managers")); + policy = SecurityPolicy.of(identity); processInstance.workItems(policy); @@ -96,15 +100,8 @@ public void testApprovalProcess() { assertEquals(1, workItems.size()); results.put("approved", false); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); + assertThat(approvalsProcess.instances().findById(processInstance.id())).isNotPresent(); } @Test @@ -121,51 +118,46 @@ public void testApprovalProcessViaPhases() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", Collections.singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); + + processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - final String wiId = workItems.get(0).getId(); - - // test to make sure you can't complete if the task is not in started state - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - - try { - processInstance.transitionWorkItem(wiId, handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", true), - SecurityPolicy.of(IdentityProviders.of("admin", singletonList("managers"))))); - fail("It's not possible to complete non started tasks"); - } catch (InvalidTransitionException e) { - // expected - } - - // now test going through phases - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", Collections.singletonList("managers")); + ut.transition(CustomUserTaskLifeCycle.START, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(CustomUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(CustomUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", singletonList("managers"))); - - processInstance.workItems(policy); + identity = IdentityProviders.of("john", Collections.singletonList("managers")); + policy = SecurityPolicy.of(identity); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - // test that claim can be skipped - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("start", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", false), policy)); + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", Collections.singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(CustomUserTaskLifeCycle.ACTIVE); + ut.transition(CustomUserTaskLifeCycle.START, Collections.emptyMap(), userIdentity); + ut.transition(CustomUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + ut.setOutput("approved", false); + ut.transition(CustomUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); + assertThat(approvalsProcess.instances().findById(processInstance.id())).isNotPresent(); - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); } } diff --git a/kogito-springboot-examples/process-usertasks-springboot/src/test/java/org/acme/travels/springboot/ApprovalsProcessTest.java b/kogito-springboot-examples/process-usertasks-springboot/src/test/java/org/acme/travels/springboot/ApprovalsProcessTest.java index 4258f6a1da..da6ba2b9bf 100644 --- a/kogito-springboot-examples/process-usertasks-springboot/src/test/java/org/acme/travels/springboot/ApprovalsProcessTest.java +++ b/kogito-springboot-examples/process-usertasks-springboot/src/test/java/org/acme/travels/springboot/ApprovalsProcessTest.java @@ -28,13 +28,16 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; import org.kie.kogito.tests.KogitoInfinispanSpringbootApplication; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; @@ -42,6 +45,8 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.junit.jupiter.SpringExtension; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -54,6 +59,9 @@ public class ApprovalsProcessTest { @Qualifier("approvals") Process approvalsProcess; + @Autowired + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -91,7 +99,7 @@ public void testApprovalProcess() { Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } @@ -110,38 +118,47 @@ public void testApprovalProcessViaPhases() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), Collections.singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("mgmt"))); + policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); + identity = IdentityProviders.of("john", singletonList("managers")); + policy = SecurityPolicy.of(identity); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), Collections.emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), Collections.singletonMap("approved", false), policy)); - + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", singletonList("managers")); + ut.transition(DefaultUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", false); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot/src/test/java/org/acme/travels/security/oidc/springboot/ApprovalsProcessTest.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot/src/test/java/org/acme/travels/security/oidc/springboot/ApprovalsProcessTest.java index 8ac6708233..65b3228b9b 100644 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot/src/test/java/org/acme/travels/security/oidc/springboot/ApprovalsProcessTest.java +++ b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot/src/test/java/org/acme/travels/security/oidc/springboot/ApprovalsProcessTest.java @@ -28,13 +28,16 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; import org.kie.kogito.springboot.KogitoSpringbootApplication; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; @@ -42,8 +45,8 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.junit.jupiter.SpringExtension; -import static java.util.Collections.emptyMap; -import static java.util.Collections.singletonMap; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -56,6 +59,9 @@ public class ApprovalsProcessTest { @Qualifier("approvals") Process approvalsProcess; + @Autowired + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -97,7 +103,7 @@ public void testApprovalProcess() { Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } @@ -116,38 +122,47 @@ public void testApprovalProcessViaPhases() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("mgmt"))); + policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); + identity = IdentityProviders.of("john", singletonList("managers")); + policy = SecurityPolicy.of(identity); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", false), policy)); - + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", singletonList("managers")); + ut.transition(DefaultUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", false); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } diff --git a/kogito-springboot-examples/process-usertasks-with-security-springboot/src/test/java/org/acme/travels/security/springboot/ApprovalsProcessTest.java b/kogito-springboot-examples/process-usertasks-with-security-springboot/src/test/java/org/acme/travels/security/springboot/ApprovalsProcessTest.java index 5f56251379..28c3fc24ba 100644 --- a/kogito-springboot-examples/process-usertasks-with-security-springboot/src/test/java/org/acme/travels/security/springboot/ApprovalsProcessTest.java +++ b/kogito-springboot-examples/process-usertasks-with-security-springboot/src/test/java/org/acme/travels/security/springboot/ApprovalsProcessTest.java @@ -28,13 +28,16 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.kie.kogito.Model; +import org.kie.kogito.auth.IdentityProvider; import org.kie.kogito.auth.IdentityProviders; import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler; import org.kie.kogito.process.Process; import org.kie.kogito.process.ProcessInstance; import org.kie.kogito.process.WorkItem; import org.kie.kogito.tests.KogitoInfinispanSpringbootApplication; +import org.kie.kogito.usertask.UserTaskInstance; +import org.kie.kogito.usertask.UserTasks; +import org.kie.kogito.usertask.impl.lifecycle.DefaultUserTaskLifeCycle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; @@ -42,8 +45,8 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.junit.jupiter.SpringExtension; -import static java.util.Collections.emptyMap; -import static java.util.Collections.singletonMap; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -56,6 +59,9 @@ public class ApprovalsProcessTest { @Qualifier("approvals") Process approvalsProcess; + @Autowired + UserTasks userTasks; + @Test public void testApprovalProcess() { @@ -97,7 +103,7 @@ public void testApprovalProcess() { Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } @@ -116,38 +122,47 @@ public void testApprovalProcessViaPhases() { processInstance.start(); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); + IdentityProvider identity = IdentityProviders.of("admin", singletonList("managers")); + SecurityPolicy policy = SecurityPolicy.of(identity); processInstance.workItems(policy); List workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - KogitoWorkItemHandler handler = approvalsProcess.getKogitoWorkItemHandler(workItems.get(0).getWorkItemHandlerName()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", true), policy)); + List userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("manager", singletonList("managers")); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", true); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); - policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("mgmt"))); + policy = SecurityPolicy.of(IdentityProviders.of("admin", singletonList("mgmt"))); workItems = processInstance.workItems(policy); assertEquals(0, workItems.size()); - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); + identity = IdentityProviders.of("john", singletonList("managers")); + policy = SecurityPolicy.of(identity); workItems = processInstance.workItems(policy); assertEquals(1, workItems.size()); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("claim", workItems.get(0).getPhaseStatus(), emptyMap(), policy)); - workItems = processInstance.workItems(policy); - processInstance.transitionWorkItem(workItems.get(0).getId(), handler.newTransition("complete", workItems.get(0).getPhaseStatus(), singletonMap("approved", false), policy)); - + userTaskInstances = userTasks.instances().findByIdentity(identity); + assertThat(userTaskInstances).isNotEmpty(); + userTaskInstances.forEach(ut -> { + IdentityProvider userIdentity = IdentityProviders.of("john", singletonList("managers")); + ut.transition(DefaultUserTaskLifeCycle.CLAIM, Collections.emptyMap(), userIdentity); + assertThat(ut.getStatus()).isEqualTo(DefaultUserTaskLifeCycle.RESERVED); + ut.setOutput("approved", false); + ut.transition(DefaultUserTaskLifeCycle.COMPLETE, Collections.emptyMap(), userIdentity); + }); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); Model result = (Model) processInstance.variables(); assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); + assertEquals(result.toMap().get("approver"), "manager"); assertEquals(result.toMap().get("firstLineApproval"), true); assertEquals(result.toMap().get("secondLineApproval"), false); } From 1eb66ec7ad6195d7edecad8a44d31e4287f44dea Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti <65240126+fjtirado@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:55:38 +0200 Subject: [PATCH 3/3] [Fix #3694] Modifying for each example (#2019) --- .../src/main/resources/foreach.sw.json | 2 +- .../kie/kogito/serverless/workflow/examples/ForEachJava.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/main/resources/foreach.sw.json b/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/main/resources/foreach.sw.json index dbd6852ad6..b0a5e4212d 100644 --- a/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/main/resources/foreach.sw.json +++ b/serverless-workflow-examples/serverless-workflow-foreach-quarkus/src/main/resources/foreach.sw.json @@ -13,7 +13,7 @@ { "name": "increase", "type": "expression", - "operation": ".item + 1" + "operation": "$item + 1" } ], diff --git a/serverless-workflow-examples/sonataflow-fluent/src/main/java/org/kie/kogito/serverless/workflow/examples/ForEachJava.java b/serverless-workflow-examples/sonataflow-fluent/src/main/java/org/kie/kogito/serverless/workflow/examples/ForEachJava.java index 52c74e5cfc..c1373d3525 100644 --- a/serverless-workflow-examples/sonataflow-fluent/src/main/java/org/kie/kogito/serverless/workflow/examples/ForEachJava.java +++ b/serverless-workflow-examples/sonataflow-fluent/src/main/java/org/kie/kogito/serverless/workflow/examples/ForEachJava.java @@ -57,7 +57,7 @@ static Workflow getWorkflow() { // then for each element in input names concatenate it with that message .next(forEach(".names").loopVar("name").outputCollection(".messages") // jq expression that suffix each name with the message retrieved from the file - .action(call(expr("concat", ".name+.adviceMessage"))) + .action(call(expr("concat", "$name+.adviceMessage"))) // only return messages list as result of the flow .outputFilter("{messages}")) .end().build();