public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     static::$user = User::getByUsername('super');
     Yii::app()->user->userModel = static::$user;
     $contact = ContactTestHelper::createContactByNameForOwner('contact 01', static::$user);
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 01', 'description 01', 'fromName 01', '*****@*****.**');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 01', 'textContent 01', 'htmlContent 01', 10, Autoresponder::OPERATION_SUBSCRIBE, 1, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - 100);
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     static::$personId = $contact->getClassId('Person');
     static::$autoresponderItemId = $autoresponderItem->id;
     $campaign = CampaignTestHelper::createCampaign('campaign 01', 'subject 01', 'text Content 01', 'html Content 01', 'fromName 01', '*****@*****.**', null, Campaign::STATUS_ACTIVE, null, null, $marketingList);
     $processed = 0;
     $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
     static::$campaignItemId = $campaignItem->id;
     AllPermissionsOptimizationUtil::rebuild();
 }
 public function testCreateAndGetAutoresponderItemActivityWithAutoresponderItemById()
 {
     $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user);
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 01');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 01', 'text content', 'html content', 1, Autoresponder::OPERATION_SUBSCRIBE, true, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - 100);
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $autoresponderItemActivity = new AutoresponderItemActivity();
     $autoresponderItemActivity->type = AutoresponderItemActivity::TYPE_CLICK;
     $autoresponderItemActivity->quantity = 1;
     $autoresponderItemActivity->latestSourceIP = '11.12.13.14';
     $autoresponderItemActivity->autoresponderItem = $autoresponderItem;
     $this->assertTrue($autoresponderItemActivity->save());
     $id = $autoresponderItemActivity->id;
     unset($autoresponderItemActivity);
     $autoresponderItemActivity = AutoresponderItemActivity::getById($id);
     $this->assertEquals(AutoresponderItemActivity::TYPE_CLICK, $autoresponderItemActivity->type);
     $this->assertEquals(1, $autoresponderItemActivity->quantity);
     $this->assertEquals('11.12.13.14', $autoresponderItemActivity->latestSourceIP);
     $this->assertEquals($autoresponderItem, $autoresponderItemActivity->autoresponderItem);
 }
 /**
  * @depends testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionForInvalidAutoresponderItemIdForUrlClickTracking
  * @expectedException NotFoundException
  */
 public function testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionForInvalidPersonIdForUrlClickTracking()
 {
     // setup pre-req data
     $contact = ContactTestHelper::createContactByNameForOwner('contact 06', $this->user);
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 06', 'description 06', 'fromName 06', '*****@*****.**');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 06', 'textContent 06', 'htmlContent 06', 10, Autoresponder::OPERATION_SUBSCRIBE, 1, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - 100);
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $modelId = $autoresponderItem->id;
     $modelType = get_class($autoresponderItem);
     $personId = $contact->getClassId('Person');
     $this->assertNotNull($personId);
     $personId = $personId + 200;
     // get the modelClassName to use for activity object tests
     $className = 'AutoresponderItemActivityUtil';
     $resolveModelClassNameByModelTypeFunction = static::getProtectedMethod($className, 'resolveModelClassNameByModelType');
     $modelClassName = $resolveModelClassNameByModelTypeFunction->invokeArgs(null, array($modelType));
     $type = $modelClassName::TYPE_CLICK;
     $existingActivities = $modelClassName::getByType($type);
     $this->assertCount(1, $existingActivities);
     // get base query string
     $resolveBaseQueryStringArrayFunction = static::getProtectedMethod('ContentTrackingUtil', 'resolveBaseQueryStringArray');
     $queryStringArray = $resolveBaseQueryStringArrayFunction->invokeArgs(null, array($modelId, $modelType, $personId));
     $this->assertNotEmpty($queryStringArray);
     $this->assertCount(3, $queryStringArray);
     $this->assertArrayHasKey('modelId', $queryStringArray);
     $this->assertArrayHasKey('modelType', $queryStringArray);
     $this->assertArrayHasKey('personId', $queryStringArray);
     $queryStringArray['url'] = 'http://www.zurmo.com';
     // get hash for query string and ensure its what we expect it to be.
     $queryStringArrayHash = StringUtil::resolveHashForQueryStringArray($queryStringArray);
     $queryStringArrayDecoded = $className::resolveQueryStringArrayForHash($queryStringArrayHash);
     $this->assertNotEmpty($queryStringArrayDecoded);
     $this->assertCount(5, $queryStringArrayDecoded);
     $this->assertArrayHasKey('modelId', $queryStringArrayDecoded);
     $this->assertArrayHasKey('modelType', $queryStringArrayDecoded);
     $this->assertArrayHasKey('personId', $queryStringArrayDecoded);
     $this->assertArrayHasKey('url', $queryStringArrayDecoded);
     $this->assertArrayHasKey('type', $queryStringArrayDecoded);
     $this->assertEquals($queryStringArray['modelId'], $queryStringArrayDecoded['modelId']);
     $this->assertEquals($queryStringArray['modelType'], $queryStringArrayDecoded['modelType']);
     $this->assertEquals($queryStringArray['personId'], $queryStringArrayDecoded['personId']);
     $this->assertEquals($queryStringArray['url'], $queryStringArrayDecoded['url']);
     $this->assertNull($queryStringArrayDecoded['type']);
     // do the magic, confirm magic worked by checking return value.
     $_GET['id'] = $queryStringArrayHash;
     $result = $className::resolveQueryStringFromUrlAndCreateOrUpdateActivity();
 }
