Skip to content

Commit

Permalink
[incubator-kie-issues-1485] Reenable event test in ProcessTestEvents …
Browse files Browse the repository at this point in the history
…in kogito-apps
  • Loading branch information
elguardian committed Oct 18, 2024
1 parent b733219 commit e94af26
Show file tree
Hide file tree
Showing 22 changed files with 177 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.testcontainers.shaded.com.fasterxml.jackson.databind.JsonNode;
import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
Expand Down Expand Up @@ -92,7 +91,6 @@ protected ValidatableResponse addCheck(ValidatableResponse res) {
}

@Test
@Disabled
public void testProcessInstanceEvents() throws IOException {
String pId = given()
.contentType(ContentType.JSON)
Expand All @@ -113,13 +111,13 @@ public void testProcessInstanceEvents() throws IOException {
.contentType(ContentType.JSON)
.queryParam("user", "admin")
.queryParam("group", "managers")
.pathParam("processId", pId)
.when()
.get("/approvals/{processId}/tasks")
.get("/usertasks/instance")
.then()
.statusCode(200)
.log().body()
.body("$.size()", is(1))
.body("[0].name", is("firstLineApproval"))
.body("[0].taskName", is("firstLineApproval"))
.body("[0].id", notNullValue())
.extract()
.path("[0].id");
Expand Down Expand Up @@ -152,7 +150,7 @@ public void testProcessInstanceEvents() throws IOException {
.body("data.Approvals[0].metadata.userTasks.size()", is(1))
.body("data.Approvals[0].metadata.userTasks[0].id", is(flTaskId))
.body("data.Approvals[0].metadata.userTasks[0].name", is("firstLineApproval"))
.body("data.Approvals[0].metadata.userTasks[0].state", is("Ready")));
.body("data.Approvals[0].metadata.userTasks[0].state", is("Reserved")));
}

await()
Expand Down Expand Up @@ -187,7 +185,22 @@ public void testProcessInstanceEvents() throws IOException {
.body("data.UserTaskInstances.size()", is(1))
.body("data.UserTaskInstances[0].id", is(flTaskId))
.body("data.UserTaskInstances[0].name", is("firstLineApproval"))
.body("data.UserTaskInstances[0].state", is("Ready")));
.body("data.UserTaskInstances[0].state", is("Reserved")));

String workItemId = given()
.contentType(ContentType.JSON)
.queryParam("user", "admin")
.queryParam("group", "managers")
.pathParam("processId", pId)
.when()
.get("/approvals/{processId}/tasks")
.then()
.statusCode(200)
.body("$.size()", is(1))
.body("[0].name", is("firstLineApproval"))
.body("[0].id", notNullValue())
.extract()
.path("[0].id");

