PageRenderTime 51ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/app/protected/modules/campaigns/tests/unit/walkthrough/CampaignDefaultControllerSuperUserWalkthroughTest.php

https://bitbucket.org/zurmo/zurmo/
PHP | 788 lines | 694 code | 30 blank | 64 comment | 5 complexity | b12a54a0bed7a21b1a98945c85c21ceb 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 CampaignDefaultControllerSuperUserWalkthroughTest extends ZurmoWalkthroughBaseTest
  37. {
  38. protected $user;
  39. protected $campaign;
  40. public static function setUpBeforeClass()
  41. {
  42. parent::setUpBeforeClass();
  43. SecurityTestHelper::createSuperAdmin();
  44. $super = User::getByUsername('super');
  45. Yii::app()->user->userModel = $super;
  46. EmailTemplateTestHelper::create('EmailTemplate 01', 'Subject 01', 'Contact', 'html', 'text');
  47. EmailTemplateTestHelper::create('EmailTemplate 02', 'Subject 02', 'Contact', 'html', 'text');
  48. EmailTemplateTestHelper::create('EmailTemplate 03', 'Subject 03', 'Contact', 'html', 'text');
  49. MarketingListTestHelper::createMarketingListByName('MarketingListName',
  50. 'MarketingList Description',
  51. 'first',
  52. 'first@zurmo.com');
  53. }
  54. public function setUp()
  55. {
  56. parent::setUp();
  57. $this->user = User::getByUsername('super');
  58. Yii::app()->user->userModel = $this->user;
  59. $campaigns = Campaign::getAll();
  60. if (count($campaigns) > 0)
  61. {
  62. $this->campaign = $campaigns[0];
  63. }
  64. }
  65. public function testSuperUserAllDefaultControllerActions()
  66. {
  67. // Test all default controller actions that do not require any POST/GET variables to be passed.
  68. $this->runControllerWithNoExceptionsAndGetContent('campaigns/default');
  69. $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/index');
  70. $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  71. CampaignTestHelper::createCampaign('campaign01',
  72. 'campaign subject 01',
  73. 'text content for campaign 01',
  74. 'html content for campaign 01',
  75. 'fromCampaign',
  76. 'fromCampaign@zurmo.com');
  77. CampaignTestHelper::createCampaign('campaign02',
  78. 'campaign subject 02',
  79. 'text content for campaign 02',
  80. 'html content for campaign 02',
  81. 'fromCampaign2',
  82. 'fromCampaign2@zurmo.com');
  83. $this->runControllerWithNoExceptionsAndGetContent('campaigns/default');
  84. $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/index');
  85. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  86. $compareContent = 'Campaigns will not run properly until scheduled jobs are set up. Contact your administrator.';
  87. $this->assertNotContains($compareContent, $content);
  88. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/create');
  89. $compareContent = 'Campaigns will not run properly until scheduled jobs are set up. Contact your administrator.';
  90. $this->assertContains($compareContent, $content);
  91. }
  92. /**
  93. * @depends testSuperUserAllDefaultControllerActions
  94. */
  95. public function testWhenJobsHaveRunTheFlashMessageDoesNotShowUp()
  96. {
  97. $jobLog = new JobLog();
  98. $jobLog->type = 'CampaignGenerateDueCampaignItems';
  99. $jobLog->startDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  100. $jobLog->endDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  101. $jobLog->status = JobLog::STATUS_COMPLETE_WITHOUT_ERROR;
  102. $jobLog->isProcessed = false;
  103. $this->assertTrue($jobLog->save());
  104. $jobLog = new JobLog();
  105. $jobLog->type = 'CampaignMarkCompleted';
  106. $jobLog->startDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  107. $jobLog->endDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  108. $jobLog->status = JobLog::STATUS_COMPLETE_WITHOUT_ERROR;
  109. $jobLog->isProcessed = false;
  110. $this->assertTrue($jobLog->save());
  111. $jobLog = new JobLog();
  112. $jobLog->type = 'CampaignQueueMessagesInOutbox';
  113. $jobLog->startDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  114. $jobLog->endDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  115. $jobLog->status = JobLog::STATUS_COMPLETE_WITHOUT_ERROR;
  116. $jobLog->isProcessed = false;
  117. $this->assertTrue($jobLog->save());
  118. $jobLog = new JobLog();
  119. $jobLog->type = 'ProcessOutboundEmail';
  120. $jobLog->startDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  121. $jobLog->endDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
  122. $jobLog->status = JobLog::STATUS_COMPLETE_WITHOUT_ERROR;
  123. $jobLog->isProcessed = false;
  124. $this->assertTrue($jobLog->save());
  125. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/create');
  126. $compareContent = 'Campaigns will not run properly until scheduled jobs are set up. Contact your administrator.';
  127. $this->assertNotContains($compareContent, $content);
  128. }
  129. /**
  130. * @depends testWhenJobsHaveRunTheFlashMessageDoesNotShowUp
  131. */
  132. public function testSuperUserListAction()
  133. {
  134. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  135. $this->assertContains('anyMixedAttributes', $content);
  136. $this->assertContains('campaign01', $content);
  137. $this->assertContains('campaign02', $content);
  138. $this->assertContains('Scheduled', $content);
  139. //Test the search or paging of the listview.
  140. Yii::app()->clientScript->reset(); //to make sure old js doesn't make it to the UI
  141. $this->setGetArray(array('ajax' => 'list-view'));
  142. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  143. $this->assertNotContains('anyMixedAttributes', $content);
  144. }
  145. /**
  146. * @depends testSuperUserAllDefaultControllerActions
  147. */
  148. public function testSuperUserListSearchAction()
  149. {
  150. StickyReportUtil::clearDataByKey('CampaignsSearchForm');
  151. $this->setGetArray(array(
  152. 'CampaignsSearchForm' => array(
  153. 'anyMixedAttributesScope' => array('All'),
  154. 'anyMixedAttributes' => 'xyz',
  155. ) ,
  156. ));
  157. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  158. $this->assertContains('No results found', $content);
  159. StickyReportUtil::clearDataByKey('CampaignsSearchForm');
  160. $this->setGetArray(array(
  161. 'CampaignsSearchForm' => array(
  162. 'anyMixedAttributesScope' => array('All'),
  163. 'anyMixedAttributes' => 'camp',
  164. ) ,
  165. ));
  166. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  167. $this->assertContains('2 result(s)', $content);
  168. $this->assertContains('Status</a></th>', $content);
  169. $this->assertEquals(1, substr_count($content, 'campaign01'));
  170. $this->assertEquals(1, substr_count($content, 'campaign02'));
  171. $this->assertEquals(2, substr_count($content, 'Scheduled'));
  172. StickyReportUtil::clearDataByKey('CampaignsSearchForm');
  173. $this->setGetArray(array(
  174. 'CampaignsSearchForm' => array(
  175. 'anyMixedAttributesScope' => array('All'),
  176. 'anyMixedAttributes' => 'campaign',
  177. 'selectedListAttributes' => array('name', 'status', 'createdByUser', 'fromAddress', 'fromName'),
  178. ) ,
  179. ));
  180. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  181. $this->assertContains('2 result(s)', $content);
  182. $this->assertContains('Status</a></th>', $content);
  183. $this->assertEquals(1, substr_count($content, 'campaign01'));
  184. $this->assertEquals(1, substr_count($content, 'campaign02'));
  185. $this->assertEquals(2, substr_count($content, 'Scheduled'));
  186. $this->assertEquals(3, substr_count($content, 'Clark Kent'));
  187. $this->assertEquals(4, substr_count($content, '@zurmo.com'));
  188. $this->assertEquals(6, substr_count($content, 'fromCampaign'));
  189. $this->assertEquals(3, substr_count($content, 'fromCampaign2'));
  190. $this->assertEquals(2, substr_count($content, 'fromCampaign@zurmo.com'));
  191. $this->assertEquals(2, substr_count($content, 'fromCampaign2@zurmo.com'));
  192. StickyReportUtil::clearDataByKey('CampaignsSearchForm');
  193. $this->setGetArray(array(
  194. 'clearingSearch' => 1,
  195. 'CampaignsSearchForm' => array(
  196. 'anyMixedAttributesScope' => array('All'),
  197. 'anyMixedAttributes' => '',
  198. 'selectedListAttributes' => array('name', 'status', 'createdByUser', 'fromAddress', 'fromName'),
  199. 'dynamicClauses' => array(array(
  200. 'attributeIndexOrDerivedType' => 'fromAddress',
  201. 'structurePosition' => 1,
  202. 'fromAddress' => 'fromCampaign2@zurmo.com',
  203. )),
  204. 'dynamicStructure' => '1',
  205. ) ,
  206. ));
  207. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  208. $this->assertContains('1 result(s)', $content);
  209. $this->assertContains('Status</a></th>', $content);
  210. $this->assertEquals(1, substr_count($content, 'campaign02'));
  211. $this->assertEquals(1, substr_count($content, 'Scheduled'));
  212. $this->assertEquals(2, substr_count($content, 'Clark Kent'));
  213. $this->assertEquals(2, substr_count($content, '@zurmo.com'));
  214. $this->assertEquals(8, substr_count($content, 'fromCampaign2'));
  215. $this->assertEquals(2, substr_count($content, 'fromCampaign2@zurmo.com'));
  216. StickyReportUtil::clearDataByKey('CampaignsSearchForm');
  217. $this->setGetArray(array(
  218. 'clearingSearch' => 1,
  219. 'CampaignsSearchForm' => array(
  220. 'anyMixedAttributesScope' => array('All'),
  221. 'anyMixedAttributes' => '',
  222. 'selectedListAttributes' => array('name', 'status', 'createdByUser', 'fromAddress', 'fromName'),
  223. 'dynamicClauses' => array(array(
  224. 'attributeIndexOrDerivedType' => 'fromName',
  225. 'structurePosition' => 1,
  226. 'fromName' => 'fromCampaign2',
  227. )),
  228. 'dynamicStructure' => '1',
  229. ) ,
  230. ));
  231. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/list');
  232. $this->assertContains('1 result(s)', $content);
  233. $this->assertContains('Status</a></th>', $content);
  234. $this->assertEquals(1, substr_count($content, 'campaign02'));
  235. $this->assertEquals(1, substr_count($content, 'Scheduled'));
  236. $this->assertEquals(2, substr_count($content, 'Clark Kent'));
  237. $this->assertEquals(2, substr_count($content, '@zurmo.com'));
  238. $this->assertEquals(8, substr_count($content, 'fromCampaign2'));
  239. $this->assertEquals(2, substr_count($content, 'fromCampaign2@zurmo.com'));
  240. }
  241. /**
  242. * @depends testSuperUserListAction
  243. */
  244. public function testSuperUserCreateAction()
  245. {
  246. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/create');
  247. $this->assertContains('<title>ZurmoCRM - Campaigns</title>', $content);
  248. $this->assertContains('<div id="MarketingBreadCrumbView" class="BreadCrumbView">' .
  249. '<div class="breadcrumbs">', $content);
  250. $this->assertContains('<div class="AppContent GridView">', $content);
  251. $this->assertContains('/marketing/default/index">Marketing</a>', $content);
  252. $this->assertContains('/campaigns/default/list">Campaigns</a>', $content);
  253. $this->assertContains('<span>Create</span></div></div>', $content);
  254. $this->assertContains('<div id="CampaignEditView" class="SecuredEditView EditView DetailsView' .
  255. ' ModelView ConfigurableMetadataView MetadataView">', $content);
  256. $this->assertContains('<div class="wrapper">', $content);
  257. $this->assertContains('<h1><span class="truncated-title"><span class="ellipsis-content">' .
  258. 'Create Campaign</span></span></h1>', $content);
  259. $this->assertContains('<div class="wide form">', $content);
  260. $this->assertContains('<div class="attributesContainer">', $content);
  261. $this->assertContains('<div class="left-column"><div class="panel">', $content);
  262. $this->assertContains('<tr><th><label for="Campaign_name" class="required">Name '.
  263. '<span class="required">*</span></label></th>', $content);
  264. $this->assertContains('<td colspan="1"><input id="Campaign_name" name="Campaign[name]" ' .
  265. 'type="text" maxlength="64"', $content);
  266. $this->assertContains('</tr><tr><th><label for="Campaign_marketingList_id" class="required">' .
  267. 'Marketing List <span class="required">*</span></label></th>', $content);
  268. $this->assertContains('<td colspan="1"><input name="Campaign[marketingList][id]" ' .
  269. 'id="Campaign_marketingList_id" value="" type="hidden"', $content);
  270. $this->assertContains('<div class="has-model-select">', $content);
  271. $this->assertContains('id="Campaign_marketingList_name" type="text" value="" '.
  272. 'name="Campaign_marketingList_name"', $content);
  273. $this->assertContains('<a id="Campaign_marketingList_SelectLink" href="#"><span class="' .
  274. 'model-select-icon"></span><span class="z-spinner"></span></a>', $content);
  275. $this->assertContains('<tr><th><label for="Campaign_fromName" class="required">From Name ' .
  276. '<span class="required">*</span></label></th>', $content);
  277. $this->assertContains('<td colspan="1"><input id="Campaign_fromName" name="Campaign[fromName]" ' .
  278. 'type="text" maxlength="64"', $content);
  279. $this->assertContains('<tr><th><label for="Campaign_fromAddress" class="required">From Address ' .
  280. '<span class="required">*</span></label></th>', $content);
  281. $this->assertContains('<td colspan="1"><input id="Campaign_fromAddress" ' .
  282. 'name="Campaign[fromAddress]" type="text" maxlength="64"', $content);
  283. $this->assertContains('<tr><th><label for="Campaign_sendOnDateTime" class="required">Send On ' .
  284. '<span class="required">*</span></label></th>', $content);
  285. $this->assertContains('<td colspan="1"><div class="has-date-select"><input ' .
  286. 'id="Campaign_sendOnDateTime" name="Campaign[sendOnDateTime]" ' .
  287. 'style="position:relative;z-index:10000;" type="text" ', $content);
  288. $this->assertContains('</tr><tr><th><label for="Campaign_subject" class="required">Subject ' .
  289. '<span class="required">*</span></label></th>', $content);
  290. $this->assertContains('<td colspan="1"><input id="Campaign_subject" name="Campaign[subject]" ' .
  291. 'type="text" maxlength="255"', $content);
  292. $this->assertContains('<tr><th>Enable Tracking<span id="enable-tracking-tooltip" ' .
  293. 'class="tooltip" title="Check to track when recipients open ' .
  294. 'an email or click any links.">?</span></th>', $content);
  295. $this->assertContains('<td colspan="1"><input id="ytCampaign_enableTracking" type="hidden" ' .
  296. 'value="0" name="Campaign[enableTracking]"', $content);
  297. $this->assertContains('<label class="hasCheckBox c_on"><input id="Campaign_enableTracking" ' .
  298. 'name="Campaign[enableTracking]" value="1" checked="checked" ' .
  299. 'type="checkbox"', $content);
  300. $this->assertContains('<tr><th>Support HTML<span id="support-rich-text-tooltip" ' .
  301. 'class="tooltip" title="When checked, email will be sent in both text' .
  302. ' and HTML format. Uncheck to only send text emails">' .
  303. '?</span></th>', $content);
  304. $this->assertContains('<td colspan="1"><input id="ytCampaign_supportsRichText" type="hidden"' .
  305. ' value="0" name="Campaign[supportsRichText]"', $content);
  306. $this->assertContains('<label class="hasCheckBox c_on"><input id="Campaign_supportsRichText"' .
  307. ' name="Campaign[supportsRichText]" value="1" checked="checked"' .
  308. ' type="checkbox"', $content);
  309. $this->assertContains('<tr><th><label for="Campaign_contactEmailTemplateNames_name">Select a template</label></th>', $content);
  310. $this->assertContains('<td colspan="1"><div class="has-model-select"><input name=""' .
  311. ' id="Campaign_contactEmailTemplateNames_id"' .
  312. ' value="" type="hidden" />', $content);
  313. $this->assertContains('<input onblur="clearIdFromAutoCompleteField($(this).val(), &#039;' .
  314. 'Campaign_contactEmailTemplateNames_id&#039;);" id="Campaign_contact' .
  315. 'EmailTemplateNames_name" type="text" value="" ' .
  316. 'name="" />', $content);
  317. $this->assertContains('<a id="Campaign_contactEmailTemplateNames_SelectLink" href="#">' .
  318. '<span class="model-select-icon"></span><span class="z-spinner">' .
  319. '</span></a></div></td></tr>', $content);
  320. $this->assertContains('<tr><th><label>Attachments</label></th>', $content);
  321. $this->assertContains('<div class="fileupload-buttonbar clearfix">', $content);
  322. $this->assertContains('<div class="addfileinput-button"><span>Y</span>', $content);
  323. $this->assertContains('<strong class="add-label">Add Files</strong>', $content);
  324. $this->assertContains('<input id="Campaign_files" multiple="multiple" type="file" name="Campaign_files"', $content);
  325. $this->assertContains('<div class="fileupload-content">', $content);
  326. $this->assertContains('<table class="files">', $content);
  327. $this->assertContains('<div class="right-column">', $content);
  328. $this->assertContains('<div class="email-template-combined-content', $content);
  329. $this->assertContains('<div class="email-template-content"><div class="tabs-nav">', $content);
  330. $this->assertContains('<a href="#tab1">Text Content</a>', $content);
  331. $this->assertContains('<a class="active-tab" href="#tab2">Html Content</a>', $content);
  332. $this->assertContains('class="simple-link" href="#">MergeTag Guide</a></div>', $content);
  333. $this->assertContains('<div id="tab1" class=" tab email-template-textContent">', $content);
  334. $this->assertContains('<th><label for="Campaign_textContent">Text Content</label></th>', $content);
  335. $this->assertContains('<td colspan="1"><textarea id="Campaign_textContent" ' .
  336. 'name="Campaign[textContent]" rows="6" cols="50">' .
  337. '</textarea></td></div>', $content);
  338. $this->assertContains('<div id="tab2" class="active-tab tab email-template-htmlContent">' .
  339. '<label for="Campaign_htmlContent">Html Content</label>', $content);
  340. $this->assertContains('<textarea id="Campaign_htmlContent" name="Campaign[htmlContent]"', $content);
  341. $this->assertContains('<div class="float-bar"><div class="view-toolbar-container ' .
  342. 'clearfix dock"><div class="form-toolbar">', $content);
  343. $this->assertContains('/campaigns/default"><span class="z-label">Cancel</span></a>', $content);
  344. $this->assertContains('Save and Schedule', $content);
  345. $this->assertContains('<div id="modalContainer-edit-form">', $content);
  346. $this->setPostArray(array('Campaign' => array(
  347. 'name' => '',
  348. 'marketingList' => array('id' => ''),
  349. 'fromName' => '',
  350. 'fromAddress' => '',
  351. 'sendOnDateTime' => '',
  352. 'subject' => '',
  353. 'enableTracking' => '',
  354. 'supportsRichText' => '',
  355. 'textContent' => '',
  356. 'htmlContent' => '',
  357. )));
  358. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/create');
  359. $this->assertContains('<div class="errorSummary"><p>Please fix the following' .
  360. ' input errors:</p>', $content);
  361. $this->assertContains('<li>Name cannot be blank.</li>', $content);
  362. $this->assertEquals(1, substr_count($content, '<li>Name cannot be blank.</li>'));
  363. $this->assertContains('<li>Marketing List cannot be blank.</li>', $content);
  364. $this->assertContains('<li>Supports HTML cannot be blank.</li>', $content);
  365. $this->assertContains('<li>Send On cannot be blank.</li>', $content);
  366. $this->assertContains('<li>From Name cannot be blank.</li>', $content);
  367. $this->assertContains('<li>From Address cannot be blank.</li>', $content);
  368. $this->assertContains('<li>Subject cannot be blank.</li>', $content);
  369. $this->assertContains('<li>Please provide at least one of the contents field.</li>', $content);
  370. $this->assertContains('<tr><th><label class="error required" for="Campaign_name">Name ' .
  371. '<span class="required">*</span></label></th>', $content);
  372. $this->assertContains('<td colspan="1"><input id="Campaign_name" name="Campaign[name]" ' .
  373. 'type="text" maxlength="64" value="" class="error"', $content);
  374. $this->assertContains('<tr><th><label class="error required" for="Campaign_marketingList_id">' .
  375. 'Marketing List <span class="required">*</span></label></th>', $content);
  376. $this->assertContains('<tr><th><label class="error required" for="Campaign_fromName">From Name' .
  377. ' <span class="required">*</span></label></th>', $content);
  378. $this->assertContains('<td colspan="1"><input id="Campaign_fromName" name="Campaign[fromName]"' .
  379. ' type="text" maxlength="64" value="" class="error"', $content);
  380. $this->assertContains('<tr><th><label class="error required" for="Campaign_fromAddress">From' .
  381. ' Address <span class="required">*</span></label></th>', $content);
  382. $this->assertContains('<td colspan="1"><input id="Campaign_fromAddress" name="Campaign' .
  383. '[fromAddress]" type="text" maxlength="64" ' .
  384. 'value="" class="error"', $content);
  385. $this->assertContains('<tr><th><label class="error required" for="Campaign_sendOnDateTime">' .
  386. 'Send On <span class="required">*</span></label></th>', $content);
  387. $this->assertContains('<tr><th><label class="error required" for="Campaign_subject">Subject ' .
  388. '<span class="required">*</span></label></th>', $content);
  389. $this->assertContains('<td colspan="1"><input id="Campaign_subject" name="Campaign[subject]" '.
  390. 'type="text" maxlength="255" value="" class="error"', $content);
  391. $this->assertContains('<input id="Campaign_supportsRichText" name="Campaign[supportsRichText]"' .
  392. ' value="1" type="checkbox" class="error"', $content);
  393. $marketingListId = self::getModelIdByModelNameAndName('MarketingList', 'MarketingListName');
  394. $this->setPostArray(array('Campaign' => array(
  395. 'name' => 'New Campaign using Create',
  396. 'marketingList' => array('id' => $marketingListId),
  397. 'fromName' => 'Zurmo Sales',
  398. 'fromAddress' => 'sales@zurmo.com',
  399. 'sendOnDateTime' => '6/13/2013 10:54 AM',
  400. 'subject' => 'New Campaign using Create Subject',
  401. 'enableTracking' => '1',
  402. 'supportsRichText' => '0',
  403. 'textContent' => 'Text',
  404. 'htmlContent' => 'Html',
  405. )));
  406. $redirectUrl = $this->runControllerWithRedirectExceptionAndGetUrl('campaigns/default/create');
  407. $campaign = Campaign::getByName('New Campaign using Create');
  408. $this->assertEquals(1, count($campaign));
  409. $this->assertTrue ($campaign[0]->id > 0);
  410. $this->assertEquals('sales@zurmo.com', $campaign[0]->fromAddress);
  411. $this->assertEquals('Zurmo Sales', $campaign[0]->fromName);
  412. $this->assertEquals('New Campaign using Create Subject', $campaign[0]->subject);
  413. $this->assertEquals('1', $campaign[0]->enableTracking);
  414. $this->assertEquals('0', $campaign[0]->supportsRichText);
  415. $this->assertEquals('Text', $campaign[0]->textContent);
  416. $this->assertEquals('Html', $campaign[0]->htmlContent);
  417. $this->assertEquals(DateTimeUtil::convertTimestampToDbFormatDateTime(strtotime('6/13/13 10:54 AM')),
  418. $campaign[0]->sendOnDateTime);
  419. $this->assertEquals($marketingListId, $campaign[0]->marketingList->id);
  420. $this->assertTrue ($campaign[0]->owner == $this->user);
  421. $compareRedirectUrl = Yii::app()->createUrl('campaigns/default/details', array('id' => $campaign[0]->id));
  422. $this->assertEquals($compareRedirectUrl, $redirectUrl);
  423. $campaigns = Campaign::getAll();
  424. $this->assertEquals(3, count($campaigns));
  425. }
  426. /**
  427. * @depends testSuperUserCreateAction
  428. */
  429. public function testSuperUserDetailsAction()
  430. {
  431. $campaignId = self::getModelIdByModelNameAndName ('Campaign', 'New Campaign using Create');
  432. $this->setGetArray(array('id' => $campaignId));
  433. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/details');
  434. $this->assertContains('<title>ZurmoCRM - Campaigns</title>', $content);
  435. $this->assertContains('<div id="MarketingStickyDetailsAndRelationsBreadCrumbView" ' .
  436. 'class="StickyDetailsAndRelationsBreadCrumbView ' .
  437. 'BreadCrumbView">', $content);
  438. $this->assertContains('<div class="breadcrumbs">', $content);
  439. $this->assertContains('/marketing/default/index">Marketing</a>', $content);
  440. $this->assertContains('/campaigns/default/list">Campaigns</a>', $content);
  441. $this->assertContains('<span>New Campaign using Create</span></div></div>', $content);
  442. $this->assertContains('<div id="CampaignDetailsAndRelationsView" class="single-column ' .
  443. 'DetailsAndRelationsView ConfigurableMetadataView' .
  444. ' MetadataView">', $content);
  445. $this->assertContains('<div class="GridView">', $content);
  446. $this->assertContains('<div id="CampaignDetailsView" class="SecuredDetailsView DetailsView ' .
  447. 'ModelView ConfigurableMetadataView MetadataView">', $content);
  448. $this->assertContains('<h1><span class="truncated-title"><span class="ellipsis-content">New '.
  449. 'Campaign using Create - Campaign</span></span></h1>', $content);
  450. $this->assertContains('<div class="view-toolbar-container clearfix"><nav class="pillbox clearfix">' .
  451. '<div id="ListViewDetailsActionMenu" class="default-button">', $content);
  452. $this->assertContains('<div id="CampaignDetailsOverlayView" class="overlay-view SecuredDetailsView '.
  453. 'DetailsView ModelView ConfigurableMetadataView '.
  454. 'MetadataView">', $content);
  455. $this->assertContains('<div class="campaign-description"><strong>Send On: 6/13/13 ' .
  456. '10:54 AM</strong>', $content);
  457. $this->assertContains('<strong>Subject: New Campaign using Create Subject</strong></div>', $content);
  458. $this->assertContains('<p class="after-form-details-content">', $content);
  459. $this->assertContains('EditLinkActionElement', $content);
  460. $this->assertContains('CampaignDeleteLinkActionElement', $content);
  461. $this->assertContains('<div class="ModelRelationsSecuredPortletFrameView SecuredPortlet' .
  462. 'FrameView PortletFrameView MetadataView">', $content);
  463. $this->assertContains('<div class="juiportlet-columns"> ', $content);
  464. $this->assertContains('<ul class="juiportlet-columns-CampaignDetailsAndRelationsViewLeft' .
  465. 'BottomView juiportlet-widget-column1 juiportlet-column juiportlet-column-no-split">', $content);
  466. $this->assertContains('<li class="juiportlet-widget CampaignOverallMetricsView type-campaigns" id="Campaign' .
  467. 'DetailsAndRelationsViewLeftBottomView', $content);
  468. $this->assertContains('<div class="juiportlet-widget-head">', $content);
  469. $this->assertContains('<h3>Campaign Dashboard</h3><div class="portlet-actions-container"><ul class="options-menu '.
  470. 'edit-portlet-menu nav">', $content);
  471. $this->assertContains('<li class="parent last"><a href="javascript:void(0);">' .
  472. '<span></span></a>', $content);
  473. $this->assertContains('<li class="last"><a class="edit" id="CampaignDetailsAndRelations' .
  474. 'ViewLeftBottomView', $content);
  475. $this->assertContains('" href="#"><span>Configure Portlet</span></a></li>', $content);
  476. $this->assertContains('<div class="juiportlet-widget-content" >', $content);
  477. $this->assertContains('<div id="CampaignOverallMetricsView" class="MarketingMetricsView ' .
  478. 'ConfigurableMetadataView MetadataView">', $content);
  479. $this->assertContains('<div class="left-column full-width metrics-details ' .
  480. 'campaign-metrics-container">', $content);
  481. $this->assertContains('<h3>What is going on with this campaign?</h3>', $content);
  482. $this->assertContains('<form id="marketing-metrics-group-by-configuration-form-CampaignDetails' .
  483. 'AndRelationsViewLeftBottomView', $content);
  484. $this->assertContains('action="/app/test/index.php/somewhereForTheTest" ' .
  485. 'method="post">', $content);
  486. $this->assertContains('<div id="marketing-metrics-group-by-configuration-form-CampaignDetails' .
  487. 'AndRelationsViewLeftBottomView', $content);
  488. $this->assertContains('<th><label for="ytMarketingOverallMetricsForm_groupBy">Group By' .
  489. '</label></th>', $content);
  490. $this->assertContains('<td colspan="1"><input type="hidden" value="" name="marketingMetrics' .
  491. 'GroupByNotUsedName" id="marketingMetricsGroupByNotUsedName"', $content);
  492. $this->assertContains('<div class="pills"><a data-value="Day" class="marketing-metrics-group-' .
  493. 'by-configuration-form-CampaignDetailsAnd' .
  494. 'RelationsViewLeftBottomView', $content);
  495. $this->assertContains('<a data-value="Week" class="marketing-metrics-group-by-configuration-'.
  496. 'form-CampaignDetailsAndRelationsViewLeftBottomView', $content);
  497. $this->assertContains('marketingMetricsGroupByLink active" href="#">Week</a>', $content);
  498. $this->assertContains('<a data-value="Month" class="marketing-metrics-group-by-configuration' .
  499. '-form-CampaignDetailsAndRelationsViewLeftBottomView', $content);
  500. $this->assertContains('marketingMetricsGroupByLink" href="#">Month</a></div>', $content);
  501. $this->assertContains('<div class="graph-container clearfix">', $content);
  502. $this->assertContains('<div class="half marketing-graph">', $content);
  503. $this->assertContains('<h3>Overall Campaign Performance</h3>', $content);
  504. $this->assertContains("<div id='chartContainerCampaignDetailsAndRelationsView" .
  505. "LeftBottomView", $content);
  506. $this->assertContains("OverallListPerformance' style='width: 100%; " .
  507. "height: 400px;'></div>", $content);
  508. $this->assertContains('<h3>Emails in this Campaign</h3>', $content);
  509. $this->assertContains("<div id='chartContainerCampaignDetailsAndRelationsView" .
  510. "LeftBottomView", $content);
  511. $this->assertContains("EmailsInThisList' style='width: 100%; " .
  512. "height: 400px;'></div>", $content);
  513. $this->assertContains('<li class="juiportlet-widget CampaignItemsRelatedListView type-campaigns" ' .
  514. 'id="CampaignDetailsAndRelationsViewLeftBottomView', $content);
  515. $this->assertContains('<div class="juiportlet-widget-head">', $content);
  516. $this->assertContains('<h3>Email Recipients</h3>', $content);
  517. $this->assertContains('<div class="juiportlet-widget-content" ', $content);
  518. $this->assertContains('<div class="CampaignItemsRelatedListView RelatedListView ListView ' .
  519. 'ModelView ConfigurableMetadataView MetadataView">', $content);
  520. $this->assertContains('<div class="campaign-items-container">', $content);
  521. $this->assertContains('<div class="cgrid-view type-campaigns" id="list-viewCampaignDetailsAndRelations' .
  522. 'ViewLeftBottomView', $content);
  523. $this->assertContains('Email recipients will appear here once the campaign begins ' .
  524. 'sending out', $content);
  525. }
  526. /**
  527. * @depends testSuperUserCreateAction
  528. */
  529. public function testSuperUserEditAction()
  530. {
  531. $campaigns = Campaign::getAll();
  532. $this->assertEquals(3, count($campaigns));
  533. $marketingListId = self::getModelIdByModelNameAndName('MarketingList', 'MarketingListName');
  534. $campaignId = self::getModelIdByModelNameAndName ('Campaign', 'New Campaign using Create');
  535. $this->setGetArray(array('id' => $campaignId));
  536. $content = $this->runControllerWithNoExceptionsAndGetContent('campaigns/default/edit');
  537. $this->assertContains('<title>ZurmoCRM - Campaigns</title>', $content);
  538. $this->assertContains('<div id="MarketingBreadCrumbView" class="BreadCrumbView">' .
  539. '<div class="breadcrumbs">', $content);
  540. $this->assertContains('/marketing/default/index">Marketing</a>', $content);
  541. $this->assertContains('/campaigns/default/list">Campaigns</a>', $content);
  542. $this->assertContains('<span>New Campaign using Create</span></div></div>', $content);
  543. $this->assertContains('<div id="CampaignEditView" class="SecuredEditView EditView DetailsView' .
  544. ' ModelView ConfigurableMetadataView MetadataView">', $content);
  545. $this->assertContains('<h1><span class="truncated-title"><span class="ellipsis-content">New ' .
  546. 'Campaign using Create</span></span></h1>', $content);
  547. $this->assertContains('<div class="wide form">', $content);
  548. $this->assertContains('<div class="attributesContainer">', $content);
  549. $this->assertContains('<div class="left-column"><div class="panel">', $content);
  550. $this->assertContains('<th><label for="Campaign_name" class="required">Name <span class=' .
  551. '"required">*</span></label></th>', $content);
  552. $this->assertContains('<td colspan="1"><input id="Campaign_name" name="Campaign[name]" ' .
  553. 'type="text" maxlength="64" value="New Campaign using Create"', $content);
  554. $this->assertContains('<th><label for="Campaign_marketingList_id" class="required">Marketing ' .
  555. 'List <span class="required">*</span></label></th>', $content);
  556. $this->assertContains('<td colspan="1"><input name="Campaign[marketingList][id]" ' .
  557. 'id="Campaign_marketingList_id" value="' . $marketingListId .
  558. '" type="hidden"', $content);
  559. $this->assertContains('<a id="Campaign_marketingList_SelectLink" href="#"><span ' .
  560. 'class="model-select-icon"></span>', $content);
  561. $this->assertContains('<th><label for="Campaign_fromName" class="required">From Name ' .
  562. '<span class="required">*</span></label></th>', $content);
  563. $this->assertContains('<td colspan="1"><input id="Campaign_fromName" name="Campaign[fromName]" ' .
  564. 'type="text" maxlength="64" value="Zurmo Sales"', $content);
  565. $this->assertContains('<th><label for="Campaign_fromAddress" class="required">From Address ' .
  566. '<span class="required">*</span></label></th>', $content);
  567. $this->assertContains('<td colspan="1"><input id="Campaign_fromAddress" ' .
  568. 'name="Campaign[fromAddress]" type="text" maxlength="64" ' .
  569. 'value="sales@zurmo.com"', $content);
  570. $this->assertContains('<th><label for="Campaign_sendOnDateTime" class="required">Send On ' .
  571. '<span class="required">*</span></label></th>', $content);
  572. $this->assertContains('<td colspan="1"><div class="has-date-select"><input ' .
  573. 'id="Campaign_sendOnDateTime" name="Campaign[sendOnDateTime]" ' .
  574. 'style="position:relative;z-index:10000;" type="text" ' .
  575. 'value="6/13/2013 10:54 AM"', $content);
  576. $this->assertContains('<th><label for="Campaign_subject" class="required">Subject ' .
  577. '<span class="required">*</span></label></th>', $content);
  578. $this->assertContains('<td colspan="1"><input id="Campaign_subject" name="Campaign[subject]" ' .
  579. 'type="text" maxlength="255" value="New Campaign ' .
  580. 'using Create Subject"', $content);
  581. $this->assertContains('<tr><th>Enable Tracking<span id="enable-tracking-tooltip" ' .
  582. 'class="tooltip" title="Check to track when recipients open ' .
  583. 'an email or click any links.">?</span></th>', $content);
  584. $this->assertContains('<td colspan="1"><input id="ytCampaign_enableTracking" type="hidden" ' .
  585. 'value="0" name="Campaign[enableTracking]"', $content);
  586. $this->assertContains('<label class="hasCheckBox c_on"><input id="Campaign_enableTracking" ' .
  587. 'name="Campaign[enableTracking]" value="1" checked="checked" ' .
  588. 'type="checkbox"', $content);
  589. $this->assertContains('<th>Support HTML<span id="support-rich-text-tooltip" class="tooltip" '.
  590. 'title="When checked, email will be sent in both text and HTML format. ' .
  591. ' Uncheck to only send text emails">?</span></th>', $content);
  592. $this->assertContains('<td colspan="1"><input id="ytCampaign_supportsRichText" type="hidden" ' .
  593. 'value="0" name="Campaign[supportsRichText]"', $content);
  594. $this->assertContains('<label class="hasCheckBox"><input id="Campaign_supportsRichText" ' .
  595. 'name="Campaign[supportsRichText]" value="1" type="checkbox"', $content);
  596. $this->assertContains('<tr><th><label for="Campaign_contactEmailTemplateNames_name">Select a template</label></th>', $content);
  597. $this->assertContains('<td colspan="1"><div class="has-model-select"><input name=""' .
  598. ' id="Campaign_contactEmailTemplateNames_id"' .
  599. ' value="" type="hidden" />', $content);
  600. $this->assertContains('<input onblur="clearIdFromAutoCompleteField($(this).val(), &#039;' .
  601. 'Campaign_contactEmailTemplateNames_id&#039;);" id="Campaign_contact' .
  602. 'EmailTemplateNames_name" type="text" value="" ' .
  603. 'name="" />', $content);
  604. $this->assertContains('<a id="Campaign_contactEmailTemplateNames_SelectLink" href="#">' .
  605. '<span class="model-select-icon"></span><span class="z-spinner">' .
  606. '</span></a></div></td></tr>', $content);
  607. $this->assertContains('<th><label>Attachments</label></th>', $content);
  608. $this->assertContains('<div class="fileupload-buttonbar clearfix">', $content);
  609. $this->assertContains('<div class="addfileinput-button"><span>Y</span>', $content);
  610. $this->assertContains('<strong class="add-label">Add Files</strong>', $content);
  611. $this->assertContains('<input id="Campaign_files" multiple="multiple" type="file" name="Campaign_files"', $content);
  612. $this->assertContains('<div class="fileupload-content"><table class="files">', $content);
  613. $this->assertContains('<div class="right-column">', $content);
  614. $this->assertContains('<div class="email-template-combined-content', $content);
  615. $this->assertContains('<div class="email-template-content"><div class="tabs-nav">', $content);
  616. $this->assertContains('<a href="#tab1">Text Content</a>', $content);
  617. $this->assertContains('<a class="active-tab" href="#tab2">Html Content</a>', $content);
  618. $this->assertContains('<div id="tab1" class=" tab email-template-' .
  619. 'textContent"><th>', $content);
  620. $this->assertContains('<label for="Campaign_textContent">Text Content</label></th>', $content);
  621. $this->assertContains('<td colspan="1"><textarea id="Campaign_textContent" ' .
  622. 'name="Campaign[textContent]" rows="6" cols="50">Text' .
  623. '</textarea></td></div>', $content);
  624. $this->assertContains('<div id="tab2" class="active-tab tab email-template-htmlContent">' .
  625. '<label for="Campaign_htmlContent">Html Content</label>', $content);
  626. $this->assertContains('<textarea id="Campaign_htmlContent" name="Campaign[htmlContent]"', $content);
  627. $marketingList = MarketingListTestHelper::createMarketingListByName('MarketingListName2',
  628. 'MarketingList Description',
  629. 'second',
  630. 'second@zurmo.com');
  631. $this->setPostArray(array('Campaign' => array(
  632. 'name' => 'New Campaign',
  633. 'marketingList' => array('id' => $marketingList->id),
  634. 'fromName' => 'Zurmo Support',
  635. 'fromAddress' => 'support@zurmo.com',
  636. 'sendOnDateTime' => '5/14/2013 10:54 AM',
  637. 'subject' => 'New Campaign Subject',
  638. 'enableTracking' => '0',
  639. 'supportsRichText' => '1',
  640. 'textContent' => 'Text Content',
  641. 'htmlContent' => 'Html Content',
  642. )));
  643. $redirectUrl = $this->runControllerWithRedirectExceptionAndGetUrl('campaigns/default/edit');
  644. $campaign = Campaign::getByName('New Campaign');
  645. $this->assertEquals(1, count($campaign));
  646. $this->assertTrue ($campaign[0]->id > 0);
  647. $this->assertEquals('support@zurmo.com', $campaign[0]->fromAddress);
  648. $this->assertEquals('Zurmo Support', $campaign[0]->fromName);
  649. $this->assertEquals('New Campaign Subject', $campaign[0]->subject);
  650. $this->assert

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