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));
68 SugarTestHelper::setUp('beanFiles');
69 SugarTestHelper::setUp('beanList');
71 // add an extra relationship that will be used for search
72 self::registerExtension('Contacts', 'bug51596test.php', array(
75 $this->field_name => array (
76 'name' => $this->field_name,
78 'id_name' => 'account_id',
79 'join_name' => 'accounts',
82 'table' => 'accounts',
83 'module' => 'Accounts',
90 // this is needed for newly created extension to be loaded for new beans
91 $_SESSION['developerMode'] = true;
92 $GLOBALS['reload_vardefs'] = true;
94 // create a set of contacts and related accounts
95 $this->contact1 = new Contact();
96 $this->contact1->do_not_call = 0;
97 $this->contact1->save();
99 $this->contact2 = new Contact();
100 $this->contact2->do_not_call = 0;
101 $this->contact2->save();
103 $this->account1 = new Account();
104 $this->account1->name = 'Bug51596Test_Account1';
105 $this->account1->save();
107 $this->account2 = new Account();
108 $this->account2->name = 'Bug51596Test_Account2';
109 $this->account2->save();
111 $this->contact1->load_relationship('accounts');
112 $this->contact2->load_relationship('accounts');
114 /** @var Link2 $accounts1 */
115 $accounts1 = $this->contact1->accounts;
116 $accounts1->add(array($this->account1->id));
118 /** @var Link2 $accounts2 */
119 $accounts2 = $this->contact2->accounts;
120 $accounts2->add(array($this->account2->id));
122 // will update "do_not_call" attribute of found contacts
123 $_REQUEST['massupdate'] = 'true';
124 $_REQUEST['entire'] = true;
125 $_REQUEST['module'] = 'Contacts';
126 $_POST['do_not_call'] = 1;
130 * Tears down the fixture, for example, close a network connection.
131 * This method is called after a test is executed.
135 public function tearDown()
137 unset($_REQUEST['massupdate'], $_REQUEST['entire'], $_REQUEST['module'], $_POST['do_not_call']);
139 if (!empty($this->account2))
141 $this->account2->mark_deleted($this->account2->id);
143 if (!empty($this->account1))
145 $this->account1->mark_deleted($this->account1->id);
147 if (!empty($this->contact2))
149 $this->contact2->mark_deleted($this->contact2->id);
151 if (!empty($this->contact1))
153 $this->contact1->mark_deleted($this->contact1->id);
158 self::unregisterExtension('Contacts', 'bug51596test.php');
159 SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
161 unset($GLOBALS['reload_vardefs'], $_SESSION['developerMode']);
162 SugarTestHelper::tearDown();
166 * Verifies that objects are found and updated by name of custom related
171 public function testSearchAndUpdate()
173 $contact = new Contact();
175 require_once 'include/MassUpdate.php';
176 $mass_update = new MassUpdate();
177 $mass_update->sugarbean = $contact;
179 // search for contacts related to Bug51596Test_Account1 (e.g. Contact1)
180 $current_query_by_page = array (
181 'searchFormTab' => 'basic_search',
182 $this->field_name . '_basic' => 'Bug51596Test_Account1',
185 // perform mass update
186 $current_query_by_page = base64_encode(serialize($current_query_by_page));
187 $mass_update->generateSearchWhere('Contacts', $current_query_by_page);
188 $mass_update->handleMassUpdate();
190 // ensure that "do_not_call" attribute of Contact1 has been changed
191 $contact->retrieve($this->contact1->id);
192 $this->assertEquals(1, $contact->do_not_call);
194 // ensure that "do_not_call" attribute of Contact2 has not been changed
195 $contact->retrieve($this->contact2->id);
196 $this->assertEquals(0, $contact->do_not_call);
200 * Utility function. Registers vardef extension for specified module.
203 * @param string $module
204 * @param string $filename
208 protected static function registerExtension($module, $filename, array $data)
210 $directory = 'custom/Extension/modules/' . $module . '/Ext/Vardefs';
212 if (!file_exists($directory))
214 mkdir($directory, 0777, true);
217 $path = $directory . '/' . $filename;
218 $data = var_export($data, true);
222 \$dictionary = array_merge_recursive(\$dictionary, {$data});
225 file_put_contents($path, $contents);
227 self::rebuildExtensions($module);
231 * Utility function. Unregisters vardef extension for specified module.
234 * @param string $module
235 * @param string $filename
238 protected static function unregisterExtension($module, $filename)
240 $directory = 'custom/Extension/modules/' . $module . '/Ext/Vardefs';
242 if (!file_exists($directory))
244 mkdir($directory, 0777, true);
247 $path = $directory . '/' . $filename;
250 self::rebuildExtensions($module);
254 * Utility function. Rebuilds extensions for specified module.
257 * @param string $module
260 protected static function rebuildExtensions($module)
262 $rc = new RepairAndClear();
263 $rc->repairAndClearAll(array('rebuildExtensions'), array($module), false, false);