3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2015 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
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. |
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. |
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 +--------------------------------------------------------------------+
27 require_once 'CiviTest/CiviSeleniumTestCase.php';
30 * Class WebTest_Campaign_MailingTest
32 class WebTest_Campaign_MailingTest
extends CiviSeleniumTestCase
{
34 protected function setUp() {
38 public function testCreateCampaign() {
39 // Log in as admin first to verify permissions for CiviCampaign
40 $this->webtestLogin('admin');
42 // Enable CiviCampaign module if necessary
43 $this->enableComponents(array('CiviMail', 'CiviCampaign'));
45 $this->setupDefaultMailbox();
47 // add the required permission
48 $this->changePermissions('edit-2-administer-civicampaign');
50 // Log in as normal user
51 $this->webtestLogin();
54 $title = substr(sha1(rand()), 0, 7);
55 $groupName = $this->WebtestAddGroup();
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");
61 $this->_contactNames
= array("$firstName.smith@example.org" => "Smith, $firstName");
63 // add contact to group
65 $this->click("css=li#tab_group a");
66 $this->waitForElementPresent("group_id");
69 $this->select("group_id", "label=$groupName");
70 $this->click("_qf_GroupContact_next");
71 $this->waitForElementPresent('link=Remove');
73 $this->openCiviPage('campaign/add', 'reset=1', '_qf_Campaign_upload-bottom');
75 $campaignTitle = "Campaign $title";
76 $this->type("title", $campaignTitle);
78 // select the campaign type
79 $this->select("campaign_type_id", "value=2");
81 // fill in the description
82 $this->type("description", "This is a test campaign");
84 // include groups for the campaign
85 $this->multiselect2("includeGroups", array("$groupName", "Advisory Board"));
87 // fill the end date for campaign
88 $this->webtestFillDate("end_date", "+1 year");
90 // select campaign status
91 $this->select("status_id", "value=2");
94 $this->click("_qf_Campaign_upload-bottom");
95 $this->waitForPageToLoad($this->getTimeoutMsec());
97 $this->waitForText('crm-notification-container', "Campaign $title");
99 $this->mailingAddTest($groupName, $campaignTitle, $title, $firstName);
105 * @param string $groupName
106 * @param string $campaignTitle
107 * @param string $title
108 * @param string $firstUserName
110 public function mailingAddTest($groupName, $campaignTitle, $title, $firstUserName) {
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");
114 $this->_contactNames
["mailino$firstName@mailson.co.in"] = "Mailson, $firstName";
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");
122 $this->openCiviPage('a/#/mailing/new');
123 $this->waitForElementPresent("xpath=//input[@name='mailingName']");
124 //-------select recipients----------
127 $mailingName = substr(sha1(rand()), 0, 7);
128 $this->type("xpath=//input[@name='mailingName']", "Mailing $mailingName Webtest");
131 $this->select2("s2id_crmUiId_4", "Campaign_" . $title);
133 // Add the test mailing group
134 $this->select2("s2id_crmUiId_8", $groupName, TRUE);
136 $this->waitForTextPresent("~2 recipients");
138 //--------Mailing content------------
139 $tokens = ' {domain.address}{action.optOutUrl}';
140 // fill subject for mailing
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.";
144 $this->fillRichTextField("crmUiId_1", $HTMLMessage . $tokens);
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']");
152 // Open Plain-text Format pane and type text format msg
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");
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.");
158 $this->click("xpath=//button[@title='Close']");
160 //--------track and respond----------
161 $this->click("xpath=//ul/li/a[text()='Tracking']");
162 $this->assertChecked("url_tracking");
163 $this->assertChecked("open_tracking");
164 // no need tracking for this test
166 // default header and footer ( with label )
167 $this->click("xpath=//ul/li/a[text()='Header and Footer']");
168 $this->select("header_id", "label=Mailing Header");
169 $this->select("footer_id", "label=Mailing Footer");
171 //---------------Test------------------
173 ////////--Commenting test mailing and mailing preview (test mailing and preview not presently working).
176 //$this->type("test_email", "mailino@mailson.co.in");
177 //$this->click("sendtest");
179 // verify status message
180 //$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)."));
182 // check mailing preview
183 //$this->click("//form[@id='Test']/div[2]/div[4]/div[1]");
184 //$this->assertTrue($this->isTextPresent("this is test content for Mailing $mailingName Webtest"));
189 $this->click("xpath=//div[@class='crm-wizard-buttons']/button[text()='Next']");
191 //----------Schedule or Send------------
193 // do check for other option
194 $this->waitForTextPresent("Mailing $mailingName Webtest");
195 $this->click("xpath=//div[@class='content']//a[text()='~2 recipients']");
197 "$firstUserName Smith" => "$firstUserName.smith@example.org",
198 "$firstName Mailson" => "mailino$firstName@mailson.co.in",
200 $this->webtestVerifyTabularData($verifyData);
201 $this->waitForTextPresent("(Include: $groupName)");
202 $this->assertChecked("xpath=//input[@id='schedule-send-now']");
204 // finally schedule the mail by clicking submit
205 $this->click("xpath=//center/a/div[text()='Submit Mailing']");
206 $this->waitForPageToLoad($this->getTimeoutMsec());
208 //----------end New Mailing-------------
210 //check redirected page to Scheduled and Sent Mailings and verify for mailing name
211 $this->waitForTextPresent("Find Mailings");
212 $this->assertElementContainsText('Search', "Mailing $mailingName Webtest");
214 //--------- mail delivery verification---------
216 // test undelivered report
218 // click report link of created mailing
219 $this->click("xpath=//table//tbody/tr[td[1]/text()='Mailing $mailingName Webtest']/descendant::a[text()='Report']");
220 $this->waitForPageToLoad($this->getTimeoutMsec());
222 // verify undelivered status message
223 $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.");
225 // do check for recipient group
226 $this->assertElementContainsText('crm-container', "Members of $groupName");
228 // directly send schedule mailing -- not working right now
229 $this->openCiviPage('mailing/queue', 'reset=1');
231 //click report link of created mailing
232 $this->click("xpath=//table//tbody/tr[td[1]/text()='Mailing $mailingName Webtest']/descendant::a[text()='Report']");
233 $this->waitForPageToLoad($this->getTimeoutMsec());
235 // do check again for recipient group
236 $this->assertElementContainsText('crm-container', "Members of $groupName");
238 // check for 100% delivery
239 $this->assertElementContainsText('crm-container', "2 (100.00%)");
241 // verify intended recipients
242 $this->verifyText("xpath=//table//tr[td/a[text()='Intended Recipients']]/descendant::td[2]", preg_quote("2"));
244 // verify successful deliveries
245 $this->verifyText("xpath=//table//tr[td/a[text()='Successful Deliveries']]/descendant::td[2]", preg_quote("2 (100.00%)"));
248 $this->verifyText("xpath=//table//tr[td[1]/text()='Status']/descendant::td[2]", preg_quote("Complete"));
250 // verify mailing name
251 $this->verifyText("xpath=//table//tr[td[1]/text()='Mailing Name']/descendant::td[2]", preg_quote("Mailing $mailingName Webtest"));
253 // verify mailing subject
254 $this->verifyText("xpath=//table//tr[td[1]/text()='Subject']/descendant::td[2]", preg_quote("Test subject $mailingName for Webtest"));
256 $this->verifyText("xpath=//table//tr[td[1]/text()='Campaign']/descendant::td[2]", preg_quote("$campaignTitle"));
258 //---- check for delivery detail--
259 $this->click("link=Successful Deliveries");
260 $this->waitForPageToLoad($this->getTimeoutMsec());
262 // check for open page
263 $this->waitForTextPresent("Successful Deliveries");
265 $this->assertElementContainsText('mailing_event', "mailino$firstName@mailson.co.in");
266 //------end delivery verification---------
268 // Search Advanced Search for contacts associated with Campaign in the Mailings Tab.
269 $this->mailingCampaignAdvancedSearchTest($campaignTitle, $this->_contactNames
);
272 public function mailingCampaignAdvancedSearchTest($campaignTitle, $contactNames) {
273 // Go directly to Advanced Search
274 $this->openCiviPage('contact/search/advanced', 'reset=1');
276 // Select the Mailing Tab
277 $this->clickAjaxLink("CiviMail", 'campaigns');
278 $this->multiselect2("campaigns", array("$campaignTitle"));
279 $this->click("_qf_Advanced_refresh");
281 // Check for contacts inserted while adding Campaing and Mailing
282 $this->waitForElementPresent('search-status');
283 $this->assertElementContainsText('search-status', '2 Contacts');