function testTransitionIsInvalidOnSubmit()
 {
     $artifact = new MockTracker_Artifact();
     $changeset = new MockTracker_Artifact_Changeset_Null();
     $bind = new MockTracker_FormElement_Field_List_Bind();
     $workflow = new MockWorkflow();
     $tracker = new MockTracker();
     $user = new MockUser();
     $v1 = new MockTracker_FormElement_Field_List_BindValue();
     $v1->setReturnValue('__toString', '# 123');
     $v1->setReturnValue('getLabel', 'label1');
     $submitted_value_1 = '123';
     // $v1
     $v2 = new MockTracker_FormElement_Field_List_BindValue();
     $v2->setReturnValue('__toString', '# 456');
     $v2->setReturnValue('getLabel', 'label2');
     $submitted_value_2 = '456';
     // $v2
     $artifact->setReturnReference('getLastChangeset', $changeset);
     $bind->setReturnReference('getValue', $v2, array($submitted_value_2));
     // null -> v1
     // v1 -> v2
     // other are invalid
     $workflow->setReturnValue('isTransitionExist', true, array(null, $v1));
     $workflow->setReturnValue('isTransitionExist', true, array($v1, $v2));
     $workflow->setReturnValue('isTransitionExist', false);
     $field_list = new $this->field_class();
     $field_list->setReturnReference('getBind', $bind);
     $field_list->setReturnValue('fieldHasEnableWorkflow', true);
     $field_list->setReturnReference('getWorkflow', $workflow);
     $field_list->setReturnReference('getTracker', $tracker);
     $field_list->setReturnValue('permission_is_authorized', true);
     $field_list->setReturnValue('getCurrentUser', $user);
     $field_list->setReturnValue('getTransitionId', 1);
     $field_list->setReturnValue('isNone', false);
     $field_list->setReturnValue('isRequired', false);
     $changeset->setReturnReference('getValue', $changeset_value_list, array($field_list));
     // We try to change the field from null to v2 => invalid
     $this->assertFalse($field_list->isValid($artifact, $submitted_value_2));
 }
 function testGetFieldData()
 {
     $bind = new MockTracker_FormElement_Field_List_Bind();
     $bind->setReturnValue('getFieldData', '115', array('existing value', '*'));
     $bind->setReturnValue('getFieldData', '118', array('yet another existing value', '*'));
     $bind->setReturnValue('getFieldData', null, array('new value', '*'));
     $bind->setReturnValue('getFieldData', null, array('yet another new value', '*'));
     $bind->setReturnValue('getFieldData', null, array('existing open value', '*'));
     $bind->setReturnValue('getFieldData', null, array('yet another existing open value', '*'));
     $bind->setReturnValue('getFieldData', null, array('', '*'));
     $odar = new MockDataAccessResult();
     $odar->setReturnValue('getRow', false);
     $open_value_dao = new MockTracker_FormElement_Field_List_OpenValueDao();
     $odar_30 = new MockDataAccessResult();
     $odar_30->setReturnValue('getRow', array('id' => '30', 'field_id' => '1', 'label' => 'existing open value'));
     $odar_40 = new MockDataAccessResult();
     $odar_40->setReturnValue('getRow', array('id' => '40', 'field_id' => '1', 'label' => 'yet another existing open value'));
     $open_value_dao->setReturnReference('searchByExactLabel', $odar_30, array(1, 'existing open value'));
     $open_value_dao->setReturnReference('searchByExactLabel', $odar_40, array(1, 'yet another existing open value'));
     $open_value_dao->setReturnReference('searchByExactLabel', $odar, array(1, 'new value'));
     $open_value_dao->setReturnReference('searchByExactLabel', $odar, array(1, 'yet another new value'));
     $open_value_dao->setReturnReference('searchByExactLabel', $odar, array(1, ''));
     $f = new Tracker_FormElement_Field_OpenListTestVersion();
     $f->setReturnReference('getOpenValueDao', $open_value_dao);
     $f->setReturnReference('getBind', $bind);
     $f->setReturnValue('getId', 1);
     $this->assertEqual("!new value,!yet another new value", $f->getFieldData('new value,yet another new value', true));
     $this->assertEqual("!new value,b115", $f->getFieldData('new value,existing value', true));
     $this->assertEqual("!new value,o30,b115", $f->getFieldData('new value,existing open value,existing value', true));
     $this->assertNull($f->getFieldData('', true));
 }