Примеры использования Assert

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Подтверждения (Assertions)

Экземпляр: isActive

Подтвердить, что экземпляр процесса активен в настоящее время, то есть ни приостановлен, ни завершен:

assertThat(processInstance).isActive();

Экземпляр: isEnded

Подтвердить, что экземпляр процесса уже завершен:

assertThat(processInstance).isEnded();

Экземпляр: isNotEnded

Подтвердить, что экземпляр процесса еще не завершен:

assertThat(processInstance).isNotEnded();

Экземпляр: isStarted

Подтвердить, что экземпляр процесса стартовал:

assertThat(processInstance).isStarted();

Экземпляр: isSuspended

Подтвердить, что экземпляр процесса приостановлен:

assertThat(processInstance).isSuspended();

Экземпляр: hasPassed

Подтвердить, что экземпляр процесса прошел через заданную активность:

assertThat(processInstance).hasPassed("edit");

Подтвердить, что экземпляр процесса прошел через несколько заданных активностей:

assertThat(processInstance).hasPassed("edit", "correct");

Экземпляр: hasPassedInOrder

Подтвердить, что экземпляр процесса прошел через несколько заданных активностей строго в заданном порядке:

assertThat(processInstance).hasPassedInOrder("edit", "review", "correct");

Вы даже можете подтвердить, что конкретная активность была пройдена несколько раз:

assertThat(processInstance).hasPassedInOrder("edit", "review", "correct", "review", "correct", "review", "publish");

Не имеет значение, были ли пройдены другие активности в промежутках между этими заданными активностями. Имеет значение только былл ли порядок правильным. Поэтому в приведенном только что примере следующее более минималистичное подтверждение тоже пройдет:

assertThat(processInstance).hasPassedInOrder("edit", "review", "publish");

Экземпляр: hasNotPassed

Подтвердить, что экземпляр процесса не прошел через определенную активность:

assertThat(processInstance).hasNotPassed("edit");

Подтвердить, что экземпляр процесса не прошел ни через одну из нескольких перечисленных активностей:

assertThat(processInstance).hasNotPassed("edit", "correct");

Экземпляр: hasVariables

Подтвердить, что экземплр процесса содержит хотя бы одну процессную переменную:

assertThat(processInstance).hasVariables();

Подтвердить, что экземпляр процесса содержит, помимо потенциально других переменных, одну или более процессных переменных заданного вида:

assertThat(processInstance)
  .hasVariables("approved")
  .hasVariables("jobAnnouncementId", "approved");

Экземпляр: hasNoVariables

Подтвердить, что экземпляр процесса не содержит вообще никаких процессных переменных:

assertThat(processInstance).hasNoVariables();

Экземпляр: hasProcessDefinitionKey

Подтвердить, что экземпляр процесса основан на заданном определении процесса:

assertThat(processInstance).hasProcessDefinitionKey("myProcessDefinitionKey");

Экземпляр: hasBusinessKey

Подтвердить, что экземпляр процесса имеет заданный бизнес-ключ:

assertThat(processInstance).hasBusinessKey("myBusinessKey");

Экземпляр: isWaitingAt

Подтвердить, что экземпляр процесса в настоящее время ждет на заданном id активности:

assertThat(processInstance).isWaitingAt("edit");

Подтвердить, что экземпляр процесса в настоящее время ждет на нескольких заданных id активностей:

assertThat(processInstance).isWaitingAt("edit", "correct");

Экземпляр: isNotWaitingAt

Подтвердить, что экземпляр процесса в настоящий момент НЕ ждет на заданном id активности:

assertThat(processInstance).isNotWaitingAt("edit");

Подтвердить, что экземпляр процесса в настоящий момент НЕ ждет на нескольких заданных id активностей:

assertThat(processInstance).isNotWaitingAt("edit", "correct");

Экземпляр: isWaitingAtExactly

Подтвердить, что экземпляр процесса в настоящее время ждет точно на одном заданном id активности:

assertThat(processInstance).isWaitingAtExactly("edit");

Подтвердить, что экземпляр процесса в настоящее время ждет точно на нескольких заданных id активностей:

