3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.5 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
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';
28 class WebTest_Contact_ProfileChecksumTest
extends CiviSeleniumTestCase
{
30 protected function setUp() {
34 function testProfileChecksum() {
35 $this->webtestLogin('admin');
39 'first_name' => array(
40 'type' => 'Individual',
41 'label' => 'First Name',
42 'default_value' => substr(sha1(rand()), 0, 7),
43 'update_value' => substr(sha1(rand()), 0, 7),
44 'element_name' => 'first_name',
47 'type' => 'Individual',
48 'label' => 'Last Name',
49 'default_value' => substr(sha1(rand()), 0, 7),
50 'update_value' => substr(sha1(rand()), 0, 7),
51 'element_name' => 'last_name',
57 'default_value' => substr(sha1(rand()), 0, 5) . '@example.com',
58 'update_value' => substr(sha1(rand()), 0, 7) . '@example.com',
59 'element_name' => 'email-Primary',
65 'default_value' => substr(sha1(rand()), 0, 7),
66 'update_value' => substr(sha1(rand()), 0, 7),
67 'element_name' => 'city-Primary',
69 'state_province' => array(
73 'default_value' => '1004',
74 'update_value' => '1031',
75 'update_value_label' => 'NY',
76 'element_name' => 'state_province-Primary',
77 'html_type' => 'select',
83 'default_value' => '1228',
84 'update_value' => '1228',
85 'update_value_label' => 'United States',
86 'element_name' => 'country-Primary',
87 'html_type' => 'select',
92 $this->webtestAddContact($fields['first_name']['default_value'], $fields['last_name']['default_value'], $fields['email']['default_value']);
94 // Get contact id from url.
95 $contactId = $this->urlArg('cid');
97 // Create profile for contact
98 $profileName = "Profile_" . substr(sha1(rand()), 0, 7);
99 $profileId = $this->_testCreateContactProfile($fields, $profileName);
101 // Check for profile create/edit permissions.
102 $permission = array('edit-1-profile-edit', 'edit-1-profile-create', 'edit-1-access-all-custom-data', 'edit-1-edit-all-contacts');
103 $this->changePermissions($permission);
105 // Get checksum of the newly created contact.
106 $cs = CRM_Contact_BAO_Contact_Utils
::generateChecksum($contactId);
109 $this->webtestLogout();
111 // Go to edit profile page of the created contact.
112 $this->openCiviPage("profile/edit", "id={$contactId}&gid={$profileId}&reset=1&cs={$cs}", NULL);
113 $this->waitForTextPresent($profileName);
115 // Check all profile fields, update their values.
116 foreach ($fields as $field) {
117 $this->assertTrue($this->isElementPresent($field['element_name']), "Missing Field: {$field['label']}.");
118 if (isset($field['html_type']) && $field['html_type'] == 'select') {
119 $this->select($field['element_name'], "value={$field['update_value']}");
122 $this->type($field['element_name'], $field['update_value']);
126 $this->click("_qf_Edit_next");
127 $this->waitForPageToLoad(2 * $this->getTimeoutMsec());
129 // Check profile view page.
130 $this->waitForTextPresent($profileName);
132 // Check updated values of all fields.
133 $checkFieldValues = array();
134 foreach ($fields as $field) {
135 $checkFieldValues[] = isset($field['update_value_label']) ?
$field['update_value_label'] : $field['update_value'];
137 $this->assertStringsPresent($checkFieldValues);
142 * @param $profileName
146 function _testCreateContactProfile($fields, $profileName) {
148 $this->openCiviPage("admin/uf/group", "reset=1");
149 $this->click('newCiviCRMProfile-top');
150 $this->waitForElementPresent('_qf_Group_next-top');
152 // Name of the profile.
153 $this->type('title', $profileName);
154 $this->click('uf_group_type_Profile');
155 $this->click('_qf_Group_next-top');
156 $this->waitForPageToLoad($this->getTimeoutMsec());
157 $profileId = $this->urlArg('gid');
159 // Add field to the profile.
160 foreach ($fields as $key => $values) {
161 $this->openCiviPage("admin/uf/group/field/add", "reset=1&action=add&gid=$profileId");
163 $this->select("field_name[0]", "value={$values['type']}");
164 // Because it tends to cause problems, all uses of sleep() must be justified in comments
165 // Sleep should never be used for wait for anything to load from the server
166 // Justification for this instance: FIXME
168 $this->select("field_name[1]", "value={$key}");
169 if (isset($values['location'])) {
170 // Because it tends to cause problems, all uses of sleep() must be justified in comments
171 // Sleep should never be used for wait for anything to load from the server
172 // Justification for this instance: FIXME
174 $this->select("field_name[2]", "value={$values['location']}");
176 $this->type("label", $values['label']);
177 $this->click('_qf_Field_next-top');
178 $this->waitForPageToLoad($this->getTimeoutMsec());