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