Merge pull request #6421 from lcdservices/CRM-16968
[civicrm-core.git] / tests / phpunit / WebTest / Campaign / MailingTest.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
81621fee 4 | CiviCRM version 4.7 |
6a488035 5 +--------------------------------------------------------------------+
e7112fa7 6 | Copyright CiviCRM LLC (c) 2004-2015 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License along with this program; if not, contact CiviCRM LLC |
21 | at info[AT]civicrm[DOT]org. If you have questions about the |
22 | GNU Affero General Public License or the licensing of CiviCRM, |
23 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
24 +--------------------------------------------------------------------+
d25dd0ee 25 */
6a488035 26
6a488035 27require_once 'CiviTest/CiviSeleniumTestCase.php';
e9479dcf
EM
28
29/**
30 * Class WebTest_Campaign_MailingTest
31 */
6a488035
TO
32class WebTest_Campaign_MailingTest extends CiviSeleniumTestCase {
33
34 protected function setUp() {
35 parent::setUp();
36 }
37
00be9182 38 public function testCreateCampaign() {
6a488035 39 // Log in as admin first to verify permissions for CiviCampaign
42daf119 40 $this->webtestLogin('admin');
6a488035
TO
41
42 // Enable CiviCampaign module if necessary
5ff68892 43 $this->enableComponents(array('CiviMail', 'CiviCampaign'));
6a488035 44
5ff68892
CW
45 $this->setupDefaultMailbox();
46
47 // add the required permission
48 $this->changePermissions('edit-2-administer-civicampaign');
6a488035 49
42daf119
CW
50 // Log in as normal user
51 $this->webtestLogin();
52
6a488035
TO
53 // Create new group
54 $title = substr(sha1(rand()), 0, 7);
55 $groupName = $this->WebtestAddGroup();
56
57 // Adding contact
58 // We're using Quick Add block on the main page for this.
59 $firstName = substr(sha1(rand()), 0, 7);
60 $this->webtestAddContact($firstName, "Smith", "$firstName.smith@example.org");
3bd51000 61 $this->_contactNames = array("$firstName.smith@example.org" => "Smith, $firstName");
6a488035
TO
62
63 // add contact to group
64 // visit group tab
65 $this->click("css=li#tab_group a");
66 $this->waitForElementPresent("group_id");
67
68 // add to group
69 $this->select("group_id", "label=$groupName");
70 $this->click("_qf_GroupContact_next");
2af8120a 71 $this->waitForElementPresent('link=Remove');
6a488035 72
8f737a72 73 $this->openCiviPage('campaign/add', 'reset=1', '_qf_Campaign_upload-bottom');
6a488035 74
6a488035
TO
75 $campaignTitle = "Campaign $title";
76 $this->type("title", $campaignTitle);
77
78 // select the campaign type
79 $this->select("campaign_type_id", "value=2");
80
81 // fill in the description
82 $this->type("description", "This is a test campaign");
83
84 // include groups for the campaign
bf333c47 85 $this->multiselect2("includeGroups", array("$groupName", "Advisory Board"));
6a488035
TO
86
87 // fill the end date for campaign
88 $this->webtestFillDate("end_date", "+1 year");
89
90 // select campaign status
91 $this->select("status_id", "value=2");
92
93 // click save
94 $this->click("_qf_Campaign_upload-bottom");
95 $this->waitForPageToLoad($this->getTimeoutMsec());
96
6c5f7368 97 $this->waitForText('crm-notification-container', "Campaign $title");
6a488035 98
03748831 99 $this->mailingAddTest($groupName, $campaignTitle, $title, $firstName);
6a488035
TO
100 }
101
4cbe18b8 102 /**
ad37ac8e 103 * Test mailing add.
104 *
100fef9d 105 * @param string $groupName
ad37ac8e 106 * @param string $campaignTitle
107 * @param string $title
108 * @param string $firstUserName
4cbe18b8 109 */
03748831 110 public function mailingAddTest($groupName, $campaignTitle, $title, $firstUserName) {
6a488035
TO
111 //---- create mailing contact and add to mailing Group
112 $firstName = substr(sha1(rand()), 0, 7);
113 $this->webtestAddContact($firstName, "Mailson", "mailino$firstName@mailson.co.in");
3bd51000 114 $this->_contactNames["mailino$firstName@mailson.co.in"] = "Mailson, $firstName";
6a488035
TO
115
116 // go to group tab and add to mailing group
117 $this->click("css=li#tab_group a");
118 $this->waitForElementPresent("_qf_GroupContact_next");
119 $this->select("group_id", "$groupName");
120 $this->click("_qf_GroupContact_next");
121
03748831 122 $this->openCiviPage('a/#/mailing/new');
123 $this->waitForElementPresent("xpath=//input[@name='mailingName']");
6a488035
TO
124 //-------select recipients----------
125
126 // fill mailing name
127 $mailingName = substr(sha1(rand()), 0, 7);
03748831 128 $this->type("xpath=//input[@name='mailingName']", "Mailing $mailingName Webtest");
6a488035
TO
129
130 // select campaign
d50d5019 131 $this->select2("s2id_crmUiId_4", "Campaign_" . $title);
6a488035
TO
132
133 // Add the test mailing group
03748831 134 $this->select2("s2id_crmUiId_8", $groupName, TRUE);
6a488035 135
03748831 136 $this->waitForTextPresent("~2 recipients");
6a488035
TO
137
138 //--------Mailing content------------
c79c8ec8 139 $tokens = ' {domain.address}{action.optOutUrl}';
6a488035 140 // fill subject for mailing
03748831 141 $this->type("xpath=//input[@name='subject']", "Test subject {$mailingName} for Webtest");
142 // HTML format message
143 $HTMLMessage = "This is HTML formatted content for Mailing {$mailingName} Webtest.";
c79c8ec8 144 $this->fillRichTextField("crmUiId_1", $HTMLMessage . $tokens);
03748831 145
c79c8ec8
CW
146 // FIXME: Selenium can't access content in an iframe
147 //$this->click("xpath=//div[@class='preview-popup']//a[text()='Preview as HTML']");
148 //$this->waitForTextPresent($HTMLMessage);
149 //$this->waitForAjaxContent();
150 //$this->click("xpath=//button[@title='Close']");
6a488035 151
03748831 152 // Open Plain-text Format pane and type text format msg
c79c8ec8
CW
153 $this->click("//div[starts-with(text(),'Plain Text')]");
154 $this->type("xpath=//*[@name='body_text']", "This is text formatted content for Mailing {$mailingName} Webtest.$tokens");
6a488035 155
03748831 156 $this->click("xpath=//div[@class='preview-popup']//a[text()='Preview as Plain Text']");
157 $this->waitForTextPresent("This is text formatted content for Mailing {$mailingName} Webtest.");
03748831 158 $this->click("xpath=//button[@title='Close']");
6a488035 159
03748831 160 //--------track and respond----------
952cc48f
WA
161 $this->waitForAjaxContent();
162 $this->click('link=Tracking');
03748831 163 $this->assertChecked("url_tracking");
164 $this->assertChecked("open_tracking");
165 // no need tracking for this test
6a488035
TO
166
167 // default header and footer ( with label )
952cc48f
WA
168 $this->waitForAjaxContent();
169 $this->click('link=Header and Footer');
6a488035
TO
170 $this->select("header_id", "label=Mailing Header");
171 $this->select("footer_id", "label=Mailing Footer");
172
6a488035
TO
173 //---------------Test------------------
174
175 ////////--Commenting test mailing and mailing preview (test mailing and preview not presently working).
176
177 // send test mailing
178 //$this->type("test_email", "mailino@mailson.co.in");
179 //$this->click("sendtest");
180
181 // verify status message
182 //$this->assertTrue($this->isTextPresent("Your test message has been sent. Click 'Next' when you are ready to Schedule or Send your live mailing (you will still have a chance to confirm or cancel sending this mailing on the next page)."));
183
184 // check mailing preview
185 //$this->click("//form[@id='Test']/div[2]/div[4]/div[1]");
186 //$this->assertTrue($this->isTextPresent("this is test content for Mailing $mailingName Webtest"));
187
188 ////////
189
6a488035 190 // click next
03748831 191 $this->click("xpath=//div[@class='crm-wizard-buttons']/button[text()='Next']");
6a488035
TO
192
193 //----------Schedule or Send------------
194
03748831 195 // do check for other option
196 $this->waitForTextPresent("Mailing $mailingName Webtest");
197 $this->click("xpath=//div[@class='content']//a[text()='~2 recipients']");
198 $verifyData = array(
d50d5019 199 "$firstUserName Smith" => "$firstUserName.smith@example.org",
200 "$firstName Mailson" => "mailino$firstName@mailson.co.in",
03748831 201 );
202 $this->webtestVerifyTabularData($verifyData);
203 $this->waitForTextPresent("(Include: $groupName)");
204 $this->assertChecked("xpath=//input[@id='schedule-send-now']");
6a488035
TO
205
206 // finally schedule the mail by clicking submit
03748831 207 $this->click("xpath=//center/a/div[text()='Submit Mailing']");
6a488035
TO
208 $this->waitForPageToLoad($this->getTimeoutMsec());
209
210 //----------end New Mailing-------------
211
212 //check redirected page to Scheduled and Sent Mailings and verify for mailing name
03748831 213 $this->waitForTextPresent("Find Mailings");
8f737a72 214 $this->assertElementContainsText('Search', "Mailing $mailingName Webtest");
6a488035
TO
215
216 //--------- mail delivery verification---------
217
218 // test undelivered report
219
220 // click report link of created mailing
221 $this->click("xpath=//table//tbody/tr[td[1]/text()='Mailing $mailingName Webtest']/descendant::a[text()='Report']");
222 $this->waitForPageToLoad($this->getTimeoutMsec());
223
224 // verify undelivered status message
6c6e6187 225 $this->assertElementContainsText('crm-container', "Delivery has not yet begun for this mailing. If the scheduled delivery date and time is past, ask the system administrator or technical support contact for your site to verify that the automated mailer task ('cron job') is running - and how frequently.");
6a488035
TO
226
227 // do check for recipient group
8f737a72 228 $this->assertElementContainsText('crm-container', "Members of $groupName");
6a488035
TO
229
230 // directly send schedule mailing -- not working right now
8f737a72 231 $this->openCiviPage('mailing/queue', 'reset=1');
6a488035
TO
232
233 //click report link of created mailing
234 $this->click("xpath=//table//tbody/tr[td[1]/text()='Mailing $mailingName Webtest']/descendant::a[text()='Report']");
235 $this->waitForPageToLoad($this->getTimeoutMsec());
236
237 // do check again for recipient group
8f737a72 238 $this->assertElementContainsText('crm-container', "Members of $groupName");
6a488035
TO
239
240 // check for 100% delivery
8f737a72 241 $this->assertElementContainsText('crm-container', "2 (100.00%)");
6a488035
TO
242
243 // verify intended recipients
244 $this->verifyText("xpath=//table//tr[td/a[text()='Intended Recipients']]/descendant::td[2]", preg_quote("2"));
245
246 // verify successful deliveries
247 $this->verifyText("xpath=//table//tr[td/a[text()='Successful Deliveries']]/descendant::td[2]", preg_quote("2 (100.00%)"));
248
249 // verify status
250 $this->verifyText("xpath=//table//tr[td[1]/text()='Status']/descendant::td[2]", preg_quote("Complete"));
251
252 // verify mailing name
253 $this->verifyText("xpath=//table//tr[td[1]/text()='Mailing Name']/descendant::td[2]", preg_quote("Mailing $mailingName Webtest"));
254
255 // verify mailing subject
256 $this->verifyText("xpath=//table//tr[td[1]/text()='Subject']/descendant::td[2]", preg_quote("Test subject $mailingName for Webtest"));
257
258 $this->verifyText("xpath=//table//tr[td[1]/text()='Campaign']/descendant::td[2]", preg_quote("$campaignTitle"));
259
260 //---- check for delivery detail--
6a488035
TO
261 $this->click("link=Successful Deliveries");
262 $this->waitForPageToLoad($this->getTimeoutMsec());
263
264 // check for open page
03748831 265 $this->waitForTextPresent("Successful Deliveries");
6a488035 266 // verify email
8f737a72 267 $this->assertElementContainsText('mailing_event', "mailino$firstName@mailson.co.in");
6a488035 268 //------end delivery verification---------
3bd51000
SB
269
270 // Search Advanced Search for contacts associated with Campaign in the Mailings Tab.
271 $this->mailingCampaignAdvancedSearchTest($campaignTitle, $this->_contactNames);
6a488035 272 }
96025800 273
85609814 274 public function mailingCampaignAdvancedSearchTest($campaignTitle, $contactNames) {
3bd51000
SB
275 // Go directly to Advanced Search
276 $this->openCiviPage('contact/search/advanced', 'reset=1');
277
278 // Select the Mailing Tab
279 $this->clickAjaxLink("CiviMail", 'campaigns');
280 $this->multiselect2("campaigns", array("$campaignTitle"));
281 $this->click("_qf_Advanced_refresh");
282
283 // Check for contacts inserted while adding Campaing and Mailing
9773de0a
SB
284 $this->waitForElementPresent('search-status');
285 $this->assertElementContainsText('search-status', '2 Contacts');
3bd51000 286 }
85609814 287
6a488035 288}