/*
* Copyright 2015 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;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import org.kie.server.api.model.ReleaseId;
import org.kie.server.api.model.instance.TaskSummary;
import org.kie.server.api.exception.KieServicesException;
import static org.junit.Assert.*;
import org.kie.server.client.UIServicesClient;
import org.kie.server.integrationtests.config.TestConfig;
import org.kie.server.integrationtests.shared.KieServerDeployer;
public class FormServiceIntegrationTest extends JbpmKieServerBaseIntegrationTest {
private static ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "definition-project",
"1.0.0.Final");
private static final String CONTAINER_ID = "definition-project";
private static final String HIRING_PROCESS_ID = "hiring";
private static final String HIRING_2_PROCESS_ID = "hiring2";
private static final String HIRING_SUBFORM_PROCESS_ID = "hiringSubform";
@BeforeClass
public static void buildAndDeployArtifacts() {
KieServerDeployer.buildAndDeployCommonMavenParent();
KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/definition-project").getFile());
createContainer(CONTAINER_ID, releaseId);
}
@Test
public void testGetProcessFormViaUIClientTest() throws Exception {
String result = uiServicesClient.getProcessForm(CONTAINER_ID, HIRING_PROCESS_ID, "en");
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
}
@Test(expected = KieServicesException.class)
public void testGetProcessNotExistingFormViaUIClientTest() throws Exception {
uiServicesClient.getProcessForm(CONTAINER_ID, "not-existing", "en");
}
@Test
public void testGetTaskFormViaUIClientTest() throws Exception {
long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_PROCESS_ID);
runGetTaskFormTest( processInstanceId );
}
@Test(expected = KieServicesException.class)
public void testGetTaskNotExistingFormViaUIClientTest() throws Exception {
uiServicesClient.getTaskForm(CONTAINER_ID, 9999l, "en");
}
@Test
public void testGetProcessFormInPackageViaUIClientTest() throws Exception {
String result = uiServicesClient.getProcessForm(CONTAINER_ID, HIRING_2_PROCESS_ID, "en");
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
}
@Test
public void testGetTaskFormInPackageViaUIClientTest() throws Exception {
long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_2_PROCESS_ID);
runGetTaskFormTest( processInstanceId );
}
protected void runGetTaskFormTest( long processInstanceId ) {
assertTrue(processInstanceId > 0);
try {
List<TaskSummary> tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
Long taskId = tasks.get(0).getId();
String result = uiServicesClient.getTaskForm(CONTAINER_ID, taskId, "en");
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
} finally {
processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
}
}
@Test
public void testGetTaskRawFormViaUIClient() throws Exception {
long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_2_PROCESS_ID);
assertTrue(processInstanceId > 0);
try {
List<TaskSummary> tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
Long taskId = tasks.get(0).getId();
String result = uiServicesClient.getTaskRawForm( CONTAINER_ID, taskId );
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
} finally {
processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
}
}
@Test
public void testGetProcessFormViaUIClientTestByType() throws Exception {
String result = uiServicesClient.getProcessFormByType(CONTAINER_ID, HIRING_PROCESS_ID, "en", UIServicesClient.FORM_TYPE);
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
assertTrue(result.contains("hiring-taskform.frm"));
}
@Test
public void testGetProcessRawFormViaUIClient() throws Exception {
String result = uiServicesClient.getProcessRawForm( CONTAINER_ID, HIRING_PROCESS_ID );
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
}
@Test
public void testGetTaskFormInPackageViaUIClientTestByType() throws Exception {
changeUser(USER_JOHN);
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", "john");
parameters.put("age", 33);
parameters.put("mail", "john@doe.org");
long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_2_PROCESS_ID, parameters);
assertTrue(processInstanceId > 0);
try {
List<TaskSummary> tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
Long taskId = tasks.get(0).getId();
String result = uiServicesClient.getTaskFormByType(CONTAINER_ID, taskId, "en", UIServicesClient.FORM_MODELLER_TYPE);
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
parameters.put("out_age", 33);
parameters.put("out_mail", "john@doe.org");
taskClient.completeAutoProgress(CONTAINER_ID, taskId, USER_JOHN, parameters);
tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
taskId = tasks.get(0).getId();
result = uiServicesClient.getTaskFormByType(CONTAINER_ID, taskId, "en", UIServicesClient.FREE_MARKER_TYPE);
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
taskClient.completeAutoProgress(CONTAINER_ID, taskId, USER_JOHN, parameters);
tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
taskId = tasks.get(0).getId();
result = uiServicesClient.getTaskFormByType(CONTAINER_ID, taskId, "en", UIServicesClient.FORM_TYPE);
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
} finally {
processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
changeUser(TestConfig.getUsername());
}
}
@Test
public void testGetProcessWithSubFormRawFormViaUIClient() throws Exception {
String result = uiServicesClient.getProcessRawForm( CONTAINER_ID, HIRING_SUBFORM_PROCESS_ID );
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
// check there is content from subform
assertTrue("Missing subform content", result.contains("creationDate"));
// check there is content from multi subform
assertTrue("Missing multi subform content", result.contains("unitPrice"));
}
@Test
public void testGetTaskFormWithSubformsViaUIClientTest() throws Exception {
long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_SUBFORM_PROCESS_ID);
assertTrue(processInstanceId > 0);
try {
List<TaskSummary> tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
Long taskId = tasks.get(0).getId();
String result = uiServicesClient.getTaskRawForm(CONTAINER_ID, taskId);
logger.debug("Form content is '{}'", result);
assertNotNull(result);
assertFalse(result.isEmpty());
// check there is content from subform
assertTrue("Missing subform content", result.contains("creationDate"));
// check there is content from multi subform
assertTrue("Missing multi subform content", result.contains("unitPrice"));
} finally {
processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
}
}
}