public function testProcessAfterSaveWhenSendIsInFuture()
 {
     $this->assertEquals(0, WorkflowMessageInQueue::getCount());
     $workflow = new Workflow();
     $workflow->setId(self::$savedWorkflow->id);
     $workflow->type = Workflow::TYPE_ON_SAVE;
     $emailMessageForm = new EmailMessageForWorkflowForm('WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $emailMessageForm->sendAfterDurationInterval = 1;
     $emailMessageForm->sendAfterDurationType = TimeDurationUtil::DURATION_TYPE_DAY;
     $recipients = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL_USER, 'audienceType' => EmailMessageRecipient::TYPE_TO, 'dynamicUserType' => DynamicTriggeredModelUserWorkflowEmailMessageRecipientForm::DYNAMIC_USER_TYPE_CREATED_BY_USER));
     $emailMessageForm->setAttributes(array(EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS => $recipients));
     $workflow->addEmailMessage($emailMessageForm);
     $model = new WorkflowModelTestItem();
     $model->lastName = 'lastName';
     $model->string = 'string';
     $this->assertTrue($model->save());
     $compareDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + 86400);
     WorkflowEmailMessagesUtil::processAfterSave($workflow, $model, Yii::app()->user->userModel);
     $workflowMessageInQueues = WorkflowMessageInQueue::getAll();
     $this->assertEquals(1, count($workflowMessageInQueues));
     $this->assertTrue($workflowMessageInQueues[0]->savedWorkflow->isSame(self::$savedWorkflow));
     $this->assertTrue($workflowMessageInQueues[0]->triggeredByUser->isSame(Yii::app()->user->userModel));
     $this->assertEquals($model->getClassId('Item'), $workflowMessageInQueues[0]->modelItem->getClassId('Item'));
     $this->assertEquals('WorkflowModelTestItem', $workflowMessageInQueues[0]->modelClassName);
     $this->assertEquals($compareDateTime, $workflowMessageInQueues[0]->processDateTime);
     $emailMessageData = SavedWorkflowToWorkflowAdapter::makeArrayFromEmailMessageForWorkflowFormAttributesData(array($emailMessageForm));
     $this->assertEquals(serialize($emailMessageData), $workflowMessageInQueues[0]->serializedData);
     $this->assertTrue($workflowMessageInQueues[0]->delete());
 }
 /**
  * @depends testSetAndGet
  */
 public function testGetModelsToProcess($pageSize)
 {
     $this->assertEquals(1, WorkflowMessageInQueue::getCount());
     $models = WorkflowMessageInQueue::getModelsToProcess(10);
     $this->assertEquals(1, count($models));
     //Now have one that is not ready for processing. It should still only get 1
     $model = new WorkflowModelTestItem();
     $model->lastName = 'Green2';
     $model->string = 'string2';
     $saved = $model->save();
     $this->assertTrue($saved);
     $savedWorkflows = SavedWorkflow::getByName('some workflow');
     $workflowMessageInQueue = new WorkflowMessageInQueue();
     $workflowMessageInQueue->modelClassName = get_class($model);
     $workflowMessageInQueue->modelItem = $model;
     $workflowMessageInQueue->processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + 86400);
     $workflowMessageInQueue->savedWorkflow = $savedWorkflows[0];
     $workflowMessageInQueue->serializedData = serialize(array('something'));
     $saved = $workflowMessageInQueue->save();
     $this->assertTrue($saved);
     $models = WorkflowMessageInQueue::getModelsToProcess(10);
     $this->assertEquals(1, count($models));
 }
 /**
  * @depends testRun
  */
 public function testRunAgainstWorkflowThatWasDeleted()
 {
     $model = WorkflowTestHelper::createWorkflowModelTestItem('Green', '514');
     $timeTrigger = array('attributeIndexOrDerivedType' => 'string', 'operator' => OperatorRules::TYPE_EQUALS, 'value' => '514', 'durationInterval' => '333');
     $actions = array(array('type' => ActionForWorkflowForm::TYPE_UPDATE_SELF, ActionForWorkflowForm::ACTION_ATTRIBUTES => array('string' => array('shouldSetValue' => '1', 'type' => WorkflowActionAttributeForm::TYPE_STATIC, 'value' => 'jason'))));
     $savedWorkflow = WorkflowTestHelper::createByTimeSavedWorkflow($timeTrigger, array(), $actions);
     WorkflowTestHelper::createExpiredWorkflowMessageInQueue($model, $savedWorkflow);
     //Now delete the old workflow
     $deleted = $savedWorkflow->delete();
     $this->assertTrue($deleted);
     $this->assertEquals(1, WorkflowMessageInQueue::getCount());
     $job = new WorkflowMessageInQueueJob();
     $this->assertTrue($job->run());
     $this->assertEquals(0, WorkflowMessageInQueue::getCount());
     $model->forget();
 }