public function testStopOnFirstInvalidEventFalse()
{
// prepare item instance
$item = new Item00();
$item->attachBehavior('workflowBehavior', ['class' => SimpleWorkflowBehavior::className(), 'defaultWorkflowId' => 'Item04Workflow', 'propagateErrorsToModel' => true, 'stopOnFirstInvalidEvent' => false]);
$item->on(WorkflowEvent::beforeLeaveStatus('Item04Workflow/A'), [$this, 'invalidateEvent1']);
$item->on(WorkflowEvent::beforeEnterStatus('Item04Workflow/B'), [$this, 'invalidateEvent2']);
verify('stopOnFirstInvalidEvent is true', $item->stopOnFirstInvalidEvent)->false();
$item->sendToStatus('Item04Workflow/A');
verify('item is in status A', $item->getWorkflowStatus()->getId())->equals('Item04Workflow/A');
verify('item has no error', $item->hasErrors())->false();
// send to B
$item->sendToStatus('B');
expect('status is still A', $item->getWorkflowStatus()->getId())->equals('Item04Workflow/A');
expect('item has error', $item->hasErrors())->true();
expect('1 error message is set for attribute "status"', count($item->getErrors('status')))->equals(2);
$errorMessages = $item->getErrors('status');
expect('First error message is "err_message_1" ', $errorMessages[0])->equals("err_message_1");
expect('Second error message is "err_message_2" ', $errorMessages[1])->equals("err_message_2");
}