assertThat(processInstance).isWaitingAtExactly("edit", "correct");

Экземплр: isWaitingFor

Подтвердить, что экземпляр процесса в настоящее время ждет заданного сообщения:

assertThat(processInstance).isWaitingFor("myMessage");

Подтвердить, что экземпляр процесса в настоящее время ждет нескольких заданных сообщений:

assertThat(processInstance).isWaitingFor("myMessage", "yourMessage");

Экземпляр: isNotWaitingFor

Подтвердить, что экземпляр процесса в настоящее время НЕ ждет заданного сообщения:

assertThat(processInstance).isNotWaitingFor("myMessage");

Подтвердить, что экземпляр процесса в настоящее время НЕ ждет ни одного из нескольких заданных сообщений:

assertThat(processInstance).isNotWaitingFor("myMessage", "yourMessage");

Определение: hasActiveInstances

Подтвердить, что определение процесса в настоящий момент имеет в точности ожидаемое количество "активных" (ни законченных, ни приостановленных) экземпляров:

assertThat(processDefinition).hasActiveInstances("1");

Джоба: hasActivityId

Подтвердить, что джоба базируется на определении активности с заданным id:

assertThat(job).hasActivityId("ServiceTask_1");

Джоба: hasDeploymentId

Подтвердить, что у джобы заданный id деплоймента:

assertThat(job).hasDeploymentId(deploymentId);

Джоба: hasDueDate

Подтвердить, что у джобы есть конкретная дата окончания:

assertThat(job).hasDueDate(dueDate);

Джоба: hasId

Подтвердить конкретный внутренний Assert id для джобы:

assertThat(job).hasId(id);

Джоба: hasRetries

Подтвердить, что у джобы осталось конкретное число повторных попыток:

assertThat(job).hasRetries(3);

Задача: isAssignedTo

Подтвердить, что заданный пользователь назначен на задачу:

assertThat(task).isAssignedTo("kermit");

Задача: isNotAssigned

Подтвердить, что на настоящий момент задача не назначена ни на какого пользователя:

assertThat(task).isNotAssigned();

Задача: hasCandidateGroup

Подтвердить, что задача ожидает назначения на заданную группу кандидатов.

assertThat(task).hasCandidateGroup("human-resources-department");

Отметим, что (в соответствии с интерпретацией термина "кандидат", принятой в Camunda) назначенные задачи не пройдут этот тест, хотя следующий описываемый здесь тест будет пройден:

Задача: hasCandidateGroupAssociated

Подтвердить ожидания от том, что задача в настоящее время ассоциирована с заданной группой кандидатов — независимо от того, назначена ли она на конкретного пользователя или нет.

assertThat(task).hasCandidateGroupAssociated("human-resources-department");

Задача: hasCandidateUser

Подтвердить, что задача ожидает назначения на конкретного пользователя-кандидата:

assertThat(task).hasCandidateUser("kermit");

Отметим, что (в соответствии с интерпретацией термина "кандидат", принятой в Camunda) назначенные задачи не пройдут этот тест, хотя следующий описываемый здесь тест будет пройден:

Задача: hasCandidateUserAssociated

Подтвердить ожидание, что задача в настоящее время ассоциирована с заданным пользователем-кандидатом, назваисимо от того, анзначена ли она на конкретного пользователя или нет.

assertThat(task).hasCandidateUserAssociated("kermit");

Задача: hasDefinitionKey

Подтвердить, что у задачи имеется заданный ключ определения (он же атрибут элемента `<userTask id="review-and-approve" …​/>`в XML-файле определения процесса BPMN 2.0):

assertThat(task).hasDefinitionKey("review-and-approve");

Задача: hasDescription

Подтвердить, что у задачи имеется заданное описание в свободном текстовом формате:

assertThat(task).hasDescription("Please review and approve the result document.");

Задача: hasDueDate

Подтвердить, что у задачи имеется дата окончания и она соответствует заданной:

assertThat(task).hasDueDate(expectedDueDate);

Задача: hasFormKey

Подтвердить, что задача ассоциирована с заданной формой (ключом):

assertThat(task).hasFormKey("myForm.html");

Задача: hasId

Подтвердить, что задача имеет заданный внутренний id:

assertThat(task).hasId("1");

Задача: hasName

Подтвердить, что задача имеет заданное имя:

assertThat(task).hasName("Review and approve");

Внешняя задача: hasActivityId

Подтвердить, что внешняя задача имеет заданный id активности:

assertThat(externalTask).hasActivityId("review-and-approve");

Внешняя задача: hasTopicName

Подтвердить, что внешняя задача имеет заданное имя темы:

assertThat(externalTask).hasTopicName("Review and approve");

Помощники (Helpers)

Нахождение задач, событий и шлюзов по имени

Вы можете сделать маппинг имени задачи, события или шлюза его ID с помощью статического метода-помощника:

findId("My verbose task name");

Запрос на получение задачи

Вы можете сделать запрос на получение задачи напрямую с помощью статического метода-помощника:

claim(task, "fozzie");

Отказ от запроса на получение задачи

Вы можете отказаться от запроса на получение задачи напрямую с помощью статического метода-помощника:

unclaim(task);

Завершение выполнения задачи

Вы можете завершить выполнение задачи напрямую с помощью статического метода-помощника:

complete(task);

Завершение выполнения задач и передача процессных переменных

Вы можете сконструировать карты процессных переменных, передав последовательность пар "ключ/значение" в статический метод-помощник withVariables:

Map<String, Object> variables = withVariables("documentId", 5, "approved", true);

Соответственно, вы можете, например, написать:

complete(task, withVariables("documentId", 5, "approved", true));

Завершение выполнения внешних задач

Вы можете завершить выполнение внешней задачи напрямую с помощью статического метода-помощника:

complete(externalTask);

Завершение выполнения внешних задач и передача процессных переменных

Вы можете сконструировать карты процессных переменных, передав последовательность пар "ключ/значение" в статический метод-помощник withVariables:

Map<String, Object> variables = withVariables("documentId", 5, "approved", true);

Соответственно, вы можете, например, написать:

complete(externalTask, withVariables("documentId", 5, "approved", true));

Выполнение джоб

Вы можете выполнить джобу напрямую с помощью статического метода-помощника:

execute(job());

Создание запросов

Вы можете создавать запросы напрямую с помощью статического метода-помощника:

TaskQuery taskQuery = taskQuery();
JobQuery jobQuery = jobQuery();
ProcessInstanceQuery processInstanceQuery = processInstanceQuery();
ExecutionQuery executionQuery = executionQuery();

Соответственно, вы можете, например, написать:

assertThat(processInstance).task(taskQuery().taskAssignee("fozzie")).hasCandidateGroup("human-resources-department");

Доступ к движку и сервисам API движка

Вы можете получить доступ к движку и сервисам API напрямую с помощью статических методов-помощников:

ProcessEngine engine = processEngine();

AuthorizationService authorizationService = authorizationService();
FormService formService = formService();
HistoryService historyService = historyService();
IdentityService identityService = identityService();
ManagementService managementService = managementService();
RepositoryService repositoryService = repositoryService();
RuntimeService runtimeService = runtimeService();
TaskService taskService = taskService();

Подтверждения на единственной задаче экземпляра

Вы можете извлечь "цепной" assert задачи, проверяющий единственную задачу, доступную в настоящий момент в контексте экземпляра процесса…​

assertThat(processInstance).task();
  1. чтобы напрямую выполнить подтверждения на ней, например:

assertThat(processInstance).task().isNotAssigned();

Подтверждения на конкретной задаче из экземпляра

Вы можете извлечь "цепной" assert задачи, проверяющий конкретную задачу, доступную в настоящий момент в контексте экземпляра процесса…​

assertThat(processInstance).task("edit");

или

assertThat(processInstance).task(taskQuery().taskAssignee("fozzie"));
  1. чтобы напрямую выполнить подтверждения на ней, например:

assertThat(processInstance).task("edit").isAssignedTo("fozzie");

Подтверждения на единственной внешней задаче экземпляра

Вы можете извлечь "цепной" assert задачи, проверяющий единственную внешнюю задачу, доступную в настоящий момент в контексте экземпляра процесса…​

