@Test
  public void testBatchAddValidState() {
    // Add two more TestDummyNodes and related Edges to the existing graph. This is valid.
    final TestDummyNode testNode1 = new TestDummyNode();
    final TestDummyNode testNode2 = new TestDummyNode();
    final BpmnEdge testEdge1 = new BpmnEdgeImpl(new DefaultRoleImpl("general_edge"));
    final BpmnEdge testEdge2 = new BpmnEdgeImpl(new DefaultRoleImpl("general_edge"));
    final AddGraphNodeCommand testCmd1 = new AddGraphNodeCommand(process, testNode1);
    final AddGraphNodeCommand testCmd2 = new AddGraphNodeCommand(process, testNode2);
    final AddEdgeCommand testCmd3 = new AddEdgeCommand(node2, testNode1, testEdge1);
    final AddEdgeCommand testCmd4 = new AddEdgeCommand(testNode1, testNode2, testEdge2);
    final Results results1 =
        commandManager.execute(
            ruleManager, new BatchCommand(testCmd1, testCmd2, testCmd3, testCmd4));

    assertNotNull(results1);
    assertEquals(0, results1.getMessages().size());

    assertEquals(5, process.size());
    assertProcessContainsNodes(process, testNode1, testNode2);
    assertEquals(2, node2.getOutEdges().size());
    assertNodeContainsOutgoingEdges(node2, e2, testEdge1);

    assertEquals(1, testNode1.getInEdges().size());
    assertNodeContainsIncomingEdges(testNode1, testEdge1);
    assertEquals(1, testNode1.getOutEdges().size());
    assertNodeContainsOutgoingEdges(testNode1, testEdge2);

    assertEquals(1, testNode2.getInEdges().size());
    assertNodeContainsIncomingEdges(testNode2, testEdge2);
  }
  @Test
  public void testBatchAddInvalidState2() {
    // Add one more TestDummyNode and related Edges to the existing graph. However we attach the
    // TestDummyNode
    // to the existing StartProcessNode. This is invalid as a StartProcessNode can only contain one
    // outgoing Edge
    // and hence the batch should fail.
    final TestDummyNode testNode1 = new TestDummyNode();
    final BpmnEdge testEdge1 = new BpmnEdgeImpl(new DefaultRoleImpl("general_edge"));
    final AddGraphNodeCommand testCmd1 = new AddGraphNodeCommand(process, testNode1);
    final AddEdgeCommand testCmd2 = new AddEdgeCommand(node1, testNode1, testEdge1);
    final Results results1 =
        commandManager.execute(ruleManager, new BatchCommand(testCmd1, testCmd2));

    assertNotNull(results1);
    assertEquals(1, results1.getMessages().size());
    assertEquals(1, results1.getMessages(ResultType.ERROR).size());

    assertEquals(3, process.size());
    assertProcessNotContainsNodes(process, testNode1);
    assertEquals(1, node2.getOutEdges().size());
    assertNodeContainsOutgoingEdges(node2, e2);

    assertEquals(0, testNode1.getInEdges().size());
    assertEquals(0, testNode1.getOutEdges().size());
  }
  @Test
  public void testBatchAddInvalidState1() {
    // Add one more TestDummyNode and another EndProcessNode plus related Edges to the existing
    // graph.
    // This is invalid as a Process can only contain one EndProcessNode and hence the batch should
    // fail.
    final TestDummyNode testNode1 = new TestDummyNode();
    final EndProcessNode testNode2 = new EndProcessNode();
    final BpmnEdge testEdge1 = new BpmnEdgeImpl(new DefaultRoleImpl("general_edge"));
    final BpmnEdge testEdge2 = new BpmnEdgeImpl(new DefaultRoleImpl("general_edge"));
    final AddGraphNodeCommand testCmd1 = new AddGraphNodeCommand(process, testNode1);
    final AddGraphNodeCommand testCmd2 = new AddGraphNodeCommand(process, testNode2);
    final AddEdgeCommand testCmd3 = new AddEdgeCommand(node2, testNode1, testEdge1);
    final AddEdgeCommand testCmd4 = new AddEdgeCommand(testNode1, testNode2, testEdge2);
    final Results results1 =
        commandManager.execute(
            ruleManager, new BatchCommand(testCmd1, testCmd2, testCmd3, testCmd4));

    assertNotNull(results1);
    assertEquals(1, results1.getMessages().size());
    assertEquals(1, results1.getMessages(ResultType.ERROR).size());

    assertEquals(3, process.size());
    assertProcessNotContainsNodes(process, testNode1, testNode2);
    assertEquals(1, node2.getOutEdges().size());
    assertNodeContainsOutgoingEdges(node2, e2);

    assertEquals(0, testNode1.getInEdges().size());
    assertEquals(0, testNode1.getOutEdges().size());
    assertEquals(0, testNode2.getInEdges().size());
  }