2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
6 * This program 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 SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13 * This program 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
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
23 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26 * The interactive user interfaces in modified source and object code 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.
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 "Powered by
32 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33 * technical reasons, the Appropriate Legal Notices must display the words
34 * "Powered by SugarCRM".
35 ********************************************************************************/
41 class Bug51596Test extends Sugar_PHPUnit_Framework_TestCase
56 protected $field_name = 'bug51596test';
59 * Sets up the fixture, for example, open a network connection.
60 * This method is called before a test is executed.
64 public function setUp()
66 SugarTestHelper::setUp('mod_strings', array('Administration'));
67 SugarTestHelper::setUp('current_user', array(true, true));
69 // add an extra relationship that will be used for search
70 self::registerExtension('Contacts', 'bug51596test.php', array(
73 $this->field_name => array (
74 'name' => $this->field_name,
76 'id_name' => 'account_id',
77 'join_name' => 'accounts',
80 'table' => 'accounts',
81 'module' => 'Accounts',
88 // this is needed for newly created extension to be loaded for new beans
89 $_SESSION['developerMode'] = true;
90 $GLOBALS['reload_vardefs'] = true;
92 // create a set of contacts and related accounts
93 $this->contact1 = new Contact();
94 $this->contact1->do_not_call = 0;
95 $this->contact1->save();
97 $this->contact2 = new Contact();
98 $this->contact2->do_not_call = 0;
99 $this->contact2->save();
101 $this->account1 = new Account();
102 $this->account1->name = 'Bug51596Test_Account1';
103 $this->account1->save();
105 $this->account2 = new Account();
106 $this->account2->name = 'Bug51596Test_Account2';
107 $this->account2->save();
109 $this->contact1->load_relationship('accounts');
110 $this->contact2->load_relationship('accounts');
112 /** @var Link2 $accounts1 */
113 $accounts1 = $this->contact1->accounts;
114 $accounts1->add(array($this->account1->id));
116 /** @var Link2 $accounts2 */
117 $accounts2 = $this->contact2->accounts;
118 $accounts2->add(array($this->account2->id));
120 // will update "do_not_call" attribute of found contacts
121 $_REQUEST['massupdate'] = 'true';
122 $_REQUEST['entire'] = true;
123 $_REQUEST['module'] = 'Contacts';
124 $_POST['do_not_call'] = 1;
128 * Tears down the fixture, for example, close a network connection.
129 * This method is called after a test is executed.
133 public function tearDown()
135 unset($_REQUEST['massupdate'], $_REQUEST['entire'], $_REQUEST['module'], $_POST['do_not_call']);
137 if (!empty($this->account2))
139 $this->account2->mark_deleted($this->account2->id);
141 if (!empty($this->account1))
143 $this->account1->mark_deleted($this->account1->id);
145 if (!empty($this->contact2))
147 $this->contact2->mark_deleted($this->contact2->id);
149 if (!empty($this->contact1))
151 $this->contact1->mark_deleted($this->contact1->id);
156 self::unregisterExtension('Contacts', 'bug51596test.php');
157 SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
159 unset($GLOBALS['reload_vardefs'], $_SESSION['developerMode']);
160 SugarTestHelper::tearDown();
164 * Verifies that objects are found and updated by name of custom related
169 public function testSearchAndUpdate()
171 $contact = new Contact();
173 require_once 'include/MassUpdate.php';
174 $mass_update = new MassUpdate();
175 $mass_update->sugarbean = $contact;
177 // search for contacts related to Bug51596Test_Account1 (e.g. Contact1)
178 $current_query_by_page = array (
179 'searchFormTab' => 'basic_search',
180 $this->field_name . '_basic' => 'Bug51596Test_Account1',
183 // perform mass update
184 $current_query_by_page = base64_encode(serialize($current_query_by_page));
185 $mass_update->generateSearchWhere('Contacts', $current_query_by_page);
186 $mass_update->handleMassUpdate();
188 // ensure that "do_not_call" attribute of Contact1 has been changed
189 $contact->retrieve($this->contact1->id);
190 $this->assertEquals(1, $contact->do_not_call);
192 // ensure that "do_not_call" attribute of Contact2 has not been changed
193 $contact->retrieve($this->contact2->id);
194 $this->assertEquals(0, $contact->do_not_call);
198 * Utility function. Registers vardef extension for specified module.
201 * @param string $module
202 * @param string $filename
206 protected static function registerExtension($module, $filename, array $data)
208 $directory = 'custom/Extension/modules/' . $module . '/Ext/Vardefs';
210 if (!file_exists($directory))
212 mkdir($directory, 0777, true);
215 $path = $directory . '/' . $filename;
216 $data = var_export($data, true);
220 \$dictionary = array_merge_recursive(\$dictionary, {$data});
223 file_put_contents($path, $contents);
225 self::rebuildExtensions($module);
229 * Utility function. Unregisters vardef extension for specified module.
232 * @param string $module
233 * @param string $filename
236 protected static function unregisterExtension($module, $filename)
238 $directory = 'custom/Extension/modules/' . $module . '/Ext/Vardefs';
240 if (!file_exists($directory))
242 mkdir($directory, 0777, true);
245 $path = $directory . '/' . $filename;
248 self::rebuildExtensions($module);
252 * Utility function. Rebuilds extensions for specified module.
255 * @param string $module
258 protected static function rebuildExtensions($module)
260 $rc = new RepairAndClear();
261 $rc->repairAndClearAll(array('rebuildExtensions'), array($module), false, false);