protected void assertProcessDeployed(String processKey, String expectedDeploymentName) {

    ProcessDefinition processDefinition =
        repositoryService
            .createProcessDefinitionQuery()
            .latestVersion()
            .processDefinitionKey(processKey)
            .singleResult();

    DeploymentQuery deploymentQuery =
        repositoryService.createDeploymentQuery().deploymentId(processDefinition.getDeploymentId());

    Assert.assertEquals(expectedDeploymentName, deploymentQuery.singleResult().getName());
  }
  public void testNotNullAndNullDeploymentSourceShouldDeployNewVersion() {
    // given

    String key = "process";
    String name = "my-deployment";

    BpmnModelInstance model = Bpmn.createExecutableProcess(key).done();

    ProcessDefinitionQuery processDefinitionQuery =
        repositoryService.createProcessDefinitionQuery().processDefinitionKey(key);

    DeploymentQuery deploymentQuery =
        repositoryService.createDeploymentQuery().deploymentName(name);

    // when

    ProcessApplicationDeployment deployment1 =
        repositoryService
            .createDeployment(processApplication.getReference())
            .name(name)
            .source("my-source1")
            .addModelInstance("process.bpmn", model)
            .enableDuplicateFiltering(true)
            .deploy();

    assertEquals(1, processDefinitionQuery.count());
    assertEquals(1, deploymentQuery.count());

    ProcessApplicationDeployment deployment2 =
        repositoryService
            .createDeployment(processApplication.getReference())
            .name(name)
            .source(null)
            .addModelInstance("process.bpmn", model)
            .enableDuplicateFiltering(true)
            .deploy();

    // then

    assertEquals(2, processDefinitionQuery.count());
    assertEquals(2, deploymentQuery.count());

    deleteDeployments(deployment1, deployment2);
  }
  public void testDeploymentSourceShouldNotBeNull() {
    String key = "process";

    BpmnModelInstance model = Bpmn.createExecutableProcess(key).done();

    DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();

    Deployment deployment1 =
        repositoryService
            .createDeployment()
            .name("first-deployment-without-a-source")
            .source("my-first-deployment-source")
            .addModelInstance("process.bpmn", model)
            .deploy();

    assertEquals(
        "my-first-deployment-source",
        deploymentQuery
            .deploymentName("first-deployment-without-a-source")
            .singleResult()
            .getSource());

    Deployment deployment2 =
        repositoryService
            .createDeployment(processApplication.getReference())
            .name("second-deployment-with-a-source")
            .source("my-second-deployment-source")
            .addModelInstance("process.bpmn", model)
            .deploy();

    assertEquals(
        "my-second-deployment-source",
        deploymentQuery
            .deploymentName("second-deployment-with-a-source")
            .singleResult()
            .getSource());

    deleteDeployments(deployment1, deployment2);
  }
  public void testDefaultDeploymentSource() {
    String key = "process";

    BpmnModelInstance model = Bpmn.createExecutableProcess(key).done();

    DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();

    Deployment deployment =
        repositoryService
            .createDeployment(processApplication.getReference())
            .name("first-deployment-with-a-source")
            .addModelInstance("process.bpmn", model)
            .deploy();

    assertEquals(
        ProcessApplicationDeployment.PROCESS_APPLICATION_DEPLOYMENT_SOURCE,
        deploymentQuery
            .deploymentName("first-deployment-with-a-source")
            .singleResult()
            .getSource());

    deleteDeployments(deployment);
  }