示例#1
0
 /**
  * Method for testing creating a simple notification for the current user.
  */
 public function actionGenerateManageSubscriptionHash()
 {
     if (Yii::app()->user->userModel->username != 'super') {
         throw new NotSupportedException();
     }
     $contact = RandomDataUtil::getRandomValueFromArray(Contact::getAll());
     $personId = $contact->getClassId('Person');
     $marketingList = RandomDataUtil::getRandomValueFromArray(MarketingList::getAll());
     $marketingListId = $marketingList->id;
     $model = RandomDataUtil::getRandomValueFromArray(CampaignItem::getAll());
     $modelId = $model->id;
     $modelType = get_class($model);
     $hash = EmailMessageActivityUtil::resolveHashForUnsubscribeAndManageSubscriptionsUrls($personId, $marketingListId, $modelId, $modelType, false);
     echo 'index.php/marketingLists/external/manageSubscriptions?hash=' . $hash;
 }
 /**
  * Method for testing creating a simple notification for the current user.
  */
 public function actionGenerateManageSubscriptionHash()
 {
     if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) {
         throw new NotSupportedException();
     }
     $contact = RandomDataUtil::getRandomValueFromArray(Contact::getAll());
     $personId = $contact->getClassId('Person');
     $marketingList = RandomDataUtil::getRandomValueFromArray(MarketingList::getAll());
     $marketingListId = $marketingList->id;
     $model = RandomDataUtil::getRandomValueFromArray(CampaignItem::getAll());
     $modelId = $model->id;
     $modelType = get_class($model);
     $hash = GlobalMarketingFooterUtil::resolveHash($personId, $marketingListId, $modelId, $modelType, false);
     echo 'index.php/marketingLists/external/manageSubscriptions?hash=' . $hash;
 }
 public function testRunWithCampaignPausedAfterAllItemsGeneratedAndThenUnpaused()
 {
     // Cleanup
     Campaign::deleteAll();
     $this->assertEquals(0, Campaign::getCount());
     $this->assertEquals(0, CampaignItem::getCount());
     $this->assertEquals(0, CampaignItemActivity::getCount());
     MarketingList::deleteAll();
     $this->assertEquals(0, MarketingList::getCount());
     $this->assertEquals(0, MarketingListMember::getCount());
     EmailMessage::deleteAll();
     $this->assertEquals(0, EmailMessage::getCount());
     $this->assertEquals(0, EmailMessageContent::getCount());
     $this->assertEquals(0, EmailMessageSender::getCount());
     $this->assertEquals(0, EmailMessageRecipient::getCount());
     Contact::deleteAll();
     $this->assertEquals(0, Contact::getCount());
     // setup an email address for contacts
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     // create a marketing list with 5 members
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 05');
     $marketingListId = $marketingList->id;
     for ($i = 1; $i <= 5; $i++) {
         $contact = ContactTestHelper::createContactByNameForOwner('campaignContact 0' . $i, $this->user);
         $contact->primaryEmail = $email;
         $this->assertTrue($contact->save());
         MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
     }
     $marketingList->forgetAll();
     // create a due campaign with that marketing list
     $campaign = CampaignTestHelper::createCampaign('campaign 04', 'subject', 'text Content', 'Html Content', null, null, null, null, null, null, MarketingList::getById($marketingListId));
     $campaignId = $campaign->id;
     /*
      * Run 1:
      * CampaignGenerateDueCampaignItemsJob
      * status == processing
      * items generated but unprocessed
      *
      * CampaignQueueMessagesInOutboxJob
      * status == processing
      * items processed with email messages generated and queued
      *
      * ProcessOutboundEmailJob
      * status == processing
      * email items attempted to be sent
      *
      * Run 2:
      * Pause the campaign
      * items are processed and still present
      *
      * Unpause the campaign
      * status == active
      * items are processed and still present
      *
      * CampaignGenerateDueCampaignItemsJob
      * status == processing
      * ensure all items are present and processed
      *
      * CampaignQueueMessagesInOutboxJob
      * status == processing
      * ensure all items are present and processed
      * ensure all email messages are present with correct folder type
      *
      * ProcessOutboundEmailJob
      * ensure all email messages are present with correct folder type
      * status == processing
      *
      *
      * Run 3:
      * Mark Campaign as Completed
      * status == completed
      */
     // we have to do this to ensure when we retrieve the data status is updated from db.
     $campaign->forgetAll();
     $this->assertEmpty(CampaignItem::getAll());
     // Run 1 starts here
     // Run CampaignGenerateDueCampaignItemsJob
     $job = new CampaignGenerateDueCampaignItemsJob();
     $this->assertTrue($job->run());
     $campaign = Campaign::getById($campaignId);
     // ensure status is processing
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     // ensure 5 campaign items have been generated
     $this->assertEquals(5, CampaignItem::getCount());
     // ensure all 5 campaign items are unprocessed
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     // Run CampaignQueueMessagesInOutboxJob
     $job = new CampaignQueueMessagesInOutboxJob();
     $this->assertTrue($job->run());
     // Ensure campaign status
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     // ensure all 5 campaign items are processed
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     // Ensure 5 new email messages
     $this->assertEquals(5, EmailMessage::getCount());
     $this->assertEquals(5, EmailHelper::getQueuedCount());
     // Run ProcessOutboundEmail
     $job = new ProcessOutboundEmailJob();
     $this->assertTrue($job->run());
     // Ensure all email were sent
     $this->assertEquals(5, EmailMessage::getCount());
     $this->assertEquals(0, EmailHelper::getQueuedCount());
     foreach (EmailMessage::getAll() as $emailMessage) {
         $this->assertEquals($emailMessage->folder->type, EmailFolder::TYPE_SENT);
     }
     // Ensure campaign status
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     // end of Run 1
     // Run 2 starts here
     // Pause the campaign
     $campaign->status = Campaign::STATUS_PAUSED;
     $this->assertTrue($campaign->save());
     // ensure campaign items are still there
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertCount(5, $campaignItems);
     $this->assertNotEmpty($campaignItems);
     // Unpause campaign
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PAUSED, $campaign->status);
     $campaign->status = Campaign::STATUS_ACTIVE;
     $this->assertTrue($campaign->save());
     // ensure campaign items are still there
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertCount(5, $campaignItems);
     $this->assertNotEmpty($campaignItems);
     // Ensure status change
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_ACTIVE, $campaign->status);
     // Run CampaignGenerateDueCampaignItemsJob
     $job = new CampaignGenerateDueCampaignItemsJob();
     $this->assertTrue($job->run());
     // Ensure campaign status change
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     // ensure all 5 (previously created in run1) campaign items are still processed
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     // Run CampaignQueueMessagesInOutboxJob
     $job = new CampaignQueueMessagesInOutboxJob();
     $this->assertTrue($job->run());
     // Ensure campaign status
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     // ensure all 5 (previously created in run1) campaign items are still processed
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     // Ensure all 5 (previously created and sent in run1) emails are sent.
     $this->assertEquals(5, EmailMessage::getCount());
     foreach (EmailMessage::getAll() as $emailMessage) {
         $this->assertEquals($emailMessage->folder->type, EmailFolder::TYPE_SENT);
     }
     // Run ProcessOutboundEmail
     $job = new ProcessOutboundEmailJob();
     $this->assertTrue($job->run());
     // Ensure all 5 (previously created and sent in run1) emails are sent.
     $this->assertEquals(5, EmailMessage::getCount());
     foreach (EmailMessage::getAll() as $emailMessage) {
         $this->assertEquals($emailMessage->folder->type, EmailFolder::TYPE_SENT);
     }
     // Ensure campaign status
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     // end of Run 2
     // Run 3 starts here
     // Run CampaignMarkCompleted
     $job = new CampaignMarkCompletedJob();
     $this->assertTrue($job->run());
     // Ensure campaign status change
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_COMPLETED, $campaign->status);
     // end of Run 3
 }
 /**
  * @depends testRunWithDueActiveCampaignsWithNonMembers
  */
 public function testRunWithDueActiveCampaignsWithMembers()
 {
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 04');
     $marketingListId = $marketingList->id;
     $contact1 = ContactTestHelper::createContactByNameForOwner('campaignContact 01', $this->user);
     $contact2 = ContactTestHelper::createContactByNameForOwner('campaignContact 02', $this->user);
     $contact3 = ContactTestHelper::createContactByNameForOwner('campaignContact 03', $this->user);
     $contact4 = ContactTestHelper::createContactByNameForOwner('campaignContact 04', $this->user);
     $contact5 = ContactTestHelper::createContactByNameForOwner('campaignContact 05', $this->user);
     $processed = 0;
     MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact1);
     MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact2);
     MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact3);
     MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact4);
     MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact5);
     $marketingList->forgetAll();
     $marketingList = MarketingList::getById($marketingListId);
     CampaignTestHelper::createCampaign('Active, Due With Members', 'subject', 'text Content', 'Html Content', null, null, null, Campaign::STATUS_ACTIVE, null, null, $marketingList);
     $this->assertEmpty(CampaignItem::getAll());
     $job = new CampaignGenerateDueCampaignItemsJob();
     $this->assertTrue($job->run());
     $campaign = Campaign::getByName('Active, Due With Members');
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign[0]->status);
     $allCampaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($allCampaignItems);
     $this->assertCount(5, $allCampaignItems);
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaign[0]->id);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
 }
 /**
  * @depends testSendQueued
  */
 public function testSendQueuedSkipsPausedCampaignMessages()
 {
     EmailMessage::deleteAll();
     $job = new CampaignQueueMessagesInOutboxJob();
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact = ContactTestHelper::createContactByNameForOwner('contact', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList');
     MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
     $campaign = CampaignTestHelper::createCampaign('campaign', 'subject', 'text Content', 'Html Content', null, null, null, Campaign::STATUS_PROCESSING, null, 0, $marketingList);
     $processed = 0;
     CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
     $this->assertTrue($job->run());
     $campaignItems = CampaignItem::getAll();
     $this->assertCount(1, $campaignItems);
     $campaignItemsProcessed = CampaignItem::getByProcessedAndCampaignId(1, $campaign->id);
     $this->assertCount(1, $campaignItemsProcessed);
     $campaign->status = Campaign::STATUS_PAUSED;
     $this->assertTrue($campaign->save());
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     Yii::app()->emailHelper->sendQueued();
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
 }
 /**
  * @depends testCreateAndGetCampaignItemById
  */
 public function testDeleteCampaignItem()
 {
     $campaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(10, $campaignItems);
     $campaignItemActivity = new CampaignItemActivity();
     $campaignItemActivity->type = CampaignItemActivity::TYPE_CLICK;
     $campaignItemActivity->quantity = 1;
     $campaignItemActivity->campaignItem = $campaignItems[0];
     $campaignItemActivity->latestSourceIP = '121.212.122.112';
     $this->assertTrue($campaignItemActivity->save());
     $campaignItems[0]->emailMessage = $this->resolveEmailMessage();
     $this->assertTrue($campaignItems[0]->unrestrictedSave());
     $this->assertEquals(1, EmailMessage::getCount());
     $this->assertEquals(1, EmailMessageContent::getCount());
     $this->assertEquals(1, EmailMessageSender::getCount());
     $this->assertEquals(1, EmailMessageRecipient::getCount());
     $campaignItemActivities = CampaignItemActivity::getAll();
     $this->assertCount(1, $campaignItemActivities);
     $campaignItems[0]->delete();
     $campaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(9, $campaignItems);
     $campaignItemActivities = CampaignItemActivity::getAll();
     $this->assertCount(0, $campaignItemActivities);
     $this->assertEquals(0, EmailMessage::getCount());
     $this->assertEquals(0, EmailMessageContent::getCount());
     $this->assertEquals(0, EmailMessageSender::getCount());
     $this->assertEquals(0, EmailMessageRecipient::getCount());
 }
 /**
  * @depends testRunWithInvalidMergeTags
  */
 public function testRunWithValidMergeTags()
 {
     $job = new CampaignQueueMessagesInOutboxJob();
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact = ContactTestHelper::createContactByNameForOwner('contact 05', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 06', 'description goes here', 'fromName', '*****@*****.**');
     $campaign = CampaignTestHelper::createCampaign('campaign 06', 'subject', '[[FIRST^NAME]]', '[[LAST^NAME]]', null, null, null, Campaign::STATUS_PROCESSING, null, null, $marketingList);
     $processed = 0;
     CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
     $this->assertTrue($job->run());
     $campaignItems = CampaignItem::getAll();
     $this->assertCount(5, $campaignItems);
     $campaignItemsProcessed = CampaignItem::getByProcessedAndCampaignId(1, $campaign->id);
     $this->assertCount(1, $campaignItemsProcessed);
 }
示例#8
0
 /**
  * @depends testRequiredAttributes
  */
 public function testDeleteCampaign()
 {
     $campaigns = Campaign::getAll();
     $this->assertEquals(4, count($campaigns));
     CampaignItemTestHelper::createCampaignItem(0, $campaigns[0]);
     $campaignItems = CampaignItem::getAll();
     $this->assertCount(1, $campaignItems);
     $campaignItemActivity = new CampaignItemActivity();
     $campaignItemActivity->type = CampaignItemActivity::TYPE_CLICK;
     $campaignItemActivity->quantity = 1;
     $campaignItemActivity->campaignItem = $campaignItems[0];
     $campaignItemActivity->latestSourceIP = '121.212.122.112';
     $this->assertTrue($campaignItemActivity->save());
     $emailMessage = EmailMessageTestHelper::createOutboxEmail(Yii::app()->user->userModel, 'subject', 'html', 'text', 'from', '*****@*****.**', 'to', '*****@*****.**');
     $campaignItems[0]->emailMessage = $emailMessage;
     $this->assertTrue($campaignItems[0]->unrestrictedSave());
     $this->assertEquals(1, CampaignItemActivity::getCount());
     $this->assertEquals(1, EmailMessage::getCount());
     $campaigns[0]->delete();
     $this->assertEquals(3, Campaign::getCount());
     $this->assertEquals(0, CampaignItem::getCount());
     $this->assertEquals(0, CampaignItemActivity::getCount());
     $this->assertEquals(1, EmailMessage::getCount());
 }
 /**
  * @depends testCreateNewActivity
  */
 public function testGetByTypeAndModelIdAndPersonIdAndUrl()
 {
     $type = CampaignItemActivity::TYPE_OPEN;
     $url = null;
     $persons = Person::getAll();
     $this->assertNotEmpty($persons);
     $person = $persons[0];
     $campaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($campaignItems);
     $campaignItem = $campaignItems[0];
     $activities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl($type, $campaignItem->id, $person->id, $url);
     $this->assertNotEmpty($activities);
     $this->assertCount(1, $activities);
     $activity = $activities[0];
     $this->assertEquals($type, $activity->type);
     $this->assertEquals(1, $activity->quantity);
     $this->assertEquals($person, $activity->person);
     $this->assertEquals($campaignItem, $activity->campaignItem);
     // now try same thing but with a url this time.
     $contact = Contact::getByName('contact 02 contact 02son');
     $personId = $contact[0]->getClassId('Person');
     $person = Person::getById($personId);
     $type = CampaignItemActivity::TYPE_CLICK;
     $url = 'http://www.zurmo.com';
     $activities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl($type, $campaignItem->id, $personId, $url);
     $this->assertNotEmpty($activities);
     $this->assertCount(1, $activities);
     $activity = $activities[0];
     $this->assertEquals($type, $activity->type);
     $this->assertEquals(1, $activity->quantity);
     $this->assertEquals($person, $activity->person);
     $this->assertEquals($campaignItem, $activity->campaignItem);
 }
示例#10
0
 protected function deleteAllCampaignItems()
 {
     $campaignItems = CampaignItem::getAll();
     foreach ($campaignItems as $campaignItem) {
         $campaignItem->delete();
     }
 }
 /**
  * @depends testRunWithDueActiveCampaignsWithMembers
  */
 public function testRunWithJustDueActiveCampaignsWithMembers()
 {
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 05');
     $marketingListId = $marketingList->id;
     $processed = 0;
     for ($i = 6; $i <= 10; $i++) {
         $contact = ContactTestHelper::createContactByNameForOwner('campaignContact 0' . $i, $this->user);
         MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact);
     }
     $marketingList->forgetAll();
     $marketingList = MarketingList::getById($marketingListId);
     $nowDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $campaign = CampaignTestHelper::createCampaign('Active, Just Due With Members', 'subject', 'text Content', 'Html Content', null, null, null, Campaign::STATUS_ACTIVE, $nowDateTime, null, $marketingList);
     // we have to do this to ensure when we retrieve the data status is updated from db.
     $campaign->forgetAll();
     $this->assertEmpty(CampaignItem::getAll());
     // sleep 1 second to ensure we are giving ample time difference between creating the campaign and calling the job
     sleep(1);
     $job = new CampaignGenerateDueCampaignItemsJob();
     $this->assertTrue($job->run());
     $campaign = Campaign::getByName('Active, just Due With Members');
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign[0]->status);
     $allCampaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($allCampaignItems);
     $this->assertCount(5, $allCampaignItems);
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaign[0]->id);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
 }
 /**
  * @depends testCreateAndGetCampaignItemById
  */
 public function testDeleteCampaignItem()
 {
     $campaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(10, $campaignItems);
     $campaignItems[0]->delete();
     $campaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(9, $campaignItems);
 }
 /**
  * @depends testRunWithJustDueActiveCampaignsWithMembers
  */
 public function testRunJobDoesNotRegenerateExistingItems()
 {
     $data = array('old' => array('subject' => 'Old Subject', 'fromName' => 'Old From Name', 'fromAddress' => '*****@*****.**', 'textContent' => 'Old Text Content', 'htmlContent' => 'Old Html Content'), 'new' => array('subject' => 'New Subject', 'fromName' => 'New From Name', 'fromAddress' => '*****@*****.**', 'textContent' => 'New Text Content', 'htmlContent' => 'New Html Content'));
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 06');
     $marketingListId = $marketingList->id;
     $processed = 0;
     for ($i = 11; $i <= 15; $i++) {
         $email = new Email();
         $email->emailAddress = "demo{$i}@zurmo.com";
         $contact = ContactTestHelper::createContactByNameForOwner('campaignContact 0' . $i, $this->user);
         $contact->primaryEmail = $email;
         $this->assertTrue($contact->save());
         MarketingListMemberTestHelper::createMarketingListMember($processed, $marketingList, $contact);
     }
     $marketingList->forgetAll();
     $marketingList = MarketingList::getById($marketingListId);
     $nowDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $campaign = CampaignTestHelper::createCampaign('campaign', $data['old']['subject'], $data['old']['textContent'], $data['old']['htmlContent'], $data['old']['fromName'], $data['old']['fromAddress'], null, Campaign::STATUS_ACTIVE, $nowDateTime, null, $marketingList);
     $campaignId = $campaign->id;
     // we have to do this to ensure when we retrieve the data status is updated from db.
     $campaign->forgetAll();
     $this->assertEmpty(CampaignItem::getAll());
     // sleep 1 second to ensure we are giving ample time difference between creating the campaign and calling the job
     sleep(1);
     $campaignGenerateDueCampaignItemsJob = new CampaignGenerateDueCampaignItemsJob();
     $this->assertTrue($campaignGenerateDueCampaignItemsJob->run());
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     $allCampaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($allCampaignItems);
     $this->assertCount(5, $allCampaignItems);
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     $campaignQueueMessagesInOutboxJob = new CampaignQueueMessagesInOutboxJob();
     $this->assertTrue($campaignQueueMessagesInOutboxJob->run());
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     $oldCampaignItemIds = array();
     foreach ($campaignItems as $ci) {
         $this->assertNotEmpty($ci->id);
         $this->assertEquals(1, $ci->processed);
         $this->assertNotEmpty($ci->emailMessage->id);
         $this->assertNotEmpty($ci->emailMessage->sender->id);
         $this->assertNotEmpty($ci->emailMessage->content->id);
         $this->assertNotEmpty($ci->contact->id);
         $this->assertEquals($data['old']['subject'], $ci->emailMessage->subject);
         $this->assertEquals($data['old']['fromName'], $ci->emailMessage->sender->fromName);
         $this->assertEquals($data['old']['fromAddress'], $ci->emailMessage->sender->fromAddress);
         $this->assertContains($data['old']['textContent'], $ci->emailMessage->content->textContent);
         $this->assertContains($data['old']['htmlContent'], $ci->emailMessage->content->htmlContent);
         $oldCampaignItemIds[] = $ci->id;
     }
     $campaignItems[count($campaignItems) - 1]->delete();
     array_pop($oldCampaignItemIds);
     $campaign->status = Campaign::STATUS_ACTIVE;
     foreach ($data['new'] as $property => $value) {
         $campaign->{$property} = $value;
     }
     $this->assertTrue($campaign->save());
     $campaign->forgetAll();
     $campaignGenerateDueCampaignItemsJob = new CampaignGenerateDueCampaignItemsJob();
     $this->assertTrue($campaignGenerateDueCampaignItemsJob->run());
     $campaign = Campaign::getById($campaignId);
     $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
     $allCampaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($allCampaignItems);
     $this->assertCount(5, $allCampaignItems);
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(1, $campaignItems);
     $campaignQueueMessagesInOutboxJob = new CampaignQueueMessagesInOutboxJob();
     $this->assertTrue($campaignQueueMessagesInOutboxJob->run());
     $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId);
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(5, $campaignItems);
     $oldCounter = 0;
     $newCounter = 0;
     foreach ($campaignItems as $ci) {
         $this->assertNotEmpty($ci->id);
         $this->assertEquals(1, $ci->processed);
         $this->assertNotEmpty($ci->emailMessage->id);
         $this->assertNotEmpty($ci->emailMessage->sender->id);
         $this->assertNotEmpty($ci->emailMessage->content->id);
         $this->assertNotEmpty($ci->contact->id);
         $dataIndex = in_array($ci->id, $oldCampaignItemIds) ? 'old' : 'new';
         if ($dataIndex == 'old') {
             $oldCounter++;
         } else {
             $newCounter++;
         }
         $this->assertEquals($data[$dataIndex]['subject'], $ci->emailMessage->subject);
         $this->assertEquals($data[$dataIndex]['fromName'], $ci->emailMessage->sender->fromName);
         $this->assertEquals($data[$dataIndex]['fromAddress'], $ci->emailMessage->sender->fromAddress);
         $this->assertContains($data[$dataIndex]['textContent'], $ci->emailMessage->content->textContent);
         $this->assertContains($data[$dataIndex]['htmlContent'], $ci->emailMessage->content->htmlContent);
     }
     $this->assertEquals(count($oldCampaignItemIds), $oldCounter);
     $this->assertEquals(count($campaignItems) - count($oldCampaignItemIds), $newCounter);
 }
 public function testGetAllByFolderExcludedPausedCampaignMessages()
 {
     $countBefore = EmailMessage::getCount();
     $job = new CampaignQueueMessagesInOutboxJob();
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 01');
     MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
     $campaign = CampaignTestHelper::createCampaign('campaign 01', 'subject', 'text Content', 'Html Content', null, null, null, Campaign::STATUS_PROCESSING, null, 0, $marketingList);
     $processed = 0;
     CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
     $this->assertTrue($job->run());
     $campaignItems = CampaignItem::getAll();
     $this->assertCount(1, $campaignItems);
     $campaignItemsProcessed = CampaignItem::getByProcessedAndCampaignId(1, $campaign->id);
     $this->assertCount(1, $campaignItemsProcessed);
     $countAfter = EmailMessage::getCount();
     $this->assertEquals($countAfter, $countBefore + 1);
     $outboxCount = count(EmailMessage::getAllByFolderType(EmailFolder::TYPE_OUTBOX));
     $outboxNonPausedCount = count(EmailMessage::getAllByFolderType(EmailFolder::TYPE_OUTBOX, true));
     $this->assertEquals($outboxCount, $outboxNonPausedCount);
     $campaign->status = Campaign::STATUS_PAUSED;
     $this->assertTrue($campaign->save());
     $outboxCount = count(EmailMessage::getAllByFolderType(EmailFolder::TYPE_OUTBOX));
     $outboxNonPausedCount = count(EmailMessage::getAllByFolderType(EmailFolder::TYPE_OUTBOX, true));
     $this->assertEquals($outboxCount, $outboxNonPausedCount + 1);
 }