Ejemplo n.º 4
0
 /**
  * @depends testGetByProcessedAndAutoresponderId
  */
 public function testGetByProcessedAndAutoresponderIdAndTime()
 {
     $intervals = array('hour', 'day');
     $marketingList = MarketingList::getByName('marketingList 01');
     $this->assertNotEmpty($marketingList);
     $autoresponder3 = AutoresponderTestHelper::createAutoresponder('autoresponder 03', 'subject 03', 'text 03', 'html 03', 10, Autoresponder::OPERATION_UNSUBSCRIBE, $marketingList[0]);
     $this->assertNotNull($autoresponder3);
     $autoresponder4 = AutoresponderTestHelper::createAutoresponder('autoresponder 04', 'subject 04', 'text 04', 'html 04', 20, Autoresponder::OPERATION_SUBSCRIBE, $marketingList[0]);
     $this->assertNotNull($autoresponder4);
     for ($i = 0; $i < 10; $i++) {
         if ($i % 3) {
             $pastOrFuture = "-";
             $processed = AutoresponderItem::PROCESSED;
         } else {
             $pastOrFuture = "+";
             $processed = AutoresponderItem::NOT_PROCESSED;
         }
         if ($i % 2) {
             $autoresponder = $autoresponder3;
             $interval = $intervals[1];
         } else {
             $autoresponder = $autoresponder4;
             $interval = $intervals[0];
         }
         $timestamp = strtotime($pastOrFuture . ($i + 1) . ' ' . $interval);
         $time = DateTimeUtil::convertTimestampToDbFormatDateTime($timestamp);
         $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $time, $autoresponder);
         $this->assertNotNull($autoresponderItem);
     }
     $autoresponderItems = AutoresponderItem::getAll();
     $this->assertCount(37, $autoresponderItems);
     $autoresponder3ProcessedBeforeNow = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::PROCESSED, $autoresponder3->id);
     $this->assertNotEmpty($autoresponder3ProcessedBeforeNow);
     $this->assertCount(3, $autoresponder3ProcessedBeforeNow);
     $autoresponder3ProcessedFiveDaysAgo = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::PROCESSED, $autoresponder3->id, strtotime("-5 day"));
     $this->assertNotEmpty($autoresponder3ProcessedFiveDaysAgo);
     $this->assertCount(2, $autoresponder3ProcessedFiveDaysAgo);
     $autoresponder3NotProcessedBeforeNow = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::NOT_PROCESSED, $autoresponder3->id);
     $this->assertEmpty($autoresponder3NotProcessedBeforeNow);
     $autoresponder3NotProcessedFiveDaysFromNow = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::NOT_PROCESSED, $autoresponder3->id, strtotime("+5 day"));
     $this->assertNotEmpty($autoresponder3NotProcessedFiveDaysFromNow);
     $this->assertCount(1, $autoresponder3NotProcessedFiveDaysFromNow);
     $autoresponder4ProcessedBeforeNow = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::PROCESSED, $autoresponder4->id);
     $this->assertNotEmpty($autoresponder4ProcessedBeforeNow);
     $this->assertCount(3, $autoresponder4ProcessedBeforeNow);
     $autoresponder4ProcessedFiveDaysAgo = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::PROCESSED, $autoresponder4->id, strtotime("-5 day"));
     $this->assertEmpty($autoresponder4ProcessedFiveDaysAgo);
     $autoresponder4NotProcessedBeforeNow = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::NOT_PROCESSED, $autoresponder4->id);
     $this->assertEmpty($autoresponder4NotProcessedBeforeNow);
     $autoresponder4NotProcessedFiveDaysFromNow = AutoresponderItem::getByProcessedAndAutoresponderIdWithProcessDateTime(AutoresponderItem::NOT_PROCESSED, $autoresponder4->id, strtotime("+5 day"));
     $this->assertNotEmpty($autoresponder4NotProcessedFiveDaysFromNow);
     $this->assertCount(2, $autoresponder4NotProcessedFiveDaysFromNow);
 }
 /**
  * @depends testProcessDueAutoresponderItemWithUnsubscribeAndManageSubscriptionsUrlMergeTags
  */
 public function testProcessDueAutoresponderItemWithoutUnsubscribeAndManageSubscriptionsUrlMergeTags()
 {
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact = ContactTestHelper::createContactByNameForOwner('contact 13', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 13', 'description', 'CustomFromName', '*****@*****.**');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 13', 'Plain Text', 'HTML', 1, Autoresponder::OPERATION_SUBSCRIBE, true, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $this->processDueItem($autoresponderItem);
     $this->assertEquals(1, $autoresponderItem->processed);
     $textContent = $autoresponderItem->emailMessage->content->textContent;
     $htmlContent = $autoresponderItem->emailMessage->content->htmlContent;
     $this->assertNotEquals($autoresponder->textContent, $textContent);
     $this->assertNotEquals($autoresponder->htmlContent, $htmlContent);
     $this->assertContains('Plain Text', $textContent);
     $this->assertContains('/marketingLists/external/unsubscribe?hash=', $textContent);
     $this->assertEquals(1, substr_count($textContent, '/marketingLists/external/unsubscribe?hash='));
     $this->assertContains('/marketingLists/external/manageSubscriptions?hash=', $textContent);
     $this->assertEquals(1, substr_count($textContent, '/marketingLists/external/manageSubscriptions?hash='));
     $this->assertContains('HTML<br /><br /><a href="localhost/', $htmlContent);
     $this->assertContains('<img width="1" height="1" src="localhost', $htmlContent);
     $this->assertContains('/tracking/default/track?id=', $htmlContent);
     $this->assertEquals(1, substr_count($htmlContent, '/tracking/default/track?id='));
     $this->assertContains('/marketingLists/external/unsubscribe?hash=', $htmlContent);
     $this->assertEquals(1, substr_count($htmlContent, '/marketingLists/external/unsubscribe?hash='));
     $this->assertContains('<br /><a href="localhost/', $htmlContent);
     $this->assertEquals(2, substr_count($htmlContent, '<br /><a href="localhost/'));
     $this->assertContains('/marketingLists/external/manageSubscriptions?hash=', $htmlContent);
     $this->assertEquals(1, substr_count($htmlContent, '/marketingLists/external/manageSubscriptions?hash='));
 }
 /**
  * @depends testRunWithCustomBatchSize
  */
 public function testRunWithContactContainingPrimaryEmailOptedOut()
 {
     $unprocessedItems = AutoresponderItem::getByProcessed(0);
     $this->assertEmpty($unprocessedItems);
     $job = new AutoresponderQueueMessagesInOutboxJob();
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $email->optOut = true;
     $contact = ContactTestHelper::createContactByNameForOwner('contact 07', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 08', 'description goes here', 'fromName', '*****@*****.**');
     MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 08', '[[FIRST^NAME]]', '[[LAST^NAME]]', 1, Autoresponder::OPERATION_SUBSCRIBE, true, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - rand(10, 500));
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $unprocessedItems = AutoresponderItem::getByProcessedAndAutoresponderId(0, $autoresponder->id);
     $this->assertCount(1, $unprocessedItems);
     $this->assertTrue($job->run());
     $unprocessedItems = AutoresponderItem::getByProcessedAndAutoresponderId(0, $autoresponder->id);
     $this->assertCount(0, $unprocessedItems);
     $personId = $contact->getClassId('Person');
     $activities = AutoresponderItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(AutoresponderItemActivity::TYPE_SKIP, $autoresponderItem->id, $personId);
     $this->assertNotEmpty($activities);
     $this->assertCount(1, $activities);
 }
 /**
  * @depends testUnsubscribeActionToPublicMarketingListCreatesActivity
  */
 public function testUnsubscribeActionToPrivateMarketingList()
 {
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $marketingList = MarketingList::getByName('marketingList 04');
     $this->assertNotEmpty($marketingList);
     $marketingList = $marketingList[0];
     $marketingListId = $marketingList->id;
     $contact = Contact::getByName('contact 05 contact 05son');
     $this->assertNotEmpty($contact);
     $contact = $contact[0];
     $marketingList->addNewMember($contact->id, false, $contact);
     $member = MarketingListMember::getByMarketingListIdContactIdAndSubscribed($marketingList->id, $contact->id, 0);
     $this->assertNotEmpty($member);
     $this->assertEquals(0, $member[0]->unsubscribed);
     $personId = $contact->getClassId('Person');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('Autoresponder 02', 'textContent', 'htmlContent', 10, Autoresponder::OPERATION_UNSUBSCRIBE, true, $marketingList);
     $this->assertNotEmpty($autoresponder);
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(strtotime('-1 week'));
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem(1, $processDateTime, $autoresponder, $contact);
     $this->assertNotEmpty($autoresponderItem);
     $autoresponderItemActivities = AutoresponderItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(AutoresponderItemActivity::TYPE_UNSUBSCRIBE, $autoresponderItem->id, $personId);
     $this->assertEmpty($autoresponderItemActivities);
     Yii::app()->user->userModel = null;
     $hash = EmailMessageActivityUtil::resolveHashForUnsubscribeAndManageSubscriptionsUrls($personId, $marketingListId, 1, 'AutoresponderItem', false);
     $this->setGetArray(array('hash' => $hash));
     $content = $this->runControllerWithNoExceptionsAndGetContent($this->manageSubscriptionsUrl);
     $this->assertTrue(strpos($content, 'id="marketingListsManageSubscriptionListView-toggleUnsubscribed_' . $marketingListId . '_0" checked="checked" type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_' . $marketingListId) !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManageSubscriptionListView-toggleUnsubscribed_' . $marketingListId . '_1" type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_' . $marketingListId) !== false);
     @$this->runControllerWithRedirectExceptionAndGetUrl($this->unsubscribeUrl);
     $content = $this->runControllerWithNoExceptionsAndGetContent($this->manageSubscriptionsUrl);
     $this->assertNotEmpty($content);
     $this->assertTrue(strpos($content, 'id="marketingListsManageSubscriptionListView-toggleUnsubscribed_' . $marketingListId . '_0" type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_' . $marketingListId) === false);
     $this->assertTrue(strpos($content, 'id="marketingListsManageSubscriptionListView-toggleUnsubscribed_' . $marketingListId . '_1" checked="checked" type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_' . $marketingListId) === false);
     $this->assertTrue(strpos($content, '<td>marketingList 04</td>') === false);
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $autoresponderItemActivities = AutoresponderItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(AutoresponderItemActivity::TYPE_UNSUBSCRIBE, $autoresponderItem->id, $personId);
     $this->assertEmpty($autoresponderItemActivities);
 }
Ejemplo n.º 8
0
 /**
  * @depends testRunWithOneBounceMessageWithDesiredCustomHeaders
  */
 public function testRunWithTwoBounceMessagesWithDesiredCustomHeaders()
 {
     $this->skipTestIfMissingSettings();
     $contact = ContactTestHelper::createContactByNameForOwner('contact 02', $this->user);
     $personId = $contact->getClassId('Person');
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 02');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 02', 'text content', 'html content', 1, Autoresponder::OPERATION_SUBSCRIBE, true, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - 200);
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $bounce = BounceMessageTestHelper::resolveBounceObject();
     $this->assertTrue($bounce->connect());
     $headers = array('Return-Path' => $bounce->returnPath, 'zurmoItemId' => $autoresponderItem->id, 'zurmoItemClass' => get_class($autoresponderItem), 'zurmoPersonId' => $personId);
     $bounceTestEmailAddress = Yii::app()->params['emailTestAccounts']['bounceTestEmailAddress'];
     Yii::app()->emailHelper->sendRawEmail("1/2 Bounce - Desired Headers " . date(DATE_RFC822), Yii::app()->emailHelper->outboundUsername, $bounceTestEmailAddress, 'Test email body', '<strong>Test</strong> email html body', null, null, null, null, $headers);
     Yii::app()->emailHelper->sendRawEmail("2/2 Bounce - Desired Headers " . date(DATE_RFC822), Yii::app()->emailHelper->outboundUsername, $bounceTestEmailAddress, 'Test email body', '<strong>Test</strong> email html body', null, null, null, null, $headers);
     sleep(60);
     $messages = $bounce->getMessages();
     $this->assertEquals(2, count($messages));
     for ($i = 0; $i < 2; $i++) {
         $this->assertEquals("Mail delivery failed: returning message to sender", $messages[$i]->subject);
         $this->assertContains('Test email body', $messages[$i]->textBody);
         $this->assertContains('zurmoItemId: ' . $autoresponderItem->id, $messages[$i]->textBody);
         $this->assertContains('zurmoItemClass: ' . get_class($autoresponderItem), $messages[$i]->textBody);
         $this->assertContains('zurmoPersonId: ' . $personId, $messages[$i]->textBody);
     }
     $job = new EmailBounceJob();
     $this->assertTrue($job->run());
     $activities = AutoresponderItemActivity::getAll();
     $this->assertNotEmpty($activities);
     $this->assertCount(2, $activities);
     $activities = AutoresponderItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(AutoresponderItemActivity::TYPE_BOUNCE, $autoresponderItem->id, $personId);
     $this->assertNotEmpty($activities);
     $this->assertCount(1, $activities);
     $this->assertEquals(2, $activities[0]->quantity);
     $messages = $bounce->getMessages();
     $this->assertEquals(0, count($messages));
 }
Ejemplo n.º 9
0
 /**
  * @depends testProcessDueAutoresponderItemWithCustomFromAddressAndFromName
  */
 public function testProcessDueAutoresponderItemWithValidMergeTags()
 {
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact = ContactTestHelper::createContactByNameForOwner('contact 05', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 05', 'description', 'CustomFromName', '*****@*****.**');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('autoresponder 05', 'subject 05', 'Dr. [[FIRST^NAME]] [[LAST^NAME]]', '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]', 1, Autoresponder::OPERATION_SUBSCRIBE, $marketingList);
     $processed = AutoresponderItem::NOT_PROCESSED;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     AutoresponderItemsUtil::processDueAutoresponderItem($autoresponderItem);
     $this->assertEquals(AutoresponderItem::PROCESSED, $autoresponderItem->processed);
     $emailMessage = $autoresponderItem->emailMessage;
     $this->assertEquals($marketingList->owner, $emailMessage->owner);
     $this->assertEquals($autoresponder->subject, $emailMessage->subject);
     $this->assertNotEquals($autoresponder->textContent, $emailMessage->content->textContent);
     $this->assertNotEquals($autoresponder->htmlContent, $emailMessage->content->htmlContent);
     $this->assertEquals('Dr. contact 05 contact 05son', $emailMessage->content->textContent);
     $this->assertEquals('<b>contact 05son</b>, contact 05', $emailMessage->content->htmlContent);
     $this->assertEquals($marketingList->fromAddress, $emailMessage->sender->fromAddress);
     $this->assertEquals($marketingList->fromName, $emailMessage->sender->fromName);
     $this->assertEquals(1, $emailMessage->recipients->count());
     $recipients = $emailMessage->recipients;
     $this->assertEquals(strval($contact), $recipients[0]->toName);
     $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
     $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
     $this->assertEquals($contact, $recipients[0]->personOrAccount);
 }
 /**
  * @depends testProcessDueAutoresponderItemWithoutUnsubscribeAndManageSubscriptionsUrlMergeTags
  */
 public function testProcessDueAutoresponderItemDoesNotThrowExceptionWhenContactDeletedFromMarketingList()
 {
     $contact = ContactTestHelper::createContactByNameForOwner('contact 14', $this->user);
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 14');
     $marketingListMember = MarketingListMemberTestHelper::createMarketingListMember(1, $marketingList, $contact);
     $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 14', 'text content', 'html content', 1, Autoresponder::OPERATION_UNSUBSCRIBE, false, $marketingList);
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $this->processDueItem($autoresponderItem);
     $this->assertEquals(1, $autoresponderItem->processed);
     $emailMessage = $autoresponderItem->emailMessage;
     $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
     $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
     $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
     $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
     $this->assertEquals($autoresponder->subject, $emailMessage->subject);
     $this->assertContains($autoresponder->textContent, $emailMessage->content->textContent);
     $this->assertContains($autoresponder->htmlContent, $emailMessage->content->htmlContent);
     $this->assertEquals(1, $emailMessage->recipients->count());
     // Test when marketing list member is deleted from list
     $marketingListMember->delete();
     $processed = 0;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $this->processDueItem($autoresponderItem);
     $this->assertEquals(1, $autoresponderItem->processed);
     $emailMessage = $autoresponderItem->emailMessage;
     $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
     $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
     $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
     $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
     $this->assertNull($emailMessage->subject);
     $this->assertNull($emailMessage->content->textContent);
     $this->assertNull($emailMessage->content->htmlContent);
     $this->assertEquals(0, $emailMessage->recipients->count());
 }
 /**
  * @depends testRunWithInvalidMergeTags
  */
 public function testRunWithValidMergeTags()
 {
     $job = new AutoresponderMessageInQueueJob();
     $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', '*****@*****.**');
     $autoresponder = AutoresponderTestHelper::createAutoresponder('autoresponder 06', 'subject 06', '[[FIRST^NAME]]', '[[LAST^NAME]]', 1, Autoresponder::OPERATION_SUBSCRIBE, $marketingList);
     $processed = AutoresponderItem::NOT_PROCESSED;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - 10);
     AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact);
     $this->assertTrue($job->run());
     $autoresponderItems = AutoresponderItem::getAll();
     $this->assertCount(4, $autoresponderItems);
     $autoresponderItemsProcessed = AutoresponderItem::getByProcessedAndAutoresponderId(AutoresponderItem::PROCESSED, $autoresponder->id);
     $this->assertCount(1, $autoresponderItemsProcessed);
 }