]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/modules/MassUpdate/Bug51596Test.php
Release 6.5.10
[Github/sugarcrm.git] / tests / modules / MassUpdate / Bug51596Test.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
5  * 
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.
12  * 
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
16  * details.
17  * 
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
21  * 02110-1301 USA.
22  * 
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.
25  * 
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.
29  * 
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  ********************************************************************************/
36
37
38 /**
39 * @ticket 51596
40 */
41 class Bug51596Test extends Sugar_PHPUnit_Framework_TestCase
42 {
43     /**
44     * @var Contact
45     */
46     protected $contact1,
47         $contact2;
48
49     /**
50      * @var Account
51      * @var Account
52      */
53     protected $account1,
54         $account2;
55
56     protected $field_name = 'bug51596test';
57
58     /**
59     * Sets up the fixture, for example, open a network connection.
60     * This method is called before a test is executed.
61     *
62     * @return void
63     */
64     public function setUp()
65     {
66         SugarTestHelper::setUp('mod_strings', array('Administration'));
67         SugarTestHelper::setUp('current_user', array(true, true));
68
69         // add an extra relationship that will be used for search
70         self::registerExtension('Contacts', 'bug51596test.php', array(
71             'Contact' => array(
72                 'fields' => array(
73                     $this->field_name => array (
74                         'name'      => $this->field_name,
75                         'rname'     => 'name',
76                         'id_name'   => 'account_id',
77                         'join_name' => 'accounts',
78                         'type'      => 'relate',
79                         'link'      => 'accounts',
80                         'table'     => 'accounts',
81                         'module'    => 'Accounts',
82                         'source'    => 'non-db',
83                     ),
84                 ),
85             ),
86         ));
87
88         // this is needed for newly created extension to be loaded for new beans
89         $_SESSION['developerMode'] = true;
90         $GLOBALS['reload_vardefs'] = true;
91
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();
96
97         $this->contact2 = new Contact();
98         $this->contact2->do_not_call = 0;
99         $this->contact2->save();
100
101         $this->account1 = new Account();
102         $this->account1->name = 'Bug51596Test_Account1';
103         $this->account1->save();
104
105         $this->account2 = new Account();
106         $this->account2->name = 'Bug51596Test_Account2';
107         $this->account2->save();
108
109         $this->contact1->load_relationship('accounts');
110         $this->contact2->load_relationship('accounts');
111
112         /** @var Link2 $accounts1 */
113         $accounts1 = $this->contact1->accounts;
114         $accounts1->add(array($this->account1->id));
115
116         /** @var Link2 $accounts2 */
117         $accounts2 = $this->contact2->accounts;
118         $accounts2->add(array($this->account2->id));
119
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;
125     }
126
127     /**
128      * Tears down the fixture, for example, close a network connection.
129      * This method is called after a test is executed.
130      *
131      * @return void
132      */
133     public function tearDown()
134     {
135         unset($_REQUEST['massupdate'], $_REQUEST['entire'], $_REQUEST['module'], $_POST['do_not_call']);
136
137         if (!empty($this->account2))
138         {
139             $this->account2->mark_deleted($this->account2->id);
140         }
141         if (!empty($this->account1))
142         {
143             $this->account1->mark_deleted($this->account1->id);
144         }
145         if (!empty($this->contact2))
146         {
147             $this->contact2->mark_deleted($this->contact2->id);
148         }
149         if (!empty($this->contact1))
150         {
151             $this->contact1->mark_deleted($this->contact1->id);
152         }
153
154
155
156         self::unregisterExtension('Contacts', 'bug51596test.php');
157         SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
158
159         unset($GLOBALS['reload_vardefs'], $_SESSION['developerMode']);
160         SugarTestHelper::tearDown();
161     }
162
163     /**
164      * Verifies that objects are found and updated by name of custom related
165      * object
166      *
167      * @return void
168      */
169     public function testSearchAndUpdate()
170     {
171         $contact = new Contact();
172
173         require_once 'include/MassUpdate.php';
174         $mass_update = new MassUpdate();
175         $mass_update->sugarbean = $contact;
176
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',
181         );
182
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();
187
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);
191
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);
195     }
196
197     /**
198      * Utility function. Registers vardef extension for specified module.
199      *
200      * @static
201      * @param string $module
202      * @param string $filename
203      * @param array $data
204      * @return void
205      */
206     protected static function registerExtension($module, $filename, array $data)
207     {
208         $directory = 'custom/Extension/modules/' . $module . '/Ext/Vardefs';
209
210         if (!file_exists($directory))
211         {
212             mkdir($directory, 0777, true);
213         }
214
215         $path = $directory . '/' . $filename;
216         $data = var_export($data, true);
217
218         $contents = <<<HERE
219 <?php
220 \$dictionary = array_merge_recursive(\$dictionary, {$data});
221 HERE;
222
223         file_put_contents($path, $contents);
224
225         self::rebuildExtensions($module);
226     }
227
228     /**
229      * Utility function. Unregisters vardef extension for specified module.
230      *
231      * @static
232      * @param string $module
233      * @param string $filename
234      * @return void
235      */
236     protected static function unregisterExtension($module, $filename)
237     {
238         $directory = 'custom/Extension/modules/' . $module . '/Ext/Vardefs';
239
240         if (!file_exists($directory))
241         {
242             mkdir($directory, 0777, true);
243         }
244
245         $path = $directory . '/' . $filename;
246         unlink($path);
247
248         self::rebuildExtensions($module);
249     }
250
251     /**
252      * Utility function. Rebuilds extensions for specified module.
253      *
254      * @static
255      * @param string $module
256      * @return void
257      */
258     protected static function rebuildExtensions($module)
259     {
260         $rc = new RepairAndClear();
261         $rc->repairAndClearAll(array('rebuildExtensions'), array($module), false, false);
262     }
263
264 }