コード例 #1
0
 public static function createByTimeSavedWorkflow(array $timeTrigger = array(), array $triggers = array(), array $actions = array(), array $messages = array())
 {
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'WorkflowsTestModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_BY_TIME;
     $data[ComponentForWorkflowForm::TYPE_TIME_TRIGGER] = $timeTrigger;
     $data[ComponentForWorkflowForm::TYPE_TRIGGERS] = $triggers;
     $data[ComponentForWorkflowForm::TYPE_ACTIONS] = $actions;
     $data[ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES] = $messages;
     $savedWorkflow->serializedData = serialize($data);
     $savedWorkflow->isActive = true;
     $saved = $savedWorkflow->save();
     assert($saved);
     // Not Coding Standard
     return $savedWorkflow;
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     //Setup test data owned by the super user.
     $account = AccountTestHelper::createAccountByNameForOwner('superAccount', $super);
     AccountTestHelper::createAccountByNameForOwner('superAccount2', $super);
     ContactTestHelper::createContactWithAccountByNameForOwner('superContact', $super, $account);
     WorkflowTestHelper::createWorkflowModelTestItem('Jason', 'Green');
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'WorkflowsTestModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_BY_TIME;
     $savedWorkflow->serializedData = serialize(array(ComponentForWorkflowForm::TYPE_TRIGGERS => array(), ComponentForWorkflowForm::TYPE_ACTIONS => array(), ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES => array()));
     $savedWorkflow->save();
 }
コード例 #3
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, SavedWorkflow::getCount());
     $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);
 }
コード例 #4
0
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     ContactsModule::loadStartingData();
     $super = User::getByUsername('super');
     $super->primaryEmail = new Email();
     $super->primaryEmail->emailAddress = '*****@*****.**';
     assert($super->save());
     // Not Coding Standard
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'moduleClassName';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = 'some type';
     $savedWorkflow->serializedData = serialize(array('something'));
     $saved = $savedWorkflow->save();
     assert($saved);
     // Not Coding Standard
     self::$savedWorkflow = $savedWorkflow;
 }
コード例 #5
0
 public function testSetAndGet()
 {
     $model = new WorkflowModelTestItem();
     $model->lastName = 'Green';
     $model->string = 'string';
     $saved = $model->save();
     $this->assertTrue($saved);
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'moduleClassName';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = 'some type';
     $savedWorkflow->serializedData = serialize(array('something'));
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $workflowMessageInQueue = new WorkflowMessageInQueue();
     $workflowMessageInQueue->modelClassName = get_class($model);
     $workflowMessageInQueue->modelItem = $model;
     $workflowMessageInQueue->processDateTime = '2007-02-02 00:00:00';
     $workflowMessageInQueue->savedWorkflow = $savedWorkflow;
     $workflowMessageInQueue->triggeredByUser = Yii::app()->user->userModel;
     $workflowMessageInQueue->serializedData = serialize(array('something'));
     $this->assertCount(0, Yii::app()->jobQueue->getAll());
     $saved = $workflowMessageInQueue->save();
     $this->assertTrue($saved);
     $jobs = Yii::app()->jobQueue->getAll();
     $this->assertCount(1, $jobs);
     $id = $workflowMessageInQueue->id;
     $workflowMessageInQueue->forget();
     //Retrieve and compare
     $workflowMessageInQueue = WorkflowMessageInQueue::getById($id);
     $this->assertEquals('WorkflowModelTestItem', $workflowMessageInQueue->modelClassName);
     $this->assertTrue($workflowMessageInQueue->modelItem->isSame($model));
     $this->assertEquals('2007-02-02 00:00:00', $workflowMessageInQueue->processDateTime);
     $this->assertTrue($workflowMessageInQueue->savedWorkflow->isSame($savedWorkflow));
     $this->assertTrue($workflowMessageInQueue->triggeredByUser->isSame(Yii::app()->user->userModel));
     $this->assertEquals(serialize(array('something')), $workflowMessageInQueue->serializedData);
 }
