From eacaa0937827cc74bdd62fb20a5a40ed89686f52 Mon Sep 17 00:00:00 2001 From: Karel Suta Date: Mon, 20 Jul 2020 13:31:53 +0200 Subject: [PATCH] [JBPM-9247] Fields attribute isn't processed in Accept header Signed-off-by: Karel Suta --- .../server/common/rest/RestEasy960Util.java | 11 ++++ .../jbpm/rest/JbpmRestIntegrationTest.java | 26 ++++++++ .../QueryServiceRestOnlyIntegrationTest.java | 60 ------------------- 3 files changed, 37 insertions(+), 60 deletions(-) delete mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/QueryServiceRestOnlyIntegrationTest.java diff --git a/kie-server-parent/kie-server-common/src/main/java/org/kie/server/common/rest/RestEasy960Util.java b/kie-server-parent/kie-server-common/src/main/java/org/kie/server/common/rest/RestEasy960Util.java index 6dd50e2d184..d37a491a0dc 100644 --- a/kie-server-parent/kie-server-common/src/main/java/org/kie/server/common/rest/RestEasy960Util.java +++ b/kie-server-parent/kie-server-common/src/main/java/org/kie/server/common/rest/RestEasy960Util.java @@ -17,7 +17,9 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -40,6 +42,8 @@ public class RestEasy960Util { public static List variants = Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE, new MediaType("application", "json", Collections.singletonMap("strict", "true")), + new MediaType("application", "json", Collections.singletonMap("fields", "not_null")), + new MediaType("application", "json", mapOf("strict", "true", "fields", "not_null")), MediaType.APPLICATION_JSON_TYPE) .add().build(); public static Variant defaultVariant @@ -70,4 +74,11 @@ public static Variant getVariant(HttpHeaders headers) { } return null; } + + private static Map mapOf(String key1, String value1, String key2, String value2) { + Map result = new HashMap<>(); + result.put(key1, value1); + result.put(key2, value2); + return Collections.unmodifiableMap(result); + } } diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/JbpmRestIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/JbpmRestIntegrationTest.java index 72bffe23cd1..7048676abeb 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/JbpmRestIntegrationTest.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/JbpmRestIntegrationTest.java @@ -15,6 +15,7 @@ package org.kie.server.integrationtests.jbpm.rest; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -37,8 +38,11 @@ import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.instance.DocumentInstance; import org.kie.server.api.model.instance.DocumentInstanceList; +import org.kie.server.api.model.instance.ProcessInstance; +import org.kie.server.api.model.instance.TaskSummary; import org.kie.server.api.model.type.JaxbLong; import org.kie.server.api.model.type.JaxbString; +import org.kie.server.api.rest.RestURI; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.shared.KieServerDeployer; import org.kie.server.integrationtests.shared.KieServerUtil; @@ -49,6 +53,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; import static org.kie.server.api.rest.RestURI.ABORT_PROCESS_INST_DEL_URI; import static org.kie.server.api.rest.RestURI.CONTAINER_ID; import static org.kie.server.api.rest.RestURI.DOCUMENT_ID; @@ -59,13 +64,17 @@ import static org.kie.server.api.rest.RestURI.PROCESS_ID; import static org.kie.server.api.rest.RestURI.PROCESS_INST_ID; import static org.kie.server.api.rest.RestURI.PROCESS_URI; +import static org.kie.server.api.rest.RestURI.QUERY_URI; import static org.kie.server.api.rest.RestURI.START_PROCESS_POST_URI; +import static org.kie.server.api.rest.RestURI.TASK_GET_URI; +import static org.kie.server.api.rest.RestURI.TASK_INSTANCE_ID; import static org.kie.server.api.rest.RestURI.build; public class JbpmRestIntegrationTest extends RestJbpmBaseIntegrationTest { private static ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "rest-processes", "1.0.0.Final"); + private static ReleaseId releaseIdDefinitionProject = new ReleaseId("org.kie.server.testing", "definition-project", "1.0.0.Final"); private static Logger logger = LoggerFactory.getLogger(JbpmRestIntegrationTest.class); @@ -75,11 +84,13 @@ public class JbpmRestIntegrationTest extends RestJbpmBaseIntegrationTest { public static void buildAndDeployArtifacts() { KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/rest-processes"); + KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/definition-project"); // set the accepted formats with quality param to express preference acceptHeadersByFormat.put(MarshallingFormat.JAXB, "application/xml;q=0.9,application/json;q=0.3");// xml is preferred over json acceptHeadersByFormat.put(MarshallingFormat.JSON, "application/json;q=0.9,application/xml;q=0.3");// json is preferred over xml createContainer(CONTAINER, releaseId); + createContainer(CONTAINER_ID, releaseIdDefinitionProject); } /** @@ -218,6 +229,21 @@ public void testBasicJbpmRequestManyAcceptHeaders() throws Exception { } + @Test + public void testBasicJbpmRequestAcceptHeadersStrictAndField() throws Exception { + assumeTrue(marshallingFormat == MarshallingFormat.JSON); + + long processId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); + ProcessInstance desc = processClient.getProcessInstance(CONTAINER_ID, processId); + TaskSummary[] tasks = desc.getActiveUserTasks().getTasks(); + assertTrue(tasks.length > 0); + + WebTarget target = newRequest(RestURI.build(TestConfig.getKieServerHttpUrl(), QUERY_URI + "/" + TASK_GET_URI, Collections.singletonMap(TASK_INSTANCE_ID, tasks[0].getId()))); + Assertions.assertThat(target.request(MediaType.APPLICATION_JSON_TYPE).get(String.class)).contains("null"); + Assertions.assertThat(target.request().header("content-type", MediaType.APPLICATION_JSON + ";fields=not_null;strict=true").get(String.class)).doesNotContain("null"); + Assertions.assertThat(target.request().header("accept", MediaType.APPLICATION_JSON + ";fields=not_null;strict=true").get(String.class)).doesNotContain("null"); + } + @Test public void testUploadListDownloadDocument() throws Exception { KieServerUtil.deleteDocumentStorageFolder(); diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/QueryServiceRestOnlyIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/QueryServiceRestOnlyIntegrationTest.java deleted file mode 100644 index d8ef1007ff7..00000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/rest/QueryServiceRestOnlyIntegrationTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * - * 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.kie.server.integrationtests.jbpm.rest; - -import java.util.Collections; - -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.kie.server.api.model.ReleaseId; -import org.kie.server.api.model.instance.ProcessInstance; -import org.kie.server.api.model.instance.TaskSummary; -import org.kie.server.api.rest.RestURI; -import org.kie.server.integrationtests.config.TestConfig; -import org.kie.server.integrationtests.shared.KieServerDeployer; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.kie.server.api.rest.RestURI.QUERY_URI; -import static org.kie.server.api.rest.RestURI.TASK_GET_URI; -import static org.kie.server.api.rest.RestURI.TASK_INSTANCE_ID; - -public class QueryServiceRestOnlyIntegrationTest extends RestJbpmBaseIntegrationTest { - - protected static final String CONTAINER_ID = "definition-project"; - - @BeforeClass - public static void buildAndDeployArtifacts() { - KieServerDeployer.buildAndDeployCommonMavenParent(); - KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/definition-project"); - createContainer(CONTAINER_ID, new ReleaseId("org.kie.server.testing", "definition-project", - "1.0.0.Final")); - } - - @Test - public void testFindTaskById() throws Exception { - long processId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); - ProcessInstance desc = processClient.getProcessInstance(CONTAINER_ID, processId); - TaskSummary[] tasks = desc.getActiveUserTasks().getTasks(); - assertTrue(tasks.length > 0); - WebTarget target = newRequest(RestURI.build(TestConfig.getKieServerHttpUrl(), QUERY_URI + "/" + TASK_GET_URI, Collections.singletonMap(TASK_INSTANCE_ID, tasks[0].getId()))); - assertTrue(target.request(MediaType.APPLICATION_JSON_TYPE).get(String.class).contains("null")); - assertFalse(target.request().header("content-type", MediaType.APPLICATION_JSON + ";fields=not_null;strict=true").get(String.class).contains("null")); - } -}