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