package org.activiti.engine.test.regression;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.validation.ProcessValidator;
/**
* From http://forums.activiti.org/content/skip-parse-validation-while-fetching-startformdata
*
* Test for validating that the process validator ONLY kicks in on deployment, not
* on reading again from database. The two tests should fail, cause the validator
* kicks in the second time, but not originally (don't do this at home, kids. Disabling the validator on deploy is BAD).
*
*/
public class ProcessValidationExecutedAfterDeployTest extends PluggableActivitiTestCase{
protected ProcessValidator processValidator;
private void disableValidation() {
processValidator = processEngineConfiguration.getProcessValidator();
processEngineConfiguration.setProcessValidator(null);
}
private void enableValidation() {
processEngineConfiguration.setProcessValidator(processValidator);
}
private void clearDeploymentCache() {
processEngineConfiguration.getProcessDefinitionCache().clear();
}
protected void tearDown() throws Exception {
enableValidation();
super.tearDown();
}
private ProcessDefinition getLatestProcessDefinitionVersionByKey(String processDefinitionKey) {
List<ProcessDefinition> definitions = null;
try {
definitions = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey).orderByProcessDefinitionVersion()
.latestVersion().desc().list();
if (definitions.isEmpty()) {
return null;
}
} catch (Exception e) {
fail(e.getMessage());
}
return definitions.get(0);
}
public void testGetLatestProcessDefinitionTextByKey() {
disableValidation();
repositoryService.createDeployment()
.addClasspathResource("org/activiti/engine/test/regression/ProcessValidationExecutedAfterDeployTest.bpmn20.xml")
.deploy();
enableValidation();
clearDeploymentCache();
ProcessDefinition definition = getLatestProcessDefinitionVersionByKey("testProcess1");
if (definition == null) {
fail("Error occurred in fetching process model.");
}
try {
repositoryService.getProcessModel(definition.getId());
assertTrue(true);
} catch (ActivitiException e) {
fail("Error occurred in fetching process model.");
}
for (org.activiti.engine.repository.Deployment deployment : repositoryService.createDeploymentQuery().list()) {
repositoryService.deleteDeployment(deployment.getId());
}
}
public void testGetStartFormData() {
disableValidation();
repositoryService.createDeployment()
.addClasspathResource("org/activiti/engine/test/regression/ProcessValidationExecutedAfterDeployTest.bpmn20.xml")
.deploy();
enableValidation();
clearDeploymentCache();
ProcessDefinition definition = getLatestProcessDefinitionVersionByKey("testProcess1");
if (definition == null) {
fail("Error occurred in fetching process model.");
}
try {
formService.getStartFormData(definition.getId());
assertTrue(true);
} catch (ActivitiException e) {
fail("Error occurred in fetching start form data:");
}
for (org.activiti.engine.repository.Deployment deployment : repositoryService.createDeploymentQuery().list()) {
repositoryService.deleteDeployment(deployment.getId());
}
}
}