public function testGetCountByTypeAndEmailMessageActivity() { // setup pre-req data $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 01', 'description 01', 'fromName 01', '*****@*****.**'); $campaign = CampaignTestHelper::createCampaign('campaign 01', 'subject 01', 'text Content 01', 'html Content 01', 'fromName 01', '*****@*****.**', null, null, null, null, $marketingList); $processed = 0; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); $modelId = $campaignItem->id; $modelType = get_class($campaignItem); $personId = $contact->getClassId('Person'); $this->assertNotNull($personId); $activityData = array('modelId' => $campaignItem->id, 'modelType' => 'CampaignItem', 'personId' => $personId, 'url' => null, 'type' => CampaignItemActivity::TYPE_OPEN); $activityCreatedOrUpdated = CampaignItemActivityUtil::createOrUpdateActivity($activityData); $emailMessageActivities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(CampaignItemActivity::TYPE_OPEN, $campaignItem->id, $personId, null); $externalMessageActivityCount = ExternalApiEmailMessageActivity::getByTypeAndEmailMessageActivity(CampaignItemActivity::TYPE_OPEN, $emailMessageActivities[0], "sendgrid"); $this->assertEquals(0, $externalMessageActivityCount); $externalApiEmailMessageActivity = new ExternalApiEmailMessageActivity(); $externalApiEmailMessageActivity->emailMessageActivity = $emailMessageActivities[0]; $externalApiEmailMessageActivity->api = 'sendgrid'; $externalApiEmailMessageActivity->type = CampaignItemActivity::TYPE_OPEN; $externalApiEmailMessageActivity->reason = 'Test reason'; $externalApiEmailMessageActivity->emailAddress = '*****@*****.**'; $externalApiEmailMessageActivity->itemClass = 'CampaignItem'; $externalApiEmailMessageActivity->itemId = $campaignItem->id; $this->assertTrue($externalApiEmailMessageActivity->save()); $id = $externalApiEmailMessageActivity->id; $externalMessageActivityCount = ExternalApiEmailMessageActivity::getByTypeAndEmailMessageActivity(CampaignItemActivity::TYPE_OPEN, $emailMessageActivities[0], "sendgrid"); $this->assertEquals(1, $externalMessageActivityCount); $externalApiActivity = ExternalApiEmailMessageActivity::getById($id); $externalApiActivity->reason = 'New reason 1'; $this->assertTrue($externalApiActivity->save()); $externalApiActivity = ExternalApiEmailMessageActivity::getById($id); $this->assertEquals('New reason 1', $externalApiActivity->reason); $activities = ExternalApiEmailMessageActivity::getByEmailAddress('*****@*****.**', "sendgrid", false); $this->assertEquals(1, count($activities)); $this->assertEquals('New reason 1', $activities[0]->reason); }
/** * Resolve content for sendgrid bounce or spam email activity. * @param CampaignItem $campaignItem * @param int $type * @return string */ protected static function resolveContentForSendGridBounceOrSpamEventActivity(CampaignItem $campaignItem, $type) { $typesArray = CampaignItemActivity::getTypesArray(); $campaignItemActivities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl($type, $campaignItem->id, $campaignItem->contact->getClassId('Person'), null, 'latestDateTime'); $content = null; foreach ($campaignItemActivities as $campaignItemActivity) { $externalMessageActivities = ExternalApiEmailMessageActivity::getByEmailMessageActivity($campaignItemActivity, "sendgrid", false); foreach ($externalMessageActivities as $externalMessageActivity) { $content .= '<tr>'; $content .= '<td>' . $typesArray[$externalMessageActivity->type] . '</td>'; $content .= '<td>' . DateTimeUtil::convertDbFormattedDateTimeToLocaleFormattedDisplay($campaignItemActivity->latestDateTime) . '</td>'; $content .= '<td>' . $campaignItemActivity->quantity . '</td>'; $content .= '<td>' . $campaignItemActivity->latestSourceIP . '</td>'; $content .= '<td></td>'; $content .= '</tr>'; } } return $content; }
public function testProcessDueCampaignItemContactUnsubscribed() { $email = new Email(); $email->emailAddress = '*****@*****.**'; $email->optOut = false; $contact = ContactTestHelper::createContactByNameForOwner('contact 17', $this->user); $contact->primaryEmail = $email; $this->assertTrue($contact->save()); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 17', 'description', 'CustomFromName', '*****@*****.**'); MarketingListMemberTestHelper::createMarketingListMember(true, $marketingList, $contact); $campaign = CampaignTestHelper::createCampaign('campaign 17', 'subject 17', 'Dear. Sir', 'Dear. Sir', null, null, null, null, null, null, $marketingList); $processed = 0; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); CampaignItemsUtil::processDueItem($campaignItem); $this->assertEquals(1, $campaignItem->processed); $personId = $contact->getClassId('Person'); $activities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(CampaignItemActivity::TYPE_SKIP, $campaignItem->id, $personId); $this->assertNotEmpty($activities); $this->assertCount(1, $activities); }
/** * @depends testRunWithMultipleRecipientsWithAttachments */ public function testRunWithSubscribedAndUnsubscribedMembers() { $campaignItemsCountBefore = CampaignItem::getCount(); $job = new CampaignQueueMessagesInOutboxJob(); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 10'); $marketingListId = $marketingList->id; $contacts = array(); for ($i = 0; $i < 5; $i++) { $email = new Email(); $email->emailAddress = "demo{$i}@zurmo.com"; $contact = ContactTestHelper::createContactByNameForOwner('contact 0' . ($i + 14), $this->user); $contact->primaryEmail = $email; $this->assertTrue($contact->save()); $contacts[] = $contact; MarketingListMemberTestHelper::createMarketingListMember($i % 2, $marketingList, $contact); } $marketingList->forgetAll(); $marketingList = MarketingList::getById($marketingListId); $campaign = CampaignTestHelper::createCampaign('campaign 10', 'subject 10', '[[FIRST^NAME]]', '[[LAST^NAME]]', null, null, null, Campaign::STATUS_PROCESSING, null, 0, $marketingList); $this->assertNotNull($campaign); $campaignId = $campaign->id; foreach ($contacts as $contact) { CampaignItemTestHelper::createCampaignItem(0, $campaign, $contact); } $this->assertTrue($job->run()); $campaign = Campaign::getById($campaignId); $campaignItemsCountExpected = $campaignItemsCountBefore + 5; $campaignItemsCountAfter = CampaignItem::getCount(); $this->assertEquals($campaignItemsCountExpected, $campaignItemsCountAfter); $campaignItemsProcessed = CampaignItem::getByProcessedAndCampaignId(1, $campaign->id); $this->assertCount(5, $campaignItemsProcessed); $skippedCount = 0; foreach ($campaignItemsProcessed as $campaignItem) { $contact = $campaignItem->contact; $member = MarketingListMember::getByMarketingListIdContactIdAndUnsubscribed($campaign->marketingList->id, $contact->id, true); if ($member) { $personId = $campaignItem->contact->getClassId('Person'); $type = CampaignItemActivity::TYPE_SKIP; $activity = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl($type, $campaignItem->id, $personId); $this->assertNotNull($activity); $this->assertNotEmpty($activity); $this->assertCount(1, $activity); $skippedCount++; } else { $this->assertNotEmpty($campaignItem->emailMessage); $this->assertContains($contact->firstName, $campaignItem->emailMessage->content->textContent); $this->assertContains($contact->lastName, $campaignItem->emailMessage->content->htmlContent); } } $this->assertEquals(2, $skippedCount); }
/** * @return bool; */ public function hasAtLeastOneEventActivity($eventType) { $count = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl($eventType, $this->id, $this->contact->getClassId('Person'), null, 'latestDateTime', null, true); if ($count > 0) { return true; } return false; }
/** * @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); }
/** * @depends testTrackActionDoesNotComplainForMissingUrlParameterForCampaignItem */ public function testTrackActionThrowsRedirectExceptionForUrlParameterForCampaignItem() { $queryStringArray = array('modelId' => static::$campaignItemId, 'modelType' => 'CampaignItem', 'personId' => static::$personId, 'url' => 'http://www.zurmo.com'); $hash = StringUtil::resolveHashForQueryStringArray($queryStringArray); $this->setGetArray(array('id' => $hash)); $url = $this->runControllerWithRedirectExceptionAndGetUrl(static::TRACK_ROUTE); $this->assertEquals($queryStringArray['url'], $url); $campaignItemActivity = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(CampaignItemActivity::TYPE_CLICK, static::$campaignItemId, static::$personId, $queryStringArray['url']); $this->assertNotEmpty($campaignItemActivity); $this->assertCount(1, $campaignItemActivity); $this->assertEquals(1, $campaignItemActivity[0]->quantity); }
protected static function getClickedContentForDrillDown(CampaignItem $campaignItem) { $typesArray = CampaignItemActivity::getTypesArray(); $campaignItemActivities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(CampaignItemActivity::TYPE_CLICK, $campaignItem->id, $campaignItem->contact->getClassId('Person'), null, 'latestDateTime'); $content = null; foreach ($campaignItemActivities as $campaignItemActivity) { $content .= '<tr>'; $content .= '<td>' . $typesArray[CampaignItemActivity::TYPE_CLICK] . '</td>'; $content .= '<td>' . DateTimeUtil::convertDbFormattedDateTimeToLocaleFormattedDisplay($campaignItemActivity->latestDateTime) . '</td>'; $content .= '<td>' . $campaignItemActivity->quantity . '</td>'; $content .= '<td>' . $campaignItemActivity->latestSourceIP . '</td>'; $content .= '<td>' . $campaignItemActivity->emailMessageUrl . '</td>'; $content .= '</tr>'; } return $content; }
/** * @depends testRunWithCustomBatchSize */ public function testRunWithContactContainingPrimaryEmailOptedOut() { $unprocessedItems = CampaignItem::getByProcessed(0); $this->assertCount(1, $unprocessedItems); $job = new CampaignQueueMessagesInOutboxJob(); $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', '*****@*****.**'); $campaign = CampaignTestHelper::createCampaign('campaign 08', 'subject', '[[FIRST^NAME]]', '[[LAST^NAME]]', null, null, null, Campaign::STATUS_PROCESSING, null, null, $marketingList); $processed = 0; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); $unprocessedItems = CampaignItem::getByProcessedAndCampaignId($processed, $campaign->id); $this->assertCount(1, $unprocessedItems); $this->assertTrue($job->run()); $unprocessedItems = CampaignItem::getByProcessedAndCampaignId($processed, $campaign->id); $this->assertCount(0, $unprocessedItems); $personId = $contact->getClassId('Person'); $activities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(CampaignItemActivity::TYPE_SKIP, $campaignItem->id, $personId); $this->assertNotEmpty($activities); $this->assertCount(1, $activities); }