PageRenderTime 52ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/app/protected/modules/campaigns/tests/unit/CampaignItemsUtilTest.php

https://bitbucket.org/zurmo/zurmo/
PHP | 991 lines | 857 code | 27 blank | 107 comment | 1 complexity | 6d32f43d2ee94677b38f01245ddcfeb5 MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, GPL-2.0, LGPL-3.0, LGPL-2.1, BSD-2-Clause

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /*********************************************************************************
  3. * Zurmo is a customer relationship management program developed by
  4. * Zurmo, Inc. Copyright (C) 2015 Zurmo Inc.
  5. *
  6. * Zurmo is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU Affero General Public License version 3 as published by the
  8. * Free Software Foundation with the addition of the following permission added
  9. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  10. * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
  11. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  12. *
  13. * Zurmo is distributed in the hope that it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public License along with
  19. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  20. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  21. * 02110-1301 USA.
  22. *
  23. * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
  24. * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
  25. *
  26. * The interactive user interfaces in original and modified versions
  27. * of this program must display Appropriate Legal Notices, as required under
  28. * Section 5 of the GNU Affero General Public License version 3.
  29. *
  30. * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
  31. * these Appropriate Legal Notices must retain the display of the Zurmo
  32. * logo and Zurmo copyright notice. If the display of the logo is not reasonably
  33. * feasible for technical reasons, the Appropriate Legal Notices must display the words
  34. * "Copyright Zurmo Inc. 2015. All rights reserved".
  35. ********************************************************************************/
  36. class CampaignItemsUtilTest extends AutoresponderOrCampaignBaseTest
  37. {
  38. // We don't need to add separate tests for tracking scenarios here because we have already gained more than
  39. // sufficient coverage in CampaignItemActivityUtilTest and EmailMessageActivityUtilTest for those.
  40. protected $user;
  41. public static function setUpBeforeClass()
  42. {
  43. parent::setUpBeforeClass();
  44. SecurityTestHelper::createSuperAdmin();
  45. }
  46. public function setUp()
  47. {
  48. parent::setUp();
  49. $this->user = User::getByUsername('super');
  50. Yii::app()->user->userModel = $this->user;
  51. Campaign::deleteAll();
  52. }
  53. /**
  54. * Do not throw exception. That means it passes
  55. */
  56. public function testProcessDueCampaignItemThrowsExceptionWhenContentHasInvalidMergeTagsForOnlyHtml()
  57. {
  58. $html = "[[FIRST^NAME]], You are receiving this email";
  59. $text = null;
  60. $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user);
  61. $marketingList = MarketingListTestHelper::populateMarketingListByName('marketingList 01');
  62. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  63. $campaign = CampaignTestHelper::createCampaign('campaign 01',
  64. 'subject 01',
  65. $text,
  66. $html,
  67. null,
  68. null,
  69. null,
  70. null,
  71. null,
  72. null,
  73. $marketingList,
  74. false);
  75. $processed = 0;
  76. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  77. $this->processDueItem($campaignItem);
  78. }
  79. /**
  80. * @depends testProcessDueCampaignItemThrowsExceptionWhenContentHasInvalidMergeTagsForOnlyHtml
  81. * Do not throw exception. That means it passes
  82. */
  83. public function testProcessDueCampaignItemThrowsExceptionWhenContentHasInvalidMergeTagsForOnlyText()
  84. {
  85. $text = "[[FIRST^NAME]], You are receiving this email";
  86. $html = null;
  87. $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user);
  88. $marketingList = MarketingListTestHelper::populateMarketingListByName('marketingList 01');
  89. $campaign = CampaignTestHelper::createCampaign('campaign 01',
  90. 'subject 01',
  91. $text,
  92. $html,
  93. null,
  94. null,
  95. null,
  96. null,
  97. null,
  98. null,
  99. $marketingList,
  100. false);
  101. $processed = 0;
  102. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  103. $this->processDueItem($campaignItem);
  104. }
  105. /**
  106. * @depends testProcessDueCampaignItemThrowsExceptionWhenContentHasInvalidMergeTagsForOnlyText
  107. * @expectedException NotFoundException
  108. */
  109. public function testProcessDueCampaignItemThrowsExceptionWhenNoContactIsAvailable()
  110. {
  111. $campaignItem = new CampaignItem();
  112. $this->processDueItem($campaignItem);
  113. }
  114. /**
  115. * @depends testProcessDueCampaignItemThrowsExceptionWhenNoContactIsAvailable
  116. * @expectedException NotSupportedException
  117. * @expectedExceptionMessage Provided content contains few invalid merge tags
  118. */
  119. public function testProcessDueCampaignItemThrowsExceptionWhenContentHasInvalidMergeTags()
  120. {
  121. $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user);
  122. $marketingList = MarketingListTestHelper::populateMarketingListByName('marketingList 01');
  123. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  124. $campaign = CampaignTestHelper::createCampaign('campaign 01',
  125. 'subject 01',
  126. '[[TEXT^CONTENT]]',
  127. '[[HTML^CONTENT]]',
  128. null,
  129. null,
  130. null,
  131. null,
  132. null,
  133. null,
  134. $marketingList,
  135. false);
  136. $processed = 0;
  137. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  138. $this->processDueItem($campaignItem);
  139. }
  140. /**
  141. * @depends testProcessDueCampaignItemThrowsExceptionWhenContentHasInvalidMergeTags
  142. */
  143. public function testProcessDueCampaignItemDoesNotThrowExceptionWhenContactHasNoPrimaryEmail()
  144. {
  145. $contact = ContactTestHelper::createContactByNameForOwner('contact 02', $this->user);
  146. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 02');
  147. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  148. $campaign = CampaignTestHelper::createCampaign('campaign 02',
  149. 'subject 02',
  150. 'text content',
  151. 'html content',
  152. null,
  153. null,
  154. null,
  155. null,
  156. null,
  157. 0,
  158. $marketingList);
  159. $processed = 0;
  160. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  161. $this->processDueItem($campaignItem);
  162. $this->assertEquals(1, $campaignItem->processed);
  163. $emailMessage = $campaignItem->emailMessage;
  164. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  165. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  166. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  167. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  168. $this->assertNull($emailMessage->subject);
  169. $this->assertNull($emailMessage->content->textContent);
  170. $this->assertNull($emailMessage->content->htmlContent);
  171. $this->assertNull($emailMessage->sender->fromAddress);
  172. $this->assertNull($emailMessage->sender->fromName);
  173. $this->assertEquals(0, $emailMessage->recipients->count());
  174. //Test with empty primary email address
  175. $contact->primaryEmail->emailAddress = '';
  176. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  177. $this->processDueItem($campaignItem);
  178. $this->assertEquals(1, $campaignItem->processed);
  179. $emailMessage = $campaignItem->emailMessage;
  180. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  181. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  182. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  183. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  184. $this->assertNull($emailMessage->subject);
  185. $this->assertNull($emailMessage->content->textContent);
  186. $this->assertNull($emailMessage->content->htmlContent);
  187. $this->assertNull($emailMessage->sender->fromAddress);
  188. $this->assertNull($emailMessage->sender->fromName);
  189. $this->assertEquals(0, $emailMessage->recipients->count());
  190. }
  191. /**
  192. * @depends testProcessDueCampaignItemDoesNotThrowExceptionWhenContactHasNoPrimaryEmail
  193. */
  194. public function testProcessDueCampaignItemDoesNotThrowExceptionWhenContactHasPrimaryEmail()
  195. {
  196. $email = new Email();
  197. $email->emailAddress = 'demo@zurmo.com';
  198. $contact = ContactTestHelper::createContactByNameForOwner('contact 03', $this->user);
  199. $contact->primaryEmail = $email;
  200. $this->assertTrue($contact->save());
  201. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 03');
  202. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  203. $campaign = CampaignTestHelper::createCampaign('campaign 03',
  204. 'subject 03',
  205. 'text content',
  206. 'html content',
  207. null,
  208. null,
  209. null,
  210. null,
  211. null,
  212. null,
  213. $marketingList);
  214. $processed = 0;
  215. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  216. $this->processDueItem($campaignItem);
  217. $this->assertEquals(1, $campaignItem->processed);
  218. $emailMessage = $campaignItem->emailMessage;
  219. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  220. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  221. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  222. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  223. $this->assertEquals($campaign->subject, $emailMessage->subject);
  224. $this->assertContains($campaign->textContent, $emailMessage->content->textContent);
  225. $this->assertContains('/marketingLists/external/', $emailMessage->content->textContent);
  226. $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
  227. $this->assertContains($campaign->htmlContent, $emailMessage->content->htmlContent);
  228. $this->assertContains('/marketingLists/external/', $emailMessage->content->htmlContent);
  229. $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
  230. $this->assertEquals('support@zurmo.com', $emailMessage->sender->fromAddress);
  231. $this->assertEquals('Support Team', $emailMessage->sender->fromName);
  232. $this->assertEquals(1, $emailMessage->recipients->count());
  233. $recipients = $emailMessage->recipients;
  234. $this->assertEquals(strval($contact), $recipients[0]->toName);
  235. $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
  236. $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
  237. $this->assertEquals($contact->getClassId('Item'), $recipients[0]->personsOrAccounts[0]->id);
  238. $headersArray = array('zurmoItemId' => $campaignItem->id,
  239. 'zurmoItemClass' => get_class($campaignItem),
  240. 'zurmoPersonId' => $contact->getClassId('Person'));
  241. $expectedHeaders = serialize($headersArray);
  242. $this->assertEquals($expectedHeaders, $emailMessage->headers);
  243. }
  244. /**
  245. * @depends testProcessDueCampaignItemDoesNotThrowExceptionWhenContactHasNoPrimaryEmail
  246. */
  247. public function testProcessDueCampaignItemWithCustomFromAddressAndFromName()
  248. {
  249. $email = new Email();
  250. $email->emailAddress = 'demo@zurmo.com';
  251. $contact = ContactTestHelper::createContactByNameForOwner('contact 04', $this->user);
  252. $contact->primaryEmail = $email;
  253. $this->assertTrue($contact->save());
  254. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 04',
  255. 'description',
  256. 'CustomFromName',
  257. 'custom@from.com');
  258. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  259. $campaign = CampaignTestHelper::createCampaign('campaign 04',
  260. 'subject 04',
  261. 'text content',
  262. 'html content',
  263. null,
  264. null,
  265. null,
  266. null,
  267. null,
  268. 0,
  269. $marketingList);
  270. $processed = 0;
  271. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  272. $this->processDueItem($campaignItem);
  273. $this->assertEquals(1, $campaignItem->processed);
  274. $emailMessage = $campaignItem->emailMessage;
  275. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  276. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  277. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  278. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  279. $this->assertEquals($campaign->subject, $emailMessage->subject);
  280. $this->assertContains($campaign->textContent, $emailMessage->content->textContent);
  281. $this->assertContains('/marketingLists/external/', $emailMessage->content->textContent);
  282. $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
  283. $this->assertContains($campaign->htmlContent, $emailMessage->content->htmlContent);
  284. $this->assertContains('/marketingLists/external/', $emailMessage->content->htmlContent);
  285. $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
  286. $this->assertEquals('support@zurmo.com', $emailMessage->sender->fromAddress);
  287. $this->assertEquals('Support Team', $emailMessage->sender->fromName);
  288. $this->assertEquals(1, $emailMessage->recipients->count());
  289. $recipients = $emailMessage->recipients;
  290. $this->assertEquals(strval($contact), $recipients[0]->toName);
  291. $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
  292. $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
  293. $this->assertEquals($contact->getClassId('Item'), $recipients[0]->personsOrAccounts[0]->id);
  294. $headersArray = array('zurmoItemId' => $campaignItem->id,
  295. 'zurmoItemClass' => get_class($campaignItem),
  296. 'zurmoPersonId' => $contact->getClassId('Person'));
  297. $expectedHeaders = serialize($headersArray);
  298. $this->assertEquals($expectedHeaders, $emailMessage->headers);
  299. }
  300. /**
  301. * @depends testProcessDueCampaignItemWithCustomFromAddressAndFromName
  302. */
  303. public function testProcessDueCampaignItemWithValidMergeTags()
  304. {
  305. $email = new Email();
  306. $email->emailAddress = 'demo@zurmo.com';
  307. $contact = ContactTestHelper::createContactByNameForOwner('contact 05', $this->user);
  308. $contact->primaryEmail = $email;
  309. $this->assertTrue($contact->save());
  310. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 05',
  311. 'description',
  312. 'CustomFromName',
  313. 'custom@from.com');
  314. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  315. $campaign = CampaignTestHelper::createCampaign('campaign 05',
  316. 'subject 05',
  317. 'Dr. [[FIRST^NAME]] [[LAST^NAME]]',
  318. '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]',
  319. null,
  320. null,
  321. null,
  322. null,
  323. null,
  324. null,
  325. $marketingList);
  326. $processed = 0;
  327. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  328. $this->processDueItem($campaignItem);
  329. $this->assertEquals(1, $campaignItem->processed);
  330. $emailMessage = $campaignItem->emailMessage;
  331. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  332. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  333. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  334. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  335. $this->assertEquals($campaign->subject, $emailMessage->subject);
  336. $this->assertNotEquals($campaign->textContent, $emailMessage->content->textContent);
  337. $this->assertNotEquals($campaign->htmlContent, $emailMessage->content->htmlContent);
  338. $this->assertContains('Dr. contact 05 contact 05son', $emailMessage->content->textContent);
  339. $this->assertContains('/marketingLists/external/', $emailMessage->content->textContent);
  340. $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
  341. $this->assertContains('<b>contact 05son</b>, contact 05', $emailMessage->content->htmlContent);
  342. $this->assertContains('/marketingLists/external/', $emailMessage->content->htmlContent);
  343. $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
  344. $this->assertEquals('support@zurmo.com', $emailMessage->sender->fromAddress);
  345. $this->assertEquals('Support Team', $emailMessage->sender->fromName);
  346. $this->assertEquals(1, $emailMessage->recipients->count());
  347. $recipients = $emailMessage->recipients;
  348. $this->assertEquals(strval($contact), $recipients[0]->toName);
  349. $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
  350. $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
  351. $this->assertEquals($contact->getClassId('Item'), $recipients[0]->personsOrAccounts[0]->id);
  352. $headersArray = array('zurmoItemId' => $campaignItem->id,
  353. 'zurmoItemClass' => get_class($campaignItem),
  354. 'zurmoPersonId' => $contact->getClassId('Person'));
  355. $expectedHeaders = serialize($headersArray);
  356. $this->assertEquals($expectedHeaders, $emailMessage->headers);
  357. }
  358. /**
  359. * @//depends testProcessDueCampaignItemWithValidMergeTags
  360. */
  361. public function testProcessDueCampaignItemWithAttachments()
  362. {
  363. $email = new Email();
  364. $email->emailAddress = 'demo@zurmo.com';
  365. $contact = ContactTestHelper::createContactByNameForOwner('contact 06', $this->user);
  366. $contact->primaryEmail = $email;
  367. $this->assertTrue($contact->save());
  368. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 06',
  369. 'description',
  370. 'CustomFromName',
  371. 'custom@from.com');
  372. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  373. $campaign = CampaignTestHelper::createCampaign('campaign 06',
  374. 'subject 06',
  375. 'Dr. [[FIRST^NAME]] [[LAST^NAME]]',
  376. '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]',
  377. null,
  378. null,
  379. null,
  380. null,
  381. null,
  382. null,
  383. $marketingList);
  384. $fileNames = array('testImage.png', 'testZip.zip', 'testPDF.pdf');
  385. $files = array();
  386. foreach ($fileNames as $index => $fileName)
  387. {
  388. $file = ZurmoTestHelper::createFileModel($fileName);
  389. $files[$index]['name'] = $fileName;
  390. $files[$index]['type'] = $file->type;
  391. $files[$index]['size'] = $file->size;
  392. $files[$index]['contents'] = $file->fileContent->content;
  393. $campaign->files->add($file);
  394. }
  395. $this->assertTrue($campaign->save());
  396. $processed = 0;
  397. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  398. $this->processDueItem($campaignItem);
  399. $this->assertEquals(1, $campaignItem->processed);
  400. $emailMessage = $campaignItem->emailMessage;
  401. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  402. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  403. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  404. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  405. $this->assertEquals($campaign->subject, $emailMessage->subject);
  406. $this->assertNotEquals($campaign->textContent, $emailMessage->content->textContent);
  407. $this->assertNotEquals($campaign->htmlContent, $emailMessage->content->htmlContent);
  408. $this->assertContains('Dr. contact 06 contact 06son', $emailMessage->content->textContent);
  409. $this->assertContains('/marketingLists/external/', $emailMessage->content->textContent);
  410. $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
  411. $this->assertContains('<b>contact 06son</b>, contact 06', $emailMessage->content->htmlContent);
  412. $this->assertContains('/marketingLists/external/', $emailMessage->content->htmlContent);
  413. $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
  414. $this->assertEquals('support@zurmo.com', $emailMessage->sender->fromAddress);
  415. $this->assertEquals('Support Team', $emailMessage->sender->fromName);
  416. $this->assertEquals(1, $emailMessage->recipients->count());
  417. $recipients = $emailMessage->recipients;
  418. $this->assertEquals(strval($contact), $recipients[0]->toName);
  419. $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
  420. $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
  421. $this->assertEquals($contact->getClassId('Item'), $recipients[0]->personsOrAccounts[0]->id);
  422. $this->assertNotEmpty($emailMessage->files);
  423. $this->assertCount(count($files), $emailMessage->files);
  424. foreach ($campaign->files as $index => $file)
  425. {
  426. $this->assertEquals($file->name, $emailMessage->files[$index]->name);
  427. $this->assertEquals($file->type, $emailMessage->files[$index]->type);
  428. $this->assertEquals($file->size, $emailMessage->files[$index]->size);
  429. //CampaingItem should share the Attachments content from Campaign
  430. $this->assertEquals($file->fileContent->content, $emailMessage->files[$index]->fileContent->content);
  431. }
  432. $headersArray = array('zurmoItemId' => $campaignItem->id,
  433. 'zurmoItemClass' => get_class($campaignItem),
  434. 'zurmoPersonId' => $contact->getClassId('Person'));
  435. $expectedHeaders = serialize($headersArray);
  436. $this->assertEquals($expectedHeaders, $emailMessage->headers);
  437. }
  438. /**
  439. * @depends testProcessDueCampaignItemWithAttachments
  440. */
  441. public function testGenerateCampaignItemsForDueCampaigns()
  442. {
  443. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 07');
  444. $marketingListId = $marketingList->id;
  445. for ($i = 0; $i < 5; $i++)
  446. {
  447. $contact = ContactTestHelper::createContactByNameForOwner('campaignContact ' . $i, $this->user);
  448. MarketingListMemberTestHelper::createMarketingListMember($i % 2, $marketingList, $contact);
  449. }
  450. $marketingList->forgetAll();
  451. $marketingList = MarketingList::getById($marketingListId);
  452. $campaign = CampaignTestHelper::createCampaign('campaign 07',
  453. 'subject 07',
  454. 'text 07',
  455. 'html 07',
  456. null,
  457. null,
  458. null,
  459. null,
  460. null,
  461. null,
  462. $marketingList);
  463. $this->assertNotNull($campaign);
  464. $campaign->forgetAll();
  465. $campaignId = $campaign->id;
  466. $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaignId);
  467. $this->assertEmpty($campaignItems);
  468. //Process open campaigns.
  469. Yii::app()->jobQueue->deleteAll();
  470. $this->assertCount(0, Yii::app()->jobQueue->getAll());
  471. $util = new CampaignItemsUtil();
  472. $this->assertTrue($util->generateCampaignItemsForDueCampaigns());
  473. $jobs = Yii::app()->jobQueue->getAll();
  474. $this->assertCount(1, $jobs);
  475. $this->assertEquals('CampaignQueueMessagesInOutbox', $jobs[5][0]['jobType']);
  476. $campaign = Campaign::getById($campaignId);
  477. $this->assertNotNull($campaign);
  478. $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status);
  479. $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaignId);
  480. $this->assertNotEmpty($campaignItems);
  481. $this->assertCount(5, $campaignItems);
  482. // TODO: @Shoaibi: Low: Add tests for the other campaign type.
  483. }
  484. /**
  485. * @depends testGenerateCampaignItemsForDueCampaigns
  486. */
  487. public function testProcessDueCampaignItemWithOptout()
  488. {
  489. $email = new Email();
  490. $email->emailAddress = 'demo@zurmo.com';
  491. $email->optOut = true;
  492. $contact = ContactTestHelper::createContactByNameForOwner('contact 08', $this->user);
  493. $contact->primaryEmail = $email;
  494. $this->assertTrue($contact->save());
  495. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 08',
  496. 'description',
  497. 'CustomFromName',
  498. 'custom@from.com');
  499. $campaign = CampaignTestHelper::createCampaign('campaign 08',
  500. 'subject 08',
  501. 'Dr. [[FIRST^NAME]] [[LAST^NAME]]',
  502. '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]',
  503. null,
  504. null,
  505. null,
  506. null,
  507. null,
  508. null,
  509. $marketingList);
  510. $processed = 0;
  511. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  512. $this->processDueItem($campaignItem);
  513. $this->assertEquals(1, $campaignItem->processed);
  514. $personId = $contact->getClassId('Person');
  515. $activities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(
  516. CampaignItemActivity::TYPE_SKIP,
  517. $campaignItem->id,
  518. $personId);
  519. $this->assertNotEmpty($activities);
  520. $this->assertCount(1, $activities);
  521. }
  522. /**
  523. * @depends testProcessDueCampaignItemWithOptout
  524. */
  525. public function testProcessDueCampaignItemWithReturnPathHeaders()
  526. {
  527. ZurmoConfigurationUtil::setByModuleName('EmailMessagesModule', 'bounceReturnPath', 'bounce@zurmo.com');
  528. $email = new Email();
  529. $email->emailAddress = 'demo@zurmo.com';
  530. $contact = ContactTestHelper::createContactByNameForOwner('contact 09', $this->user);
  531. $contact->primaryEmail = $email;
  532. $this->assertTrue($contact->save());
  533. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 09',
  534. 'description',
  535. 'CustomFromName',
  536. 'custom@from.com');
  537. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  538. $campaign = CampaignTestHelper::createCampaign('campaign 09',
  539. 'subject 09',
  540. 'Dr. [[FIRST^NAME]] [[LAST^NAME]]',
  541. '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]',
  542. null,
  543. null,
  544. null,
  545. null,
  546. null,
  547. null,
  548. $marketingList);
  549. $processed = 0;
  550. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  551. $this->processDueItem($campaignItem);
  552. $this->assertEquals(1, $campaignItem->processed);
  553. $emailMessage = $campaignItem->emailMessage;
  554. $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
  555. $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
  556. $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
  557. $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
  558. $this->assertEquals($campaign->subject, $emailMessage->subject);
  559. $this->assertNotEquals($campaign->textContent, $emailMessage->content->textContent);
  560. $this->assertNotEquals($campaign->htmlContent, $emailMessage->content->htmlContent);
  561. $this->assertContains('Dr. contact 09 contact 09son', $emailMessage->content->textContent);
  562. $this->assertContains('/marketingLists/external/', $emailMessage->content->textContent);
  563. $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
  564. $this->assertContains('<b>contact 09son</b>, contact 09', $emailMessage->content->htmlContent);
  565. $this->assertContains('/marketingLists/external/', $emailMessage->content->htmlContent);
  566. $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
  567. $this->assertEquals('support@zurmo.com', $emailMessage->sender->fromAddress);
  568. $this->assertEquals('Support Team', $emailMessage->sender->fromName);
  569. $this->assertEquals(1, $emailMessage->recipients->count());
  570. $recipients = $emailMessage->recipients;
  571. $this->assertEquals(strval($contact), $recipients[0]->toName);
  572. $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
  573. $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
  574. $this->assertEquals($contact->getClassId('Item'), $recipients[0]->personsOrAccounts[0]->id);
  575. $headersArray = array('zurmoItemId' => $campaignItem->id,
  576. 'zurmoItemClass' => get_class($campaignItem),
  577. 'zurmoPersonId' => $contact->getClassId('Person'),
  578. 'Return-Path' => 'bounce@zurmo.com');
  579. $expectedHeaders = serialize($headersArray);
  580. $this->assertEquals($expectedHeaders, $emailMessage->headers);
  581. }
  582. /**
  583. * @depends testProcessDueCampaignItemWithReturnPathHeaders
  584. */
  585. public function testProcessDueCampaignItemWithoutHtmlContent()
  586. {
  587. $email = new Email();
  588. $email->emailAddress = 'demo10@zurmo.com';
  589. $contact = ContactTestHelper::createContactByNameForOwner('contact 10', $this->user);
  590. $contact->primaryEmail = $email;
  591. $this->assertTrue($contact->save());
  592. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 10',
  593. 'description',
  594. 'CustomFromName',
  595. 'custom@from.com');
  596. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  597. $campaign = CampaignTestHelper::createCampaign('campaign 10',
  598. 'subject 10',
  599. 'Dr. [[FIRST^NAME]] [[LAST^NAME]]',
  600. null,
  601. null,
  602. null,
  603. false,
  604. null,
  605. null,
  606. null,
  607. $marketingList);
  608. $processed = 0;
  609. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  610. $this->processDueItem($campaignItem);
  611. $emailMessage = $campaignItem->emailMessage;
  612. $this->assertNotNull($emailMessage->content->textContent);
  613. $this->assertNull ($emailMessage->content->htmlContent);
  614. }
  615. /**
  616. * @depends testProcessDueCampaignItemWithoutHtmlContent
  617. */
  618. public function testProcessDueCampaignItemWithoutTextContent()
  619. {
  620. $email = new Email();
  621. $email->emailAddress = 'demo11@zurmo.com';
  622. $contact = ContactTestHelper::createContactByNameForOwner('contact 11', $this->user);
  623. $contact->primaryEmail = $email;
  624. $this->assertTrue($contact->save());
  625. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 11',
  626. 'description',
  627. 'CustomFromName',
  628. 'custom@from.com');
  629. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  630. $campaign = CampaignTestHelper::createCampaign('campaign 11',
  631. 'subject 11',
  632. null,
  633. '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]',
  634. null,
  635. null,
  636. null,
  637. null,
  638. null,
  639. null,
  640. $marketingList);
  641. $processed = 0;
  642. $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
  643. $this->processDueItem($campaignItem);
  644. $emailMessage = $campaignItem->emailMessage;
  645. $this->assertNull ($emailMessage->content->textContent);
  646. $this->assertNotNull($emailMessage->content->htmlContent);
  647. }
  648. /**
  649. * @depends testProcessDueCampaignItemWithoutTextContent
  650. */
  651. public function testProcessDueCampaignItemWithoutRichTextSupport()
  652. {
  653. $email = new Email();
  654. $email->emailAddress = 'demo12@zurmo.com';
  655. $contact = ContactTestHelper::createContactByNameForOwner('contact 12', $this->user);
  656. $contact->primaryEmail = $email;
  657. $this->assertTrue($contact->save());
  658. $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 12',
  659. 'description',
  660. 'CustomFromName',
  661. 'custom@from.com');
  662. MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
  663. $campaign = CampaignTestHelper::createCampaign('campaign 12',
  664. 'subject 12',

Large files files are truncated, but you can click here to view the full file