await()
.atMost(TIMEOUT)
Expand All @@ -196,7 +209,7 @@ public void testProcessInstanceEvents() throws IOException {
.queryParam("user", "admin")
.queryParam("group", "managers")
.pathParam("processId", pId)
.pathParam("taskId", flTaskId)
.pathParam("taskId", workItemId)
.body(singletonMap("approved", true))
.post("/approvals/{processId}/firstLineApproval/{taskId}")
.then()
Expand Down Expand Up @@ -324,6 +337,7 @@ public void testProcessGatewayAPI() throws IOException {
.when().post("/graphql")
.then()
.statusCode(200)
.log().body()
.body("data.UserTaskInstances[0].description", nullValue())
.body("data.UserTaskInstances[0].potentialGroups[0]", equalTo("managers"))
.extract().path("data.UserTaskInstances[0].id");
Expand All @@ -335,6 +349,7 @@ public void testProcessGatewayAPI() throws IOException {
.when().post("/graphql")
.then()
.statusCode(200)
.log().body()
.body("errors", nullValue())
.extract().path("data.UserTaskInstances[0].schema");
checkExpectedTaskSchema(taskSchema);
Expand Down Expand Up @@ -474,9 +489,8 @@ public void testProcessGatewayAPIComments(String taskId, String processInstanceI
.when()
.queryParam("user", "manager")
.queryParam("group", "managers")
.pathParam("id", processInstanceId)
.pathParam("taskId", taskId)
.get("/approvals/{id}/firstLineApproval/{taskId}/comments")
.get("/usertasks/instance/{taskId}/comments")
.then()
.statusCode(200)
.body("size()", is(1))
Expand Down Expand Up @@ -585,9 +599,8 @@ public void testProcessGatewayAPIAttachments(String taskId, String processInstan
.when()
.queryParam("user", "manager")
.queryParam("group", "managers")
.pathParam("id", processInstanceId)
.pathParam("taskId", taskId)
.get("/approvals/{id}/firstLineApproval/{taskId}/attachments")
.get("/usertasks/instance/{taskId}/attachments")
.then()
.statusCode(200)
.body("size()", is(1))
Expand Down Expand Up @@ -710,14 +723,13 @@ private void checkExpectedTaskSchema(String taskSchema) throws IOException {
assertEquals("object", schemaJsonNode.at("/type").asText());

// Check Schema phases
assertEquals(4, schemaJsonNode.at("/phases").size());
assertEquals(3, schemaJsonNode.at("/phases").size());
assertTrue(schemaJsonNode.get("phases").toString().contains("abort"));
assertTrue(schemaJsonNode.get("phases").toString().contains("claim"));
assertTrue(schemaJsonNode.get("phases").toString().contains("skip"));
assertTrue(schemaJsonNode.get("phases").toString().contains("complete"));

// Check Schema properties
assertEquals(2, schemaJsonNode.at("/properties").size());
assertEquals(3, schemaJsonNode.at("/properties").size());

assertEquals("true", schemaJsonNode.at("/properties/approved/output").asText());
assertEquals("boolean", schemaJsonNode.at("/properties/approved/type").asText());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
* "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
* 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
Expand Down Expand Up @@ -118,8 +118,11 @@ public CompletableFuture sendDeleteClientRequest(WebClient webClient, String req

protected void asyncHttpResponseTreatment(AsyncResult<HttpResponse<Buffer>> res, CompletableFuture future, String logMessage) {
if (res.succeeded() && (res.result().statusCode() == 200 || res.result().statusCode() == 201)) {
future.complete(res.result().bodyAsString() != null ? res.result().bodyAsString() : "Successfully performed: " + logMessage);
String jsonMessage = res.result().bodyAsString();
LOGGER.trace("Result {}", jsonMessage);
future.complete(jsonMessage != null ? jsonMessage : "Successfully performed: " + logMessage);
} else {
LOGGER.trace("Error {}", logMessage);
future.completeExceptionally(new DataIndexServiceException(getErrorMessage(logMessage, res.result())));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ type UserTaskInstance {
endpoint: String
comments: [Comment!]
attachments: [Attachment!]
externalReferenceId : String
}

input UserTaskInstanceArgument {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,13 @@
import org.kie.kogito.index.model.ProcessInstance;
import org.kie.kogito.index.model.UserTaskInstance;
import org.kie.kogito.index.service.DataIndexServiceException;
import org.kie.kogito.usertask.model.CommentInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.vertx.core.AsyncResult;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.HttpResponse;
Expand All @@ -58,15 +60,15 @@ class KogitoRuntimeClientImpl extends KogitoRuntimeCommonClient implements Kogit
public static final String CANCEL_NODE_INSTANCE_PATH = "/management/processes/%s/instances/%s/nodeInstances/%s"; // nodeInstance Id

public static final String GET_TASK_SCHEMA_PATH = "/%s/%s/%s/%s/schema";
public static final String UPDATE_USER_TASK_INSTANCE_PATH = "/management/processes/%s/instances/%s/tasks/%s";
public static final String UPDATE_USER_TASK_INSTANCE_PATH = "/management/usertasks/%s";

public static final String CREATE_USER_TASK_INSTANCE_COMMENT_PATH = "/%s/%s/%s/%s/comments";
public static final String UPDATE_USER_TASK_INSTANCE_COMMENT_PATH = "/%s/%s/%s/%s/comments/%s";
public static final String DELETE_USER_TASK_INSTANCE_COMMENT_PATH = "/%s/%s/%s/%s/comments/%s";
public static final String CREATE_USER_TASK_INSTANCE_COMMENT_PATH = "/usertasks/instance/%s/comments";
public static final String UPDATE_USER_TASK_INSTANCE_COMMENT_PATH = "/usertasks/instance/%s/comments/%s";
public static final String DELETE_USER_TASK_INSTANCE_COMMENT_PATH = "/usertasks/instance/%s/comments/%s";

public static final String CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = "/%s/%s/%s/%s/attachments";
public static final String UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = "/%s/%s/%s/%s/attachments/%s";
public static final String DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH = "/%s/%s/%s/%s/attachments/%s";
public static final String CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = "/usertasks/instance/%s/attachments";
public static final String UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = "/usertasks/instance/%s/attachments/%s";
public static final String DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH = "/usertasks/instance/%s/attachments/%s";

private static final Logger LOGGER = LoggerFactory.getLogger(KogitoRuntimeClientImpl.class);

Expand Down Expand Up @@ -137,7 +139,8 @@ public CompletableFuture<String> cancelNodeInstance(String serviceURL, ProcessIn
@Override
public CompletableFuture<String> getUserTaskSchema(String serviceURL, UserTaskInstance userTaskInstance, String user, List<String> groups) {
String requestURI = format(GET_TASK_SCHEMA_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(), userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
userTaskInstance.getName(), userTaskInstance.getExternalReferenceId()) + "?" + getUserGroupsURIParameter(user, groups);
LOGGER.trace("get user task schema service {} and URI {}", serviceURL, requestURI);
return sendGetClientRequest(getWebClient(serviceURL), requestURI,
"Get User Task schema for task:" + userTaskInstance.getName() + " with id: " + userTaskInstance.getId(),
null);
Expand All @@ -146,44 +149,40 @@ public CompletableFuture<String> getUserTaskSchema(String serviceURL, UserTaskIn
@Override
public CompletableFuture<String> updateUserTaskInstance(String serviceURL, UserTaskInstance userTaskInstance, String user,
List<String> groups, Map taskInfo) {
String requestURI = format(UPDATE_USER_TASK_INSTANCE_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(UPDATE_USER_TASK_INSTANCE_PATH, userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
LOGGER.trace("Send request to {}", requestURI);
return sendPatchClientRequest(getWebClient(serviceURL), requestURI,
"Update user task instance:" + userTaskInstance.getName() + " with id: " + userTaskInstance.getId(),
"Update user task instance: " + userTaskInstance.getName() + " with id: " + userTaskInstance.getId(),
new JsonObject(taskInfo));
}

@Override
public CompletableFuture<String> createUserTaskInstanceComment(String serviceURL, UserTaskInstance userTaskInstance, String user, List<String> groups, String commentInfo) {
String requestURI = format(CREATE_USER_TASK_INSTANCE_COMMENT_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), userTaskInstance.getName(),
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(CREATE_USER_TASK_INSTANCE_COMMENT_PATH, userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
return sendPostWithBodyClientRequest(getWebClient(serviceURL), requestURI,
"Adding comment to UserTask:" + userTaskInstance.getName() + " with id: " + userTaskInstance.getId(),
commentInfo, MediaType.TEXT_PLAIN);
Json.encode(new CommentInfo(commentInfo)), MediaType.APPLICATION_JSON);
}

@Override
public CompletableFuture<String> updateUserTaskInstanceComment(String serviceURL, UserTaskInstance userTaskInstance, String user, List<String> groups, String commentId, String commentInfo) {
String requestURI = format(UPDATE_USER_TASK_INSTANCE_COMMENT_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), userTaskInstance.getName(),
userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(UPDATE_USER_TASK_INSTANCE_COMMENT_PATH, userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user, groups);
return sendPutClientRequest(getWebClient(serviceURL),
requestURI,
"Update UserTask: " + userTaskInstance.getName() + " comment:" + commentId + " with taskid: " + userTaskInstance.getId(),
commentInfo, MediaType.TEXT_PLAIN);
Json.encode(new CommentInfo(commentInfo)), MediaType.APPLICATION_JSON);
}

@Override
public CompletableFuture<String> deleteUserTaskInstanceComment(String serviceURL, UserTaskInstance userTaskInstance, String user, List<String> groups, String commentId) {
String requestURI = format(DELETE_USER_TASK_INSTANCE_COMMENT_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(), userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(DELETE_USER_TASK_INSTANCE_COMMENT_PATH, userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user, groups);
return sendDeleteClientRequest(getWebClient(serviceURL), requestURI,
"Delete comment : " + commentId + "of Task: " + userTaskInstance.getName() + " with taskid: " + userTaskInstance.getId());
}

@Override
public CompletableFuture<String> createUserTaskInstanceAttachment(String serviceURL, UserTaskInstance userTaskInstance, String user, List<String> groups, String name, String uri) {
String requestURI = format(CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), userTaskInstance.getName(),
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
return sendPostWithBodyClientRequest(getWebClient(serviceURL), requestURI,
"Adding attachment to UserTask:" + userTaskInstance.getName() + " with id: " + userTaskInstance.getId(),
"{ \"name\": \"" + name + "\", \"uri\": \"" + uri + "\" }", MediaType.APPLICATION_JSON);
Expand All @@ -192,8 +191,7 @@ public CompletableFuture<String> createUserTaskInstanceAttachment(String service
@Override
public CompletableFuture<String> updateUserTaskInstanceAttachment(String serviceURL, UserTaskInstance userTaskInstance, String user,
List<String> groups, String attachmentId, String name, String uri) {
String requestURI = format(UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), userTaskInstance.getName(),
userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user, groups);
return sendJSONPutClientRequest(getWebClient(serviceURL),
requestURI,
"Update UserTask: " + userTaskInstance.getName() + " attachment:" + attachmentId +
Expand All @@ -203,8 +201,7 @@ public CompletableFuture<String> updateUserTaskInstanceAttachment(String service

@Override
public CompletableFuture<String> deleteUserTaskInstanceAttachment(String serviceURL, UserTaskInstance userTaskInstance, String user, List<String> groups, String attachmentId) {
String requestURI = format(DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH, userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(), userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user, groups);
String requestURI = format(DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH, userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user, groups);
return sendDeleteClientRequest(getWebClient(serviceURL), requestURI,
"Delete attachment : " + attachmentId + "of Task: " + userTaskInstance.getName() + " with taskid: " + userTaskInstance.getId());
}
Expand All @@ -225,10 +222,10 @@ protected CompletableFuture sendPostWithBodyClientRequest(WebClient webClient, S
.putHeader("Authorization", getAuthHeader())
.putHeader("Content-Type", contentType);
if (MediaType.APPLICATION_JSON.equals(contentType)) {
LOGGER.debug("Sending Json Body: {} POST to URI {}", body, requestURI);
LOGGER.trace("Sending Json Body: {} POST to URI {}", body, requestURI);
request.sendJson(new JsonObject(body), res -> asyncHttpResponseTreatment(res, future, logMessage));
} else {
LOGGER.debug("Sending Buffer(Body): {} POST to URI {}", body, requestURI);
LOGGER.trace("Sending Buffer(Body): {} POST to URI {}", body, requestURI);
request.sendBuffer(Buffer.buffer(body), res -> asyncHttpResponseTreatment(res, future, logMessage));
}
return future;
Expand All @@ -253,10 +250,10 @@ protected CompletableFuture sendPutClientRequest(WebClient webClient, String req
.putHeader("Authorization", getAuthHeader())
.putHeader("Content-Type", contentType);
if (MediaType.APPLICATION_JSON.equals(contentType)) {
LOGGER.debug("Sending Json Body: {} PUT to URI {}", body, requestURI);
LOGGER.info("Sending Json Body: {} PUT to URI {}", body, requestURI);
request.sendJson(new JsonObject(body), res -> asyncHttpResponseTreatment(res, future, logMessage));
} else {
LOGGER.debug("Sending Buffer(Body): {} PUT to URI {}", body, requestURI);
LOGGER.info("Sending Buffer(Body): {} PUT to URI {}", body, requestURI);
request.sendBuffer(Buffer.buffer(body), res -> asyncHttpResponseTreatment(res, future, logMessage));
}
return future;
Expand Down
Loading

0 comments on commit e94af26

Please sign in to comment.