/**
  * @param Workflow $workflow
  * @param TriggerForWorkflowForm $trigger
  * @param RedBeanModel $model
  * @param string $attribute
  * @return bool
  * @throws NotSupportedException
  */
 protected static function resolveIsTrueByEvaluationRules(Workflow $workflow, TriggerForWorkflowForm $trigger, RedBeanModel $model, $attribute)
 {
     assert('is_string($attribute)');
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     if ($trigger instanceof TimeTriggerForWorkflowForm) {
         return $triggerRules->evaluateTimeTriggerBeforeSave($model, $attribute, $workflow->doesTimeTriggerRequireChangeToProcess());
     } else {
         return $triggerRules->evaluateBeforeSave($model, $attribute);
     }
 }
 public function testCreateTriggerRulesByTrigger()
 {
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'string';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof TextTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'phone';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof TextTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'textArea';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof TextTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'url';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof TextTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'primaryEmail___emailAddress';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof TextTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'boolean';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof CheckBoxTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'dropDown';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof DropDownTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'radioDropDown';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof DropDownTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'multiDropDown';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof MultiSelectDropDownTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'tagCloud';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof MultiSelectDropDownTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'integer';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof IntegerTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'float';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof DecimalTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'currencyValue';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof CurrencyValueTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'likeContactState';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof ContactStateTriggerRules);
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $trigger->attributeIndexOrDerivedType = 'user';
     $triggerRules = TriggerRulesFactory::createTriggerRulesByTrigger($trigger);
     $this->assertTrue($triggerRules instanceof UserTriggerRules);
 }