public function setUp()
 {
     parent::setUp();
     $this->super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $savedWorkflows = SavedWorkflow::getAll();
     $this->savedWorkflow = $savedWorkflows[0];
     $models = WorkflowModelTestItem::getAll();
     $this->model = $models[0];
 }
예제 #2
0
 /**
  * @depends testSetAndGetModel
  */
 public function testGetActiveByModuleClassNameAndIsNewModel()
 {
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'WorkflowsTestModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_EXISTING;
     $savedWorkflow->type = 'some type';
     $savedWorkflow->order = 1;
     $savedWorkflow->serializedData = serialize(array('something'));
     $savedWorkflow->isActive = true;
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $this->assertEquals(2, count(SavedWorkflow::getAll()));
     $savedWorkflows = SavedWorkflow::getActiveByModuleClassNameAndIsNewModel('WorkflowsTestModule', true);
     $this->assertEquals(1, count($savedWorkflows));
     $savedWorkflowId = $savedWorkflows[0]->id;
     $savedWorkflows = SavedWorkflow::getActiveByModuleClassNameAndIsNewModel('WorkflowsTestModule', false);
     $this->assertEquals(1, count($savedWorkflows));
     $this->assertTrue($savedWorkflowId != $savedWorkflows[0]->id);
 }
 protected function clearNotificationsWorkflowsAndEmailMessages()
 {
     $notifications = Notification::getAll();
     foreach ($notifications as $notification) {
         $notification->delete();
     }
     $emailMessages = EmailMessage::getAll();
     foreach ($emailMessages as $emailMessage) {
         $emailMessage->delete();
     }
     $workflows = SavedWorkflow::getAll();
     foreach ($workflows as $workflow) {
         $workflow->delete();
     }
 }
 /**
  * @depends testMessageQueueController
  */
 public function testCopyingWorkflow()
 {
     $savedWorkflows = SavedWorkflow::getAll();
     $this->assertEquals(1, count($savedWorkflows));
     $this->setGetArray(array('type' => 'OnSave', 'id' => $savedWorkflows[0]->id));
     $data = array();
     $data['OnSaveWorkflowWizardForm'] = array('description' => 'someDescription', 'isActive' => '0', 'name' => 'someName', 'triggerOn' => Workflow::TRIGGER_ON_NEW, 'triggersStructure' => '1 AND 2', 'moduleClassName' => 'WorkflowsTestModule');
     $this->setPostArray($data);
     $this->runControllerWithExitExceptionAndGetContent('workflows/default/save');
     $savedWorkflows = SavedWorkflow::getAll();
     $this->assertEquals(1, count($savedWorkflows));
     //Now test copying
     $this->setGetArray(array('type' => 'OnSave', 'id' => $savedWorkflows[0]->id, 'isBeingCopied' => true));
     $this->runControllerWithExitExceptionAndGetContent('workflows/default/save');
     $savedWorkflows = SavedWorkflow::getAll();
     $this->assertEquals(2, count($savedWorkflows));
 }
