All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.camunda.zeebe.process.test.inspections.ProcessDefinitionInspectionUtility Maven / Gradle / Ivy

/*
 * Copyright © 2021 camunda services GmbH ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     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 io.camunda.zeebe.process.test.inspections;

import io.camunda.zeebe.client.api.response.DeploymentEvent;
import io.camunda.zeebe.model.bpmn.Bpmn;
import io.camunda.zeebe.process.test.assertions.BpmnAssert;
import io.camunda.zeebe.process.test.filters.StreamFilter;
import io.camunda.zeebe.protocol.record.value.deployment.Process;
import java.io.ByteArrayInputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.assertj.core.api.Assertions;
import org.camunda.bpm.model.xml.instance.DomElement;

public class ProcessDefinitionInspectionUtility {
  /**
   * Finds the BPMN element id by its name.
   *
   * 

Keeps the test human-readable when asserting on bpmn elements. Asserts that there is only * one element for the given name to prevent mistakes. * * @param bpmnElementName the name of the BPMN element * @return the id of the found BPMN element */ public static String getBpmnElementId(String bpmnElementName) { return getBpmnElementId( StreamFilter.processRecords(BpmnAssert.getRecordStream()).getProcessDefinitions(), bpmnElementName); } /** * Finds the BPMN element id by its name inside the referenced BPMN process. * *

Keeps the test human-readable when asserting on bpmn elements. Asserts that there is only * one element for the given name to prevent mistakes. * * @param bpmnProcessId the id of the deployed process * @param bpmnElementName the name of the BPMN element * @return the id of the found BPMN in the given process */ public static String getBpmnElementId(String bpmnProcessId, String bpmnElementName) { return getBpmnElementId( StreamFilter.processRecords(BpmnAssert.getRecordStream()) .withBpmnProcessId(bpmnProcessId) .getProcessDefinitions(), bpmnElementName); } /** * Finds the BPMN element id by its name inside the referenced deployment. * *

Keeps the test human-readable when asserting on bpmn elements. Asserts that there is only * one element for the given name to prevent mistakes. * * @param deployment * @param bpmnElementName * @return */ public static String getBpmnElementId(DeploymentEvent deployment, String bpmnElementName) { return getBpmnElementId( StreamFilter.processRecords(BpmnAssert.getRecordStream()) .withDeployment(deployment) .getProcessDefinitions(), bpmnElementName); } private static String getBpmnElementId(Stream stream, String bpmnElementName) { List potentialElementIds = stream .map( processResource -> Bpmn.readModelFromStream( new ByteArrayInputStream(processResource.getResource()))) .flatMap( bpmnModelInstance -> getChildElementsFlattened(bpmnModelInstance.getDocument().getRootElement()) .stream()) .filter(element -> Objects.equals(element.getAttribute("name"), bpmnElementName)) .map(element -> element.getAttribute("id")) .distinct() .collect(Collectors.toList()); Assertions.assertThat(potentialElementIds).hasSize(1); return potentialElementIds.get(0); } private static Set getChildElementsFlattened(DomElement parent) { Set elements = new HashSet<>(); elements.add(parent); parent.getChildElements().forEach(child -> elements.addAll(getChildElementsFlattened(child))); return elements; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy