예제 #1
0
 /**
  * Transfrom a Json decoded input into a useable php object
  *
  * It ensures data and format correctness
  *
  * @param Tracker $tracker
  * @param stdClass $json
  *
  * @throws Tracker_FormElement_InvalidFieldException
  * @throws Tracker_FormElement_InvalidFieldValueException
  * @throws Tracker_Workflow_Trigger_Exception_AddRuleJsonFormatException
  * @throws Tracker_Workflow_Trigger_Exception_TriggerInvalidConditionException
  *
  * @return Tracker_Workflow_Trigger_TriggerRule
  */
 public function getRuleFromJson(Tracker $tracker, stdClass $json)
 {
     $this->validator->validateJsonFormat($json, $tracker);
     $target = $this->getTarget($tracker->getId(), $json->target->field_id, $json->target->field_value_id);
     $condition = $json->condition;
     $triggers = $this->getTriggeringFields($tracker, $json->triggering_fields);
     return new Tracker_Workflow_Trigger_TriggerRule(null, $target, $condition, $triggers);
 }
예제 #2
0
 public function itRaisesAnExceptionIfTargetFieldAlreadyHasRuleForSameValue()
 {
     $json = new stdClass();
     $json->target = new stdClass();
     $json->target->field_id = 34;
     $json->target->field_value_id = 75;
     $json->condition = Tracker_Workflow_Trigger_RulesBuilderData::CONDITION_ALL_OFF;
     $triggering_field = new stdClass();
     $triggering_field->field_id = 46;
     $triggering_field->field_value_id = 156;
     $triggering_field2 = new stdClass();
     $triggering_field2->field_id = 67;
     $triggering_field2->field_value_id = 62;
     $json->triggering_fields = array($triggering_field, $triggering_field2);
     $field_list = mock('Tracker_FormElement_Field_List');
     $bind_value = mock('Tracker_FormElement_Field_List_BindValue');
     stub($bind_value)->getId()->returns(75);
     $target = new Tracker_Workflow_Trigger_FieldValue($field_list, $bind_value);
     $condition = 'some_condition';
     $triggers = array();
     $rule = new Tracker_Workflow_Trigger_TriggerRule(7, $target, $condition, $triggers);
     $collection = new Tracker_Workflow_Trigger_TriggerRuleCollection();
     $collection->push($rule);
     $tracker = mock('Tracker');
     $this->expectException('Tracker_Workflow_Trigger_Exception_TriggerInvalidTargetException');
     $rules_manager = mock('Tracker_Workflow_Trigger_RulesManager');
     stub($rules_manager)->getForTargetTracker($tracker)->returns($collection);
     $validator = new Tracker_Workflow_Trigger_TriggerValidator($rules_manager);
     $validator->validateJsonFormat($json, $tracker);
 }