@Test public void testGetProcessInstancesWithQueryDataServiceUsingCustomQueryBuilder() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); Map<String, Object> params = new HashMap<String, Object>(); params.put("min", processInstanceIds.get(4)); params.put("max", processInstanceIds.get(0)); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, "test", params, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(2, instances.size()); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetProcessInstancesWithQueryDataServiceUsingCustomQueryBuilderAndFilterSpec() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); Map<String, Object> params = new HashMap<String, Object>(); params.put("min", processInstanceIds.get(4)); params.put("max", processInstanceIds.get(0)); params.put(KieServerConstants.QUERY_ORDER_BY, "processInstanceId"); params.put(KieServerConstants.QUERY_ASCENDING, false); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, "test", params, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(2, instances.size()); long pi1 = instances.get(0).getId(); long pi2 = instances.get(1).getId(); // since sort order is descending first should be instance id which is bigger then second assertTrue(pi1 > pi2); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testQueryDataServiceUsingCustomQueryBuilderFilterSpecWithOrderByClause() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); Map<String, Object> params = new HashMap<String, Object>(); params.put("min", processInstanceIds.get(1)); params.put("max", processInstanceIds.get(0)); params.put(KieServerConstants.QUERY_ORDER_BY_CLAUSE, "processId asc , processInstanceId desc"); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, "test", params, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(5, instances.size()); long pi1 = instances.get(0).getId(); long pi2 = instances.get(1).getId(); // since sort order is descending first should be instance id which is bigger then second assertTrue(pi1 + " not greater than " + pi2, pi1 > pi2); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Before public void registerQuery() { QueryDefinition query = new QueryDefinition(); query.setName(QUERY_NAME); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression(TASK_QUERY); query.setTarget("CUSTOM"); queryClient.registerQuery(query); }
@Before public void registerQuery() { QueryDefinition query = new QueryDefinition(); query.setName(QUERY_NAME); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression(PROCESS_INSTANCE_QUERY); query.setTarget("CUSTOM"); queryClient.registerQuery(query); }
@Test public void testGetProcessInstancesWithQueryDataServiceUsingCustomQueryBuilderAndCustomParameters() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); Map<String, Object> params = new HashMap<String, Object>(); params.put("customparams", Arrays.asList(createCustomParameterInstance("min", processInstanceIds.get(4)), createCustomParameterInstance("max", processInstanceIds.get(0)))); List<ProcessInstance> instances = queryClient.query(CONTAINER_ID, query.getName(), QueryServicesClient.QUERY_MAP_PI, "test", params, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(2, instances.size()); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetProcessInstancesFilteredWithVariablesQueryDataService() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); final QueryDefinition query = getProcessInstanceWithVariablesQueryDefinition(); try { queryClient.registerQuery(query); QueryFilterSpec filterSpec = new QueryFilterSpecBuilder().greaterThan("processinstanceid", processInstanceIds.get(3)).get(); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI_WITH_VARS, filterSpec, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(1, instances.size()); for (ProcessInstance instance : instances) { final Map<String, Object> variables = instance.getVariables(); assertNotNull(variables); assertEquals(4, variables.size()); assertEquals(TestConfig.getUsername(), variables.get("initiator")); assertEquals("waiting for signal", variables.get("stringData")); assertEquals("Person{name='john'}", variables.get("personData")); assertEquals("true", variables.get("nullAccepted")); } } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
queryClient.registerQuery(query);
@Test public void testGetProcessInstancesWithOrderByClause() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, "processId asc, processInstanceId desc", 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(5, instances.size()); List<Long> found = collectInstances(instances); assertEquals(processInstanceIds, found); long pi1 = instances.get(0).getId(); long pi2 = instances.get(1).getId(); // since sort order is descending first should be instance id which is bigger then second assertTrue(pi1 + " not greater than " + pi2, pi1 > pi2); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetProcessInstancesWithVariablesQueryDataService() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); parameters.put("nullAccepted", true); List<Long> processInstanceIds = createProcessInstances(parameters); final QueryDefinition query = getProcessInstanceWithVariablesQueryDefinition(); try { queryClient.registerQuery(query); final List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI_WITH_VARS, 0, 20, ProcessInstance.class); assertNotNull(instances); final List<Long> found = collectInstances(instances); assertEquals(processInstanceIds, found); for (ProcessInstance instance : instances) { final Map<String, Object> variables = instance.getVariables(); assertNotNull(variables); assertEquals(4, variables.size()); assertEquals(TestConfig.getUsername(), variables.get("initiator")); assertEquals("waiting for signal", variables.get("stringData")); assertEquals("Person{name='john'}", variables.get("personData")); assertEquals("true", variables.get("nullAccepted")); } } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetProcessInstanceCustomWithoutVarsMapper() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(CONTAINER_ID)); Long pid = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK, parameters); QueryDefinition query = new QueryDefinition(); query.setName("jbpmProcessSearch"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("select p.PROCESSINSTANCEID, p.PROCESSID, p.PROCESSNAME, p.PROCESSVERSION, p.STATUS, p.EXTERNALID, " + "pr.STARTDATE as START_DATE, p.USER_IDENTITY, p.PROCESSINSTANCEDESCRIPTION, p.CORRELATIONKEY, " + "p.PARENTPROCESSINSTANCEID, pr.LASTMODIFICATIONDATE from PROCESSINSTANCELOG p " + "inner join PROCESSINSTANCEINFO pr on p.PROCESSINSTANCEID = pr.INSTANCEID"); query.setTarget("CUSTOM"); try { queryClient.registerQuery(query); List<ProcessInstanceCustomVars> instance = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI_CUSTOM, 0, 10, ProcessInstanceCustomVars.class); assertNotNull(instance); assertEquals(1, instance.size()); assertNull(instance.get(0).getVariables()); } finally { processClient.abortProcessInstance(CONTAINER_ID, pid); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetProcessInstancesWithQueryDataServiceRawMapper() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); List<List> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_RAW, 0, 10, List.class); assertNotNull(instances); assertEquals(5, instances.size()); for (List row : instances) { assertEquals(18, row.size()); } instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_RAW, 0, 3, List.class); assertNotNull(instances); assertEquals(3, instances.size()); instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_RAW, "status", 1, 3, List.class); assertNotNull(instances); assertEquals(2, instances.size()); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
queryClient.registerQuery(query);
@Test public void testGetProcessInstancesWithQueryDataService() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(5, instances.size()); List<Long> found = collectInstances(instances); assertEquals(processInstanceIds, found); instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, 0, 3, ProcessInstance.class); assertNotNull(instances); assertEquals(3, instances.size()); instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, "status", 1, 3, ProcessInstance.class); assertNotNull(instances); assertEquals(2, instances.size()); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetProcessInstancesWithQueryDataServiceUsingCustomMapper() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance(USER_JOHN)); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = createQueryDefinition("CUSTOM"); try { queryClient.registerQuery(query); List<ProcessInstance> instances = queryClient.query(query.getName(), "CustomMapper", 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(5, instances.size()); List<Long> found = collectInstances(instances); assertEquals(processInstanceIds, found); instances = queryClient.query(query.getName(), "CustomMapper", 0, 3, ProcessInstance.class); assertNotNull(instances); assertEquals(3, instances.size()); instances = queryClient.query(query.getName(), "CustomMapper", "status", 1, 3, ProcessInstance.class); assertNotNull(instances); assertEquals(2, instances.size()); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); } }
@Test public void testGetFilteredProcessInstancesWithQueryDataService() throws Exception { // don't run the test on local server as it does not properly support authentication assumeFalse(TestConfig.isLocalServer()); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("stringData", "waiting for signal"); parameters.put("personData", createPersonInstance("john")); List<Long> processInstanceIds = createProcessInstances(parameters); QueryDefinition query = new QueryDefinition(); query.setName("allProcessInstancesForUser"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("select * from ProcessInstanceLog where status = 1"); query.setTarget("FILTERED_PROCESS"); try { queryClient.registerQuery(query); // default user (yoda) does not have engineering role so should not be able to find any instances List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(0, instances.size()); // switch to john user who has engineering role changeUser(USER_JOHN); instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(5, instances.size()); } finally { abortProcessInstances(processInstanceIds); queryClient.unregisterQuery(query.getName()); changeUser(TestConfig.getUsername()); } }
@Test public void testGetTasksWithPotentialOwnerDoubleGroup() throws Exception { changeUser(USER_JOHN); Long pidOne = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK_DOUBLE_GROUP); Long pidTwo = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK_DOUBLE_GROUP); QueryDefinition query = getTasksWithPotentialOwnerQueryDefinition(); try { queryClient.registerQuery(query); List<org.kie.server.api.model.instance.TaskSummary> test = taskClient.findTasksAssignedAsPotentialOwner(USER_JOHN, 0, 10); assertNotNull(test); assertEquals(2, test.size()); QueryFilterSpec filterSpec = new QueryFilterSpecBuilder().in("processInstanceId", Arrays.asList(pidOne, pidTwo)).get(); List<TaskInstance> tasks = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_TASK, filterSpec, 0, 10, TaskInstance.class); assertNotNull(tasks); assertEquals(2, tasks.size()); } finally { processClient.abortProcessInstance(CONTAINER_ID, pidOne); processClient.abortProcessInstance(CONTAINER_ID, pidTwo); queryClient.unregisterQuery(query.getName()); changeUser(USER_YODA); } }
@Test public void testInvalidQuery() { QueryDefinition query = new QueryDefinition(); query.setName("invalidQuery"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("this is an invalid query"); query.setTarget("CUSTOM"); try { assertClientException( () -> queryClient.registerQuery(query), 500, "Can't get metadata on specified data set: invalidQuery"); assertClientException( () -> queryClient.getQuery(query.getName()), 404, "Could not find query definition with name \"" + query.getName() + "\"", "Query invalidQuery not found"); } catch (Throwable e) { try { queryClient.unregisterQuery(query.getName()); } catch (KieServicesException ex) { // expected in case the query wasn't registered } throw e; } }
try { queryClient.registerQuery(query);
try { QueryDefinition registered = queryClient.registerQuery(query); assertNotNull(registered); assertEquals(query.getName(), registered.getName());