assertThat(processInstance).externalTask();
  1. чтобы напрямую выполнить подтверждения на ней, например:

assertThat(processInstance).externalTask().hasTopicName("editing");

Подтверждения на конкретной внешней задаче из экземпляра

Вы можете извлечь "цепной" assert задачи, проверяющий конкретную внешнюю задачу, доступную в настоящий момент в контексте экземпляра процесса…​

assertThat(processInstance).externalTask("edit");

или

assertThat(processInstance).externalTask(externalTaskQuery().activityId("edit"));
  1. чтобы напрямую выполнить подтверждения на ней, например:

assertThat(processInstance).externalTask("edit").hasTopicName("editing");

Подтверждения на единственной джобе экземпляра

Вы можете извлечь "цепной" assert задачи, проверяющий единственную джобу, доступную в настоящий момент в контексте экземпляра процесса…​

assertThat(processInstance).job();
  1. чтобы напрямую выполнить подтверждения на ней, например:

assertThat(processInstance).job().hasRetries(0);

Подтверждения на конкретной джобе экземпляра

Вы можете извлечь "цепной" assert задачи, проверяющий конкретную джобу, доступную в настоящий момент в контексте экземпляра процесса…​

assertThat(processInstance).job("ServiceTask_1");

или

assertThat(processInstance).job(jobQuery().executionId(executionId));
  1. чтобы напрямую выполнить подтверждения на ней, например:

assertThat(processInstance).job("ServiceTask_1").hasRetries(0);

Making assertions on the only called process of a super process instance

You can retrieve a "chained" process instance assert inspecting the one and only called process instance currently available in the context of a super process instance…​

assertThat(processInstance).calledProcessInstance();
  1. in order to directly make assertions on it, e.g.

assertThat(processInstance).calledProcessInstance().hasProcessDefinitionKey("mySubProcessDefinitionKey");

Making assertions on a specific called process instance of a super process instance

You can retrieve a "chained" process instance assert inspecting a very specific called process instance currently available in the context of a super process instance, either by means of a processDefinitionKey…​

assertThat(processInstance).calledProcessInstance("mySubProcessDefinitionKey");

or even by means of a more sophisticated processInstanceQuery

assertThat(processInstance).calledProcessInstance(processInstanceQuery().processDefinitionKey("mySubProcessDefinitionKey"));
  1. in order to directly make assertions on it, e.g.

assertThat(processInstance).calledProcessInstance("mySubProcessDefinitionKey").isNotNull();

Making assertions on the process variables map of an instance

You can retrieve a "chained" process variables map assert inspecting all the process variables available in the context of a process instance…​

assertThat(processInstance).variables();
  1. in order to directly make assertions on them, e.g.

assertThat(processInstance).variables()
  .hasSize(2).containsEntry("approved", true);

You may want to compare that with the other possibility to assert whether a process instance hasVariables link:{{< relref "#instance-hasvariables" >}}[] (without leaving your current ProcessInstanceAssert).

Accessing tasks in the context of a process instance under test

You can directly access tasks in the context of the last asserted process instance by means of static helper methods:

assertThat(processInstance).isNotNull();
...
Task onlyTaskOflastAssertedProcessInstance = task();
Task someTaskOflastAssertedProcessInstance = task("review-and-approve");
Task sameTaskOflastAssertedProcessInstance = task(taskQuery().taskDefinitionKey("review-and-approve"));

You can therefore e.g. write …​

assertThat(processInstance).task().hasDefinitionKey("review-and-approve");
complete(task(), withVariables("documentId", 5, "approved", true));

Furthermore you can directly access tasks in the context of a specified process instance by means of static helper methods:

Task onlyTaskOfProcessInstance = task(processInstance);
Task someTaskOfProcessInstance = task("review-and-approve", processInstance);
Task sameTaskOfProcessInstance = task(taskQuery().taskDefinitionKey("review-and-approve"), processInstance);

You can therefore e.g. write …​

complete(task("review-and-approve", processInstance), withVariables("documentId", 5, "approved", true));

Accessing external tasks in the context of a process instance under test

You can directly access external tasks in the context of the last asserted process instance by means of static helper methods:

