def METHOD_NAME(self):
    ready_tasks = self.workflow.get_tasks(TaskState.READY)
    ready_tasks[0].update_data({'value': 'asdf'})
    ready_tasks[0].run()
    self.workflow.do_engine_steps()
    ready_tasks = self.workflow.get_tasks(TaskState.READY)
    # If quantity == 0, we throw an error with no error code
    ready_tasks[0].update_data({'quantity': 0})
    ready_tasks[0].run()
    self.workflow.do_engine_steps()
    # We formerly checked that subprocess data does not persist, but I think it should persist
    # A boundary event is just an alternate path out of a workflow, and we might need the context
    # of the event in later steps
    # The cancel boundary event should be cancelled
    cancel_task = self.workflow.get_tasks_from_spec_name("Catch_Cancel_Event")[0]
    self.assertEqual(cancel_task.state, TaskState.CANCELLED)
    # We should catch the None Error, but not Error 1
    error_none_task = self.workflow.get_tasks_from_spec_name("Catch_Error_None")[0]
    self.assertEqual(error_none_task.state, TaskState.COMPLETED)
    error_1_task = self.workflow.get_tasks_from_spec_name("Catch_Error_1")[0]
    self.assertEqual(error_1_task.state, TaskState.CANCELLED)
    # Make sure this branch didn't getfollowed
    print_task = self.workflow.get_tasks_from_spec_name("Activity_Print_Data")
    self.assertEqual(len(print_task), 1)
    self.assertEqual(print_task[0].state, TaskState.CANCELLED)