/** * 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); }
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); }