Hello.
I am developer and i want to teach Camunda BPM to our apprenticies. So i set up a Camunda Spring Boot app:
https://bitbucket.org/education-new/employeemanagerspringboot/admin
Please have a look at the ‘CreateCompanyDelegate’:
…
package de.sternico.employeemanager.server.delegate;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.springframework.beans.factory.annotation.Autowired;
import de.sternico.employeemanager.server.BpmnDefinitions;
import de.sternico.employeemanager.server.delegate.base.EmployeeManagerDelegate;
import de.sternico.employeemanager.server.entity.Company;
import de.sternico.employeemanager.server.repository.CompanyRepository;
@Named
public class CreateCompanyDelegate extends EmployeeManagerDelegate
{
private static final Logger logger = Logger.getLogger(CreateCompanyDelegate.class);
@Autowired
private CompanyRepository companyRepository;
@Override
public void execute(DelegateExecution execution) throws Exception
{
// will be null in a camunda test scenario!!
if (companyRepository != null)
{
String companyName = (String) execution.getVariable(BpmnDefinitions.Variables.COMPANY_NAME);
Company company = new Company();
company.setName(companyName);
companyRepository.save(company);
System.out.println("created a company [" + companyName + "]...yeah!!!");
}
}
}
…
Running the spring boot app, it works fine and persists a Company object in h2 database. Running e.g. the test ‘CompanyProcessTest’ → (testApproveCompany())
…
package de.sternico.employeemanager;
import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.assertThat;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.camunda.bpm.engine.test.Deployment;
import org.camunda.bpm.engine.test.ProcessEngineRule;
import org.camunda.bpm.extension.process_test_coverage.junit.rules.TestCoverageProcessEngineRuleBuilder;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import de.sternico.employeemanager.server.BpmnDefinitions;
import de.sternico.employeemanager.server.util.MapBuilder;
@RunWith(SpringJUnit4ClassRunner.class)
// @DataJpaTest
// @EnableJpaRepositories(basePackages = “de.sternico.employeemanager.server.repository”)
@Deployment(resources = “ApproveCompanyProcess.bpmn”)
public class CompanyProcessTest extends EmployeeManagerTest
{
@Rule
@ClassRule
public static ProcessEngineRule processEngine = TestCoverageProcessEngineRuleBuilder.create().build();
// works if the test is marked as '@DataJpaTest', but not in the
// process engine test context...
// @Autowired
// private CompanyRepository companyRepository;
@Test
public void testApproveCompany()
{
ProcessInstance instance = processEngine.getRuntimeService()
.startProcessInstanceByKey(BpmnDefinitions.ProcessKeys.APPROVE_COMPANY_PROCESS);
assertThat(instance).isWaitingAt(BpmnDefinitions.Tasks.TASK_APPROVE_COMPANY);
processEngine.getTaskService()
.complete(getTask(processEngine, instance, BpmnDefinitions.Tasks.TASK_APPROVE_COMPANY).getId(),
MapBuilder.getInstance().addEntry(BpmnDefinitions.Variables.COMPANY_APPROVED, true).create());
assertThat(instance).hasPassed(BpmnDefinitions.Tasks.TASK_CREATE_COMPANY);
assertThat(instance).isEnded();
}
@Test
public void testDeclineCompany()
{
ProcessInstance instance = processEngine.getRuntimeService()
.startProcessInstanceByKey(BpmnDefinitions.ProcessKeys.APPROVE_COMPANY_PROCESS);
assertThat(instance).isWaitingAt(BpmnDefinitions.Tasks.TASK_APPROVE_COMPANY);
processEngine.getTaskService()
.complete(getTask(processEngine, instance, BpmnDefinitions.Tasks.TASK_APPROVE_COMPANY).getId(),
MapBuilder.getInstance().addEntry(BpmnDefinitions.Variables.COMPANY_APPROVED, false).create());
assertThat(instance).hasNotPassed(BpmnDefinitions.Tasks.TASK_CREATE_COMPANY);
assertThat(instance).isEnded();
}
}
…
the companyRepository in the delegate is not autowired and NULL. Could you tell me how to avoid that?
Thanks,
Stefan