assertThat(processInstance).isNotNull();
...
ExternalTask onlyTaskOflastAssertedProcessInstance = externalTask();
ExternalTask someTaskOflastAssertedProcessInstance = externalTask("review-and-approve");
ExternalTask sameTaskOflastAssertedProcessInstance = externalTask(externalTaskQuery().activityId("review-and-approve"));

You can therefore e.g. write …​

assertThat(processInstance).externalTask().hasActivityId("review-and-approve");
complete(externalTask(), withVariables("documentId", 5, "approved", true));

Furthermore you can directly access external tasks in the context of a specified process instance by means of static helper methods:

ExternalTask onlyTaskOfProcessInstance = externalTask(processInstance);
ExternalTask someTaskOfProcessInstance = externalTask("review-and-approve", processInstance);
ExternalTask sameTaskOfProcessInstance = externalTask(externalTaskQuery().activityId("review-and-approve"), processInstance);

You can therefore e.g. write …​

complete(externalTask("review-and-approve", processInstance), withVariables("documentId", 5, "approved", true));

Accessing jobs in the context of a process instance under test

You can directly access jobs in the context of the last asserted process instance by means of static helper methods:

assertThat(processInstance).isNotNull();
...
Job onlyJobOflastAssertedProcessInstance = job();
Job someJobOflastAssertedProcessInstance = job("publish");
Job someJobOflastAssertedProcessInstance = job(jobQuery().executionId(executionId));

You can therefore e.g. write …​

assertThat(processInstance).job("publish").isNotNull();
execute(job("publish"));

Furthermore you can directly access jobs in the context of a specified process instance by means of static helper methods:

Task onlyJobOfProcessInstance = job(processInstance);
Task someJobOfProcessInstance = job("publish", processInstance);
Task sameJobOfProcessInstance = job(jobQuery().executable(), processInstance);

You can therefore e.g. write …​

execute(job("publish", processInstance));

Accessing called process instances in the context of a process instance under test

You can directly access called process instances in the context of the last asserted process instance by means of static helper methods:

assertThat(processInstance).isNotNull();
...
ProcessInstance onlyCalledProcessInstanceOflastAssertedProcessInstance = calledProcessInstance();
ProcessInstance someCalledProcessInstanceOflastAssertedProcessInstance = calledProcessInstance("myCalledProcessDefinitionKey");
ProcessInstance someCalledProcessInstanceOflastAssertedProcessInstance = calledProcessInstance(processInstanceQuery().processDefinitionKey("myCalledProcessDefinitionKey"));

You can therefore e.g. write …​

assertThat(processInstance).isNotNull();
ProcessInstance calledProcessInstance = calledProcessInstance();

Furthermore you can directly access jobs in the context of a specified super process instance by means of static helper methods:

ProcessInstance onlyCalledProcessInstanceOfProcessInstance = calledProcessInstance(superProcessInstance);
ProcessInstance someCalledProcessInstanceOfProcessInstance = calledProcessInstance("myCalledProcessDefinitionKey", superProcessInstance);
ProcessInstance sameCalledProcessInstanceOfProcessInstance = calledProcessInstance(processInstanceQuery().processDefinitionKey("myCalledProcessDefinitionKey"), superProcessInstance);

You can therefore e.g. write …​

ProcessInstance calledProcessInstance = calledProcessInstance("myCalledProcessDefinitionKey", superProcessInstance);

Accessing process definitions

You can directly access process definitions by means of static helper methods:

ProcessDefinition processDefinitionOflastAssertedProcessInstance = processDefinition();
ProcessDefinition processDefinitionOfSpecifiedProcessInstance = processDefinition(processInstance);
ProcessDefinition processDefinitionOfSpecifiedProcessDefinitionKey = processDefinition("myProcessDefintionKey");
ProcessDefinition processDefinitionConformingToSpecifiedQuery = processDefinition(processDefinitionQuery().processDefinitionKey("myProcessDefintionKey");

In order to check, whether your last asserted process instance is the only currently running instance of its own process definition you can therefore e.g. write …​

assertThat(processDefinition()).hasActiveInstances(1);

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org