@Test
  public void testHumanTaskFlow_shouldWorkWithGivenProcessBag() throws Exception {
    authenticateAsAdmin();
    addWorkflow("TaskDemoWorkflow");

    ProcessBag processBag = new ProcessBag();
    processBag.addProperty("test", "test");
    Map<String, Object> parameterMap = new HashMap<String, Object>();
    parameterMap.put("processBag", processBag);

    assertThat(taskboxService.getOpenTasks().size(), is(0));

    workflowService.startFlow("TaskDemoWorkflow", parameterMap);
    System.out.println("workflow started, getting processId");
    assertNotNull(processBag.getProcessId());
    System.out.println("got processId");
    assertThat(taskboxService.getOpenTasks().size(), is(1));
    System.out.println("opentasks is 1");

    Task task = taskboxService.getOpenTasks().get(0);
    System.out.println("got task");
    assertEquals(task.getProcessId(), processBag.getProcessId());
    assertEquals(task.getProperty("test"), "test");
    assertEquals(task.getTaskType(), "demo");
    assertNotNull(task.getTaskId());
    System.out.println("task correct, finishing");
    taskboxService.finishTask(task);
    assertTrue(taskboxService.getOpenTasks().size() == 0);
  }
  @SuppressWarnings({"serial"})
  public CustomTaskPanel(String id, Task t) {
    super(id);
    task = t;

    add(new Label("taskid", task.getTaskId()));
    add(new Label("taskname", task.getName()));
    add(new Label("tasktype", task.getTaskType() != null ? task.getTaskType() : "N/A"));

    add(
        new Label(
            "taskdescription", task.getDescription() != null ? task.getDescription() : "N/A"));

    Form<Task> form = new Form<Task>("inputForm");
    form.setOutputMarkupId(true);

    form.add(new Label("taskid", new PropertyModel<String>(task, "taskId")));
    form.add(
        new TextField<String>("taskname", new PropertyModel<String>(task, "name"))
            .setRequired(true)
            .add(StringValidator.minimumLength(2)));
    form.add(
        new TextField<String>("tasktype", new PropertyModel<String>(task, "taskType"))
            .setRequired(true)
            .add(StringValidator.minimumLength(2)));
    form.add(
        new Label(
            "taskcreationTimestamp",
            task.getTaskCreationTimestamp() != null
                ? task.getTaskCreationTimestamp().toString()
                : "N/A"));
    form.add(
        new TextArea<String>("taskdescription", new PropertyModel<String>(task, "description"))
            .setRequired(true));

    form.add(
        new AjaxButton("submitButton", form) {
          @Override
          protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            try {
              service.finishTask(task);
              // setResponsePage(TaskOverviewPage.class);
            } catch (WorkflowException e) {
              e.printStackTrace();
            }
          }

          @Override
          protected void onError(AjaxRequestTarget target, Form<?> form) {}
        });
    add(form);

    add(
        new ListView<String>("propertiesList", new ArrayList<String>(task.propertyKeySet())) {
          @Override
          protected void populateItem(ListItem<String> item) {
            item.add(new Label("propertiesLabel", item.getModel()));
          }
        });
  }
  @Test
  public void testHumanTaskFlow_shouldCreateOwnProcessBag() throws Exception {
    addWorkflow("TaskDemoWorkflow");

    assertThat(taskboxService.getOpenTasks().size(), is(0));

    authenticateAsAdmin();
    workflowService.startFlow("TaskDemoWorkflow");
    assertThat(taskboxService.getOpenTasks().size(), is(1));

    Task task = taskboxService.getOpenTasks().get(0);
    assertNotNull(task.getProcessId());
    assertNotNull(task.getTaskId());

    taskboxService.finishTask(task);
    assertThat(taskboxService.getOpenTasks().size(), is(0));
  }
  @Test
  public void testCompleteWorkflow_humanInteractionShouldReplaceValues() throws Exception {
    addWorkflow("HIDemoWorkflow");
    authenticateAsAdmin();
    workflowService.startFlow("HIDemoWorkflow");
    Task task = taskboxService.getOpenTasks().get(0);
    Date date = new Date();
    task.addOrReplaceProperty("test", date);
    assertEquals("step1", task.getTaskType());

    task.setName("test");
    taskboxService.updateTask(task);
    task = taskboxService.getOpenTasks().get(0);
    assertEquals("test", task.getName());

    taskboxService.finishTask(task);

    task = taskboxService.getOpenTasks().get(0);
    assertEquals(date, task.getProperty("test"));
    assertEquals("step2", task.getTaskType());

    taskboxService.finishTask(task);
    assertThat(taskboxService.getOpenTasks().size(), is(0));
  }