/**
  * @depends testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionForInvalidPersonIdForUrlClickTracking
  * @expectedException NotSupportedException
  */
 public function testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionForDuplicateActivityForUrlClickTracking()
 {
     // setup pre-req data
     $campaignItemActivities = CampaignItemActivity::getByType(CampaignItemActivity::TYPE_CLICK);
     $this->assertNotEmpty($campaignItemActivities);
     $campaignActivity = new CampaignItemActivity();
     $campaignActivity->quantity = $campaignItemActivities[0]->quantity;
     $campaignActivity->type = $campaignItemActivities[0]->type;
     $campaignActivity->campaignItem = $campaignItemActivities[0]->campaignItem;
     $campaignActivity->person = $campaignItemActivities[0]->person;
     $campaignActivity->emailMessageUrl = $campaignItemActivities[0]->emailMessageUrl;
     $this->assertTrue($campaignActivity->save());
     $modelId = $campaignItemActivities[0]->campaignItem->id;
     $modelType = get_class($campaignItemActivities[0]->campaignItem);
     $personId = $campaignItemActivities[0]->person->id;
     // get the modelClassName to use for activity object tests
     $className = 'CampaignItemActivityUtil';
     $resolveModelClassNameByModelTypeFunction = static::getProtectedMethod($className, 'resolveModelClassNameByModelType');
     $modelClassName = $resolveModelClassNameByModelTypeFunction->invokeArgs(null, array($modelType));
     $type = $modelClassName::TYPE_CLICK;
     $existingActivities = $modelClassName::getByType($type);
     $this->assertCount(2, $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 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 testCreateAndGetCampaignItemActivityById
  */
 public function testRequiredAttributes()
 {
     $campaignItemActivity = new CampaignItemActivity();
     $this->assertFalse($campaignItemActivity->save());
     $errors = $campaignItemActivity->getErrors();
     $this->assertNotEmpty($errors);
     $this->assertCount(2, $errors);
     $this->assertArrayHasKey('type', $errors);
     $this->assertEquals('Type cannot be blank.', $errors['type'][0]);
     $this->assertArrayHasKey('quantity', $errors);
     $this->assertEquals('Quantity cannot be blank.', $errors['quantity'][0]);
     $campaignItemActivity->type = CampaignItemActivity::TYPE_CLICK;
     $campaignItemActivity->quantity = 5;
     $emailMessageUrl = new EmailMessageUrl();
     $emailMessageUrl->url = 'http://www.example.com';
     $campaignItemActivity->emailMessageUrl = $emailMessageUrl;
     $campaignItemActivity->latestSourceIP = '131.113.112.121';
     $this->assertTrue($campaignItemActivity->save());
     $id = $campaignItemActivity->id;
     unset($campaignItemActivity);
     $campaignItemActivity = CampaignItemActivity::getById($id);
     $this->assertEquals(CampaignItemActivity::TYPE_CLICK, $campaignItemActivity->type);
     $this->assertEquals(5, $campaignItemActivity->quantity);
     $this->assertEquals('http://www.example.com', $campaignItemActivity->emailMessageUrl->url);
     $this->assertEquals('131.113.112.121', $campaignItemActivity->latestSourceIP);
 }
예제 #4
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());
 }
예제 #5
0
 /**
  * Special method to load a campaign with all types of campaignItemActivity
  */
 public function actionLoadCampaignWithAllItemActivityTypes()
 {
     if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) {
         throw new NotSupportedException();
     }
     $emailBox = EmailBoxUtil::getDefaultEmailBoxByUser(Yii::app()->user->userModel);
     $marketingList = new MarketingList();
     $marketingList->name = 'Demo Marketing List';
     $marketingList->save();
     $campaign = new Campaign();
     $campaign->marketingList = $marketingList;
     $campaign->name = 'Campaign with all campaignItemActivity';
     $campaign->subject = 'Demo for all types of campaignItemActivities';
     $campaign->status = Campaign::STATUS_COMPLETED;
     $campaign->sendOnDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $campaign->supportsRichText = true;
     $campaign->htmlContent = 'Demo content';
     $campaign->fromName = 'Zurmo';
     $campaign->fromAddress = '*****@*****.**';
     $campaign->enableTracking = true;
     $saved = $campaign->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $contacts = Contact::getAll();
     //Awaiting queue
     $contact = $contacts[0];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $campaignItem->unrestrictedSave();
     //Contact is not subscribed
     $contact = $contacts[1];
     $marketingList->addNewMember($contact->id, true);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, both primary and secondary are opted out
     $contact = $contacts[2];
     $contact->primaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->primaryEmail->optOut = true;
     $contact->secondaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->secondaryEmail->optOut = true;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, primary is opted out but secondary is not
     $contact = $contacts[3];
     $contact->primaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->primaryEmail->optOut = true;
     $contact->secondaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->secondaryEmail->optOut = false;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, primary and secondary not set
     $contact = $contacts[4];
     $contact->primaryEmail = null;
     $contact->secondaryEmail = null;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, primary not set but secondary is set
     $contact = $contacts[5];
     $contact->primaryEmail = null;
     $contact->secondaryEmail->emailAddress = $contact->firstName . '@zurmo.org';
     $contact->secondaryEmail->optOut = false;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Queued
     $contact = $contacts[6];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX);
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
     //Queued with error
     $contact = $contacts[7];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX_ERROR);
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->sendAttempts = 2;
     $emailMessageError = new EmailMessageSendError();
     $emailMessageError->serializedData = serialize(array('code' => '0001', 'message' => 'Error Message'));
     $emailMessage->error = $emailMessageError;
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
     //Failure
     $contact = $contacts[8];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX_FAILURE);
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->sendAttempts = 3;
     $emailMessageError = new EmailMessageSendError();
     $emailMessageError->serializedData = serialize(array('code' => '0001', 'message' => 'Error Message'));
     $emailMessage->error = $emailMessageError;
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
     //Sent, open, click, bounce
     $contact = $contacts[9];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->type = CampaignItemActivity::TYPE_CLICK;
     $activity->quantity = rand(1, 50);
     $activity->latestDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + rand(100, 1000));
     $activity->latestSourceIP = '10.11.12.13';
     $activity->save();
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->type = CampaignItemActivity::TYPE_OPEN;
     $activity->quantity = rand(1, 50);
     $activity->latestDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + rand(100, 1000));
     $activity->latestSourceIP = '10.11.12.13';
     $activity->save();
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->type = CampaignItemActivity::TYPE_BOUNCE;
     $activity->quantity = rand(1, 50);
     $activity->latestDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + rand(100, 1000));
     $activity->latestSourceIP = '10.11.12.13';
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_SENT);
     $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $emailMessage->save();
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
 }