예제 #5
0
 /**
  * @depends testResolveProcessDateTimeByWorkflowAndModelWithPseudoNullDateTime
  */
 public function testResolveOrder()
 {
     $this->assertCount(0, SavedWorkflow::getAll());
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'the name';
     $savedWorkflow->moduleClassName = 'AccountsModule';
     $savedWorkflow->serializedData = serialize(array('some data'));
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $this->assertNull($savedWorkflow->order);
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(1, $savedWorkflow->order);
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $savedWorkflowId1 = $savedWorkflow->id;
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'the name 2';
     $savedWorkflow->moduleClassName = 'AccountsModule';
     $savedWorkflow->serializedData = serialize(array('some data 2'));
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $this->assertNull($savedWorkflow->order);
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(2, $savedWorkflow->order);
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $savedWorkflowId2 = $savedWorkflow->id;
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'the name 3';
     $savedWorkflow->moduleClassName = 'AccountsModule';
     $savedWorkflow->serializedData = serialize(array('some data 2'));
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $this->assertNull($savedWorkflow->order);
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(3, $savedWorkflow->order);
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $savedWorkflowId3 = $savedWorkflow->id;
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'the name 4';
     $savedWorkflow->moduleClassName = 'ContactsModule';
     $savedWorkflow->serializedData = serialize(array('some data'));
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $this->assertNull($savedWorkflow->order);
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(1, $savedWorkflow->order);
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $savedWorkflowId4 = $savedWorkflow->id;
     $savedWorkflow = SavedWorkflow::getById($savedWorkflowId2);
     $this->assertEquals(2, $savedWorkflow->order);
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(2, $savedWorkflow->order);
     //Change the moduleClassName to opportunities, it should show 1
     $savedWorkflow->moduleClassName = 'OpportunitiesModule';
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(1, $savedWorkflow->order);
     //Delete the workflow. When creating a new AccountsWorkflow, it should show order 4 since the max
     //is still 3.
     $deleted = $savedWorkflow->delete();
     $this->assertTrue($deleted);
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'the name 5';
     $savedWorkflow->moduleClassName = 'AccountsModule';
     $savedWorkflow->serializedData = serialize(array('some data 2'));
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $this->assertNull($savedWorkflow->order);
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(4, $savedWorkflow->order);
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     //Try to resolve order for the same
     SavedWorkflowsUtil::resolveOrder($savedWorkflow);
     $this->assertEquals(4, $savedWorkflow->order);
     //Resolve order when copying.  It should increase
     SavedWorkflowsUtil::resolveOrder($savedWorkflow, true);
     $this->assertEquals(5, $savedWorkflow->order);
 }
 /**
  * Check if picklist modification caused some issues with workflow triggers and if yes notify users
  * @return array
  * @throws NotSupportedException
  */
 public static function getWorkflowsWithInvalidTriggerCustomFieldValue()
 {
     $savedWorkflows = SavedWorkflow::getAll();
     $workflows = array();
     foreach ($savedWorkflows as $savedWorkflow) {
         $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow);
         $hasInvalidCustomFieldValue = false;
         foreach ($workflow->getTriggers() as $trigger) {
             $modelClassName = $trigger->getModelClassName();
             $customFieldAttributeNames = CustomFieldUtil::getCustomFieldAttributeNames($modelClassName);
             $triggerAttributeName = $trigger->getAttribute();
             if (in_array($triggerAttributeName, $customFieldAttributeNames)) {
                 $customFieldData = CustomFieldDataModelUtil::getDataByModelClassNameAndAttributeName($modelClassName, $triggerAttributeName);
                 $allCustomFieldValues = unserialize($customFieldData->serializedData);
                 // Check with triggers that allow single value
                 if (in_array($trigger->getOperator(), array(OperatorRules::TYPE_EQUALS, OperatorRules::TYPE_DOES_NOT_EQUAL, OperatorRules::TYPE_BECOMES, OperatorRules::TYPE_WAS))) {
                     if (!in_array($trigger->value, $allCustomFieldValues)) {
                         $hasInvalidCustomFieldValue = true;
                         break;
                     }
                 } elseif (in_array($trigger->getOperator(), array(OperatorRules::TYPE_BECOMES_ONE_OF, OperatorRules::TYPE_WAS_ONE_OF, OperatorRules::TYPE_ONE_OF))) {
                     $triggerSelectedCustomFieldValues = MultiSelectDropDownSanitizerUtil::getCustomFieldValuesFromValueString($trigger->value);
                     foreach ($triggerSelectedCustomFieldValues as $triggerValue) {
                         if (!in_array($triggerValue, $allCustomFieldValues)) {
                             $hasInvalidCustomFieldValue = true;
                             break 2;
                         }
                     }
                 }
             }
         }
         if ($hasInvalidCustomFieldValue) {
             $workflows[] = $workflow;
         }
     }
     return $workflows;
 }
 /**
  * @depends testResolveWorkflowToSavedWorkflow
  */
 public function testMakeWorkflowBySavedWorkflow()
 {
     $savedWorkflows = SavedWorkflow::getAll();
     $this->assertEquals(1, count($savedWorkflows));
     $savedWorkflow = $savedWorkflows[0];
     $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow);
     $triggers = $workflow->getTriggers();
     $this->assertEquals('WorkflowsTestModule', $workflow->getModuleClassName());
     $this->assertEquals('myFirstWorkflow', $workflow->getName());
     $this->assertEquals('aDescription', $workflow->getDescription());
     $this->assertTrue($workflow->getIsActive());
     $this->assertEquals(5, $workflow->getOrder());
     $this->assertEquals(Workflow::TRIGGER_ON_NEW, $workflow->getTriggerOn());
     $this->assertEquals(Workflow::TYPE_ON_SAVE, $workflow->getType());
     $this->assertEquals('1 and 2 or 3 or 4', $workflow->getTriggersStructure());
     $this->assertCount(4, $triggers);
 }
 public static function getWorkflowsMissingRequiredActionAttributes()
 {
     $savedWorkflows = SavedWorkflow::getAll();
     $workflows = array();
     foreach ($savedWorkflows as $savedWorkflow) {
         $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow);
         $missingRequired = false;
         foreach ($workflow->getActions() as $action) {
             if ($action->isModelActionVariant() && !$action->isTypeAnUpdateVariant() && $action->isMissingRequiredActionAttributes()) {
                 $missingRequired = true;
                 break;
             }
         }
         if ($missingRequired) {
             $workflows[] = $workflow;
         }
     }
     return $workflows;
 }