function testGetChangesetValue()
 {
     $open_value_dao = new MockTracker_FormElement_Field_List_OpenValueDao();
     $odar_10 = mock('DataAccessResult');
     $odar_10->setReturnValue('getRow', array('id' => '10', 'field_id' => '1', 'label' => 'Open_1'));
     $odar_20 = mock('DataAccessResult');
     $odar_20->setReturnValue('getRow', array('id' => '10', 'field_id' => '1', 'label' => 'Open_2'));
     $open_value_dao->setReturnReference('searchById', $odar_10, array(1, '10'));
     $open_value_dao->setReturnReference('searchById', $odar_20, array(1, '20'));
     $value_dao = new $this->dao_class();
     $dar = mock('DataAccessResult');
     $dar->setReturnValueAt(0, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1000', 'openvalue_id' => null));
     $dar->setReturnValueAt(1, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1001', 'openvalue_id' => null));
     $dar->setReturnValueAt(2, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => null, 'openvalue_id' => '10'));
     $dar->setReturnValueAt(3, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => null, 'openvalue_id' => '20'));
     $dar->setReturnValueAt(4, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1002', 'openvalue_id' => null));
     $dar->setReturnValueAt(5, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1000', 'openvalue_id' => null));
     //two foreachs
     $dar->setReturnValueAt(6, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1001', 'openvalue_id' => null));
     //two foreachs
     $dar->setReturnValueAt(7, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => null, 'openvalue_id' => '10'));
     //two foreachs
     $dar->setReturnValueAt(8, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => null, 'openvalue_id' => '20'));
     //two foreachs
     $dar->setReturnValueAt(9, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1002', 'openvalue_id' => null));
     //two foreachs
     $dar->setReturnValue('valid', true);
     $dar->setReturnValueAt(5, 'valid', false);
     $dar->setReturnValueAt(11, 'valid', false);
     $value_dao->setReturnReference('searchById', $dar);
     $bind = new MockTracker_FormElement_Field_List_Bind_Static();
     $bind_values = array(1000 => mock('Tracker_FormElement_Field_List_BindValue'), 1001 => mock('Tracker_FormElement_Field_List_BindValue'), 1002 => mock('Tracker_FormElement_Field_List_BindValue'));
     $bind->setReturnValue('getBindValues', $bind_values, array(array('1000', '1001', '1002')));
     $list_field = new $this->field_class();
     $list_field->setReturnValue('getId', 1);
     $list_field->setReturnReference('getValueDao', $value_dao);
     $list_field->setReturnReference('getOpenValueDao', $open_value_dao);
     $list_field->setReturnReference('getBind', $bind);
     $changeset_value = $list_field->getChangesetValue(null, 123, false);
     $this->assertIsA($changeset_value, $this->cv_class);
     $this->assertTrue(is_array($changeset_value->getListValues()));
     $this->assertEqual(count($changeset_value->getListValues()), 5);
     $list_values = $changeset_value->getListValues();
     $this->assertIsA($list_values[0], 'Tracker_FormElement_Field_List_BindValue');
     $this->assertIsA($list_values[1], 'Tracker_FormElement_Field_List_BindValue');
     $this->assertIsA($list_values[2], 'Tracker_FormElement_Field_List_OpenValue');
     $this->assertIsA($list_values[3], 'Tracker_FormElement_Field_List_OpenValue');
     $this->assertIsA($list_values[4], 'Tracker_FormElement_Field_List_BindValue');
 }
 function testGetChangesetValue()
 {
     $value_dao = new $this->dao_class();
     $dar = new MockDataAccessResult();
     $dar->setReturnValueAt(0, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1000'));
     $dar->setReturnValueAt(1, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1001'));
     $dar->setReturnValueAt(2, 'current', array('id' => '123', 'field_id' => '1', 'bindvalue_id' => '1002'));
     $dar->setReturnValue('valid', true);
     $dar->setReturnValueAt(3, 'valid', false);
     $value_dao->setReturnReference('searchById', $dar);
     $bind = new MockTracker_FormElement_Field_List_Bind_Static();
     $bind->setReturnValue('getBindValues', array_fill(0, 3, new MockTracker_FormElement_Field_List_BindValue()));
     $list_field = new $this->field_class();
     $list_field->setReturnReference('getValueDao', $value_dao);
     $list_field->setReturnReference('getBind', $bind);
     $changeset_value = $list_field->getChangesetValue(null, 123, false);
     $this->assertIsA($changeset_value, $this->cv_class);
     $this->assertTrue(is_array($changeset_value->getListValues()));
     $this->assertEqual(count($changeset_value->getListValues()), 3);
     foreach ($changeset_value->getListValues() as $bv) {
         $this->assertIsA($bv, 'Tracker_FormElement_Field_List_BindValue');
     }
 }
 function testTransitionIsInvalidOnSubmit()
 {
     $artifact = new MockTracker_Artifact();
     $changeset = new MockTracker_Artifact_Changeset_Null();
     $bind = new MockTracker_FormElement_Field_List_Bind_Static();
     $workflow = new MockWorkflow();
     $tracker = new MockTracker();
     $user = mock('PFUser');
     $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));
 }