コード例 #6
0
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'moduleClassName';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = 'some type';
     $savedWorkflow->serializedData = serialize(array('something'));
     $saved = $savedWorkflow->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     self::$savedWorkflow = $savedWorkflow;
     $model = new WorkflowModelTestItem();
     $model->lastName = 'Green';
     $model->string = 'string';
     $saved = $model->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     self::$testModel = $model;
 }
コード例 #7
0
 /**
  * Special method to load ByTimeWorkflowInQueue models
  */
 public function actionLoadWorkflowMessageInQueue()
 {
     if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) {
         throw new NotSupportedException();
     }
     $model = new Account();
     $model->name = 'test account';
     $saved = $model->save();
     if (!$saved) {
         throw new NotSupportedException();
     }
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'Test for demo Message Queue model';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'AccountsModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_BY_TIME;
     $savedWorkflow->isActive = false;
     $savedWorkflow->order = 1;
     $savedWorkflow->serializedData = serialize(array(ComponentForWorkflowForm::TYPE_TRIGGERS => array(), ComponentForWorkflowForm::TYPE_ACTIONS => array(), ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES => array()));
     $saved = $savedWorkflow->save();
     if (!$saved) {
         throw new NotSupportedException();
     }
     for ($i = 1; $i < 6; $i++) {
         $workflowMessageInQueue = new WorkflowMessageInQueue();
         $workflowMessageInQueue->processDateTime = '2014-03-0' . $i . ' 00:00:00';
         $workflowMessageInQueue->savedWorkflow = $savedWorkflow;
         $workflowMessageInQueue->modelClassName = get_class($model);
         $workflowMessageInQueue->modelItem = $model;
         $workflowMessageInQueue->serializedData = serialize(array());
         $workflowMessageInQueue->triggeredByUser = Yii::app()->user->userModel;
         $saved = $workflowMessageInQueue->save();
         if (!$saved) {
             throw new NotSupportedException();
         }
     }
 }
コード例 #8
0
 /**
  * @depends testEditAction
  */
 public function testManageOrder()
 {
     //Create a second workflow
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow2';
     $savedWorkflow->description = 'description2';
     $savedWorkflow->moduleClassName = 'WorkflowsTestModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $savedWorkflow->serializedData = serialize(array(ComponentForWorkflowForm::TYPE_TRIGGERS => array(), ComponentForWorkflowForm::TYPE_ACTIONS => array(), ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES => array()));
     $savedWorkflow->isActive = true;
     $savedWorkflow->order = 2;
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     //Go to manage order
     $this->resetGetArray();
     $this->resetPostArray();
     $this->runControllerWithNoExceptionsAndGetContent('workflows/default/manageOrder');
     //loadOrderByModule - where none exist
     $this->setGetArray(array('moduleClassName' => 'OpportunitiesModule'));
     $content = $this->runControllerWithExitExceptionAndGetContent('workflows/default/loadOrderByModule');
     $this->assertEquals('{"dataToOrder":"false"}', $content);
     //load orderByModule - where at least one exists
     $this->setGetArray(array('moduleClassName' => 'WorkflowsTestModule'));
     $content = $this->runControllerWithNoExceptionsAndGetContent('workflows/default/loadOrderByModule');
     $this->assertNotEquals('{"dataToOrder":"false"}', $content);
     //saveOrder, switching order
     $savedWorkflows = SavedWorkflow::getAll('order');
     $this->assertEquals(2, count($savedWorkflows));
     $firstOrder = $savedWorkflows[0]->order;
     $secondOrder = $savedWorkflows[1]->order;
     $this->resetGetArray();
     $this->setPostArray(array('SavedWorkflow' => array('moduleClassName' => 'WorkflowsTestModule', 'savedWorkflowIds' => array($savedWorkflows[1]->id, $savedWorkflows[0]->id))));
     $content = $this->runControllerWithExitExceptionAndGetContent('workflows/default/saveOrder');
     $this->assertEquals('{"message":"Order saved successfully.","type":"message"}', $content);
     // Not Coding Standard
     $this->assertEquals($firstOrder, SavedWorkflow::getById($savedWorkflows[1]->id)->order);
     $this->assertEquals($secondOrder, SavedWorkflow::getById($savedWorkflows[0]->id)->order);
 }
コード例 #9
0
 /**
  * @depends testSetAndGet
  */
 public function testResolveByWorkflowIdAndModel()
 {
     $model2 = new WorkflowModelTestItem();
     $model2->lastName = 'Engel';
     $model2->string = 'string';
     $saved = $model2->save();
     $this->assertTrue($saved);
     $savedWorkflows = SavedWorkflow::getByName('some workflow');
     $models = WorkflowModelTestItem::getByLastName('Green');
     //Test when there should be an existing model.
     $byTimeWorkflowInQueue = ByTimeWorkflowInQueue::resolveByWorkflowIdAndModel($savedWorkflows[0], $models[0]);
     $this->assertTrue($byTimeWorkflowInQueue->id > 0);
     $savedWorkflow2 = new SavedWorkflow();
     $savedWorkflow2->name = 'some workflow2';
     $savedWorkflow2->description = 'description';
     $savedWorkflow2->moduleClassName = 'moduleClassName';
     $savedWorkflow2->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow2->type = 'some type';
     $savedWorkflow2->serializedData = serialize(array('something'));
     $saved = $savedWorkflow2->save();
     $this->assertTrue($saved);
     //Test when there should not be an existing ByTimeWorkflowInQueue because there is no existing
     //workflow attached to the model
     $byTimeWorkflowInQueue = ByTimeWorkflowInQueue::resolveByWorkflowIdAndModel($savedWorkflow2, $models[0]);
     $this->assertFalse($byTimeWorkflowInQueue->id > 0);
     //Test where we use an existing savedWorkflow but the model is not on it.
     $byTimeWorkflowInQueue = ByTimeWorkflowInQueue::resolveByWorkflowIdAndModel($savedWorkflows[0], $model2);
     $this->assertFalse($byTimeWorkflowInQueue->id > 0);
 }
コード例 #10
0
 /**
  * Test sending an email that should go out as a processing that this job would typically do.
  * Also tests that item does not get trashed when deleting the WorkflowMessageInQueue.
  * Also tests that if there is more than one emailmessage against the workflow, that it does not send
  * to all of them
  * @depends testWorkflowMessageInQueueProperlySavesWithoutTrashingRelatedModelItem
  */
 public function testRun()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $emailTemplate = new EmailTemplate();
     $emailTemplate->builtType = EmailTemplate::BUILT_TYPE_PASTED_HTML;
     $emailTemplate->name = 'the name';
     $emailTemplate->modelClassName = 'Account';
     $emailTemplate->type = 2;
     $emailTemplate->subject = 'subject';
     $emailTemplate->textContent = 'sample text content';
     $saved = $emailTemplate->save();
     $this->assertTrue($saved);
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $model = ContactTestHelper::createContactByNameForOwner('Jason', Yii::app()->user->userModel);
     $model->primaryEmail->emailAddress = '*****@*****.**';
     $saved = $model->save();
     $this->assertTrue($saved);
     $modelId = $model->id;
     $model->forget();
     $model = Contact::getById($modelId);
     $trigger = array('attributeIndexOrDerivedType' => 'firstName', 'operator' => OperatorRules::TYPE_EQUALS, 'durationInterval' => '333');
     $actions = array(array('type' => ActionForWorkflowForm::TYPE_UPDATE_SELF, ActionForWorkflowForm::ACTION_ATTRIBUTES => array('description' => array('shouldSetValue' => '1', 'type' => WorkflowActionAttributeForm::TYPE_STATIC, 'value' => 'some new description'))));
     $emailMessages = array();
     $emailMessages[0]['emailTemplateId'] = $emailTemplate->id;
     $emailMessages[0]['sendFromType'] = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT;
     $emailMessages[0]['sendAfterDurationSeconds'] = '0';
     $emailMessages[0][EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS] = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL, 'audienceType' => EmailMessageRecipient::TYPE_TO));
     $emailMessages[1]['emailTemplateId'] = $emailTemplate->id;
     $emailMessages[1]['sendFromType'] = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT;
     $emailMessages[1]['sendAfterDurationSeconds'] = '10000';
     $emailMessages[1][EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS] = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL, 'audienceType' => EmailMessageRecipient::TYPE_TO));
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'ContactsModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW_AND_EXISTING;
     $savedWorkflow->type = Workflow::TYPE_ON_SAVE;
     $data[ComponentForWorkflowForm::TYPE_TRIGGERS] = array($trigger);
     $data[ComponentForWorkflowForm::TYPE_ACTIONS] = $actions;
     $data[ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES] = $emailMessages;
     $savedWorkflow->serializedData = serialize($data);
     $savedWorkflow->isActive = true;
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     WorkflowTestHelper::createExpiredWorkflowMessageInQueue($model, $savedWorkflow, serialize(array($emailMessages[1])));
     RedBeanModelsCache::forgetAll(true);
     //simulates page change, required to confirm Item does not get trashed
     $this->assertEquals(1, WorkflowMessageInQueue::getCount());
     $job = new WorkflowMessageInQueueJob();
     $this->assertTrue($job->run());
     $this->assertEquals(0, WorkflowMessageInQueue::getCount());
     RedBeanModelsCache::forgetAll(true);
     //simulates page change, required to confirm Item does not get trashed
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
 }
コード例 #11
0
 public function testMakeEmailMessageForWorkflowFormByQueueModelAndWorkflow()
 {
     $model = ContactTestHelper::createContactByNameForOwner('Jason', Yii::app()->user->userModel);
     $savedWorkflow = new SavedWorkflow();
     $savedWorkflow->name = 'some workflow';
     $savedWorkflow->description = 'description';
     $savedWorkflow->moduleClassName = 'WorkflowsTestModule';
     $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW;
     $savedWorkflow->type = 'some type';
     $savedWorkflow->order = 1;
     $savedWorkflow->serializedData = serialize(array('something'));
     $savedWorkflow->isActive = true;
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $emailMessage = null;
     $emailMessage['emailTemplateId'] = 5;
     $emailMessage['sendFromType'] = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT;
     $emailMessage['sendAfterDurationType'] = TimeDurationUtil::DURATION_TYPE_DAY;
     $emailMessage['sendAfterDurationInterval'] = '44';
     $emailMessage[EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS] = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL, 'audienceType' => EmailMessageRecipient::TYPE_TO));
     $workflowMessageInQueue = WorkflowTestHelper::createExpiredWorkflowMessageInQueue($model, $savedWorkflow, serialize(array($emailMessage)));
     $workflow = new Workflow();
     $workflow->setModuleClassName('WorkflowsTestModule');
     $workflow->setType(Workflow::TYPE_ON_SAVE);
     $emailMessageForWorkflowForm = WorkflowEmailMessagesUtil::makeEmailMessageForWorkflowFormByQueueModelAndWorkflow($workflowMessageInQueue, $workflow);
     $this->assertEquals(5, $emailMessageForWorkflowForm->emailTemplateId);
     $this->assertEquals(EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT, $emailMessageForWorkflowForm->sendFromType);
     $this->assertEquals(TimeDurationUtil::DURATION_TYPE_DAY, $emailMessageForWorkflowForm->sendAfterDurationType);
     $this->assertEquals(44, $emailMessageForWorkflowForm->sendAfterDurationInterval);
     $this->assertEquals(1, count($emailMessageForWorkflowForm->getEmailMessageRecipients()));
 }