]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/modules/Import/ImportDuplicateCheckTest.php
Release 6.5.8
[Github/sugarcrm.git] / tests / modules / Import / ImportDuplicateCheckTest.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2012 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 require_once 'modules/Import/ImportDuplicateCheck.php';
39
40 class ImportDuplicateCheckTest extends Sugar_PHPUnit_Framework_TestCase
41 {
42     public function setUp() 
43     {
44         $beanList = array();
45         $beanFiles = array();
46         require('include/modules.php');
47         $GLOBALS['beanList'] = $beanList;
48         $GLOBALS['beanFiles'] = $beanFiles;
49         $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
50         $app_strings = array();
51         require('include/language/en_us.lang.php');
52         $GLOBALS['app_strings'] = $app_strings;
53     }
54     
55     public function tearDown() 
56     {
57         unset($GLOBALS['beanList']);
58         unset($GLOBALS['beanFiles']);
59         unset($GLOBALS['app_strings']);
60         SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
61         unset($GLOBALS['current_user']);
62     }
63     
64     public function testGetDuplicateCheckIndexesWithEmail()
65     {
66         $focus = loadBean('Contacts');
67         
68         $idc     = new ImportDuplicateCheck($focus);
69         $indexes = $idc->getDuplicateCheckIndexes();
70         
71         foreach ( $focus->getIndices() as $key => $index ) {
72             if ($key != 'id') $this->assertTrue(isset($indexes[$index['name']]),"{$index['name']} should be in the list");
73         }
74         
75         $this->assertTrue(isset($indexes['special_idx_email1']));
76         $this->assertTrue(isset($indexes['special_idx_email2']));
77     }
78     
79     public function testGetDuplicateCheckIndexesNoEmail()
80     {
81         $focus = loadBean('Calls');
82         
83         $idc     = new ImportDuplicateCheck($focus);
84         $indexes = $idc->getDuplicateCheckIndexes();
85         
86         foreach ( $focus->getIndices() as $key => $index ) {
87             if ($key != 'id') $this->assertTrue(isset($indexes[$index['name']]));
88         }
89         
90         $this->assertFalse(isset($indexes['special_idx_email1']));
91         $this->assertFalse(isset($indexes['special_idx_email2']));
92     }
93     
94     public function testIsADuplicateRecord()
95     {
96         $last_name = 'FooBar'.date("YmdHis");
97         
98         $focus = loadBean('Contacts');
99         $focus->last_name = $last_name;
100         $id = $focus->save(false);
101         
102         $focus = loadBean('Contacts');
103         $focus->last_name = $last_name;
104         
105         $idc = new ImportDuplicateCheck($focus);
106         
107         $this->assertTrue($idc->isADuplicateRecord(array('idx_contacts_del_last::last_name')));
108         
109         $focus->mark_deleted($id);
110     }
111     
112     public function testIsADuplicateRecordEmail()
113     {
114         $email = date("YmdHis").'@foobar.com';
115         
116         $focus = loadBean('Contacts');
117         $focus->email1 = $email;
118         $id = $focus->save(false);
119         
120         $focus = loadBean('Contacts');
121         $focus->email1 = $email;
122         
123         $idc = new ImportDuplicateCheck($focus);
124         
125         $this->assertTrue($idc->isADuplicateRecord(array('special_idx_email1')));
126         
127         $focus->mark_deleted($id);
128     }
129     
130     public function testIsADuplicateRecordNotFound()
131     {
132         $last_name = 'BadFooBar'.date("YmdHis");
133         
134         $focus = loadBean('Contacts');
135         $focus->last_name = $last_name;
136         
137         $idc = new ImportDuplicateCheck($focus);
138         
139         $this->assertFalse($idc->isADuplicateRecord(array('idx_contacts_del_last::'.$last_name)));
140     }
141     
142     public function testIsADuplicateRecordEmailNotFound()
143     {
144         $email = date("YmdHis").'@badfoobar.com';
145         
146         $focus = loadBean('Contacts');
147         $focus->email1 = $email;
148         
149         $idc = new ImportDuplicateCheck($focus);
150         
151         $this->assertFalse($idc->isADuplicateRecord(array('special_idx_email1')));
152     }
153
154     //make sure exclusion array is respected when displaying the list of available indexes for dupe checking
155     public function testExcludeIndexesFromDupeCheck()
156     {
157         //create the bean to test on
158         $focus = loadBean('Contacts');
159
160         //create the importDuplicateCheck object and get the list of duplicateCheckIndexes
161         $idc = new ImportDuplicateCheck($focus);
162
163         //get the list of importable indexes
164         $indexes = $import_indexes = $focus->getIndices();
165
166
167         //grab any custom indexes if they exist
168         if($focus->hasCustomFields()){
169             $custmIndexes = $focus->db->helper->get_indices($focus->table_name.'_cstm');
170             $indexes = array_merge($custmIndexes,$indexes);
171         }
172
173         //get list indexes to be displayed
174         $dupe_check_indexes = $idc->getDuplicateCheckIndexedFiles();
175
176         //Make sure that the indexes used for dupe checking honors the exclusion array.  At a minimum, all beans will have
177         //their id and teamset indexes excluded.
178         $this->assertTrue(count($indexes) > count($dupe_check_indexes), 'Indexes specified for exclusion are not getting excluded from getDuplicateCheckIndexedFiles()');
179     }
180
181
182     //make sure only selected indexes are checked for dupes
183     public function testCompareOnlySelectedIndexesFromDupeCheck()
184     {
185         //create a bean, values, populate and save
186         $focus = loadBean('Contacts');
187         $focus->first_name = 'first '.date("YmdHis");
188         $focus->last_name = 'last '.date("YmdHis");
189         $focus->assigned_user_id = '1';
190         $focus->save();
191         //because of fix 51264, stored beans can't be duplicates
192         $focus->id = null;
193
194         //create the importDuplicateCheck object and get the list of duplicateCheckIndexes
195         $idc = new ImportDuplicateCheck($focus);
196
197         //we are going to test agains the first name, last name, full name, and assigned to indexes
198         //to prove that only selected indexes are being used.
199
200         //lets do a straight dupe check with the same bean on first name, should return true
201         $this->assertTrue($idc->isADuplicateRecord(array('idx_cont_last_first::first_name')),'simulated check against first name index (idx_cont_last_first::first_name) failed  (returned false instead of true).');
202
203         //now lets test on full name index should also return true
204         $this->assertTrue($idc->isADuplicateRecord(array('full_name::full_name')),'first simulated check against full name index (full_name::full_name) failed (returned false instead of true).  This check means BOTH first AND last name must match.');
205
206         //now lets remove the first name and redo the check, should return false
207         $focus->first_name = '';
208         $idc = new ImportDuplicateCheck($focus);
209         $this->assertFalse($idc->isADuplicateRecord(array('idx_cont_last_first::first_name')),'simulated check against first name index (idx_cont_last_first::first_name) failed (returned true instead of false).  This is wrong because we removed the first name so there should be no match.');
210
211         //lets retest on full name index should return false now as first AND last do not match the original
212         $this->assertFalse($idc->isADuplicateRecord(array('full_name::full_name')),'second simulated check against full name index (full_name::full_name) failed (returned true instead of false).  This check means BOTH first AND last name must match and is wrong because we removed the first name so there should be no match.');
213
214         //now lets rename the contact and test on assigned user, should return true
215         $focus->first_name = 'first '.date("YmdHis");
216         $focus->last_name = 'last '.date("YmdHis");
217         $idc = new ImportDuplicateCheck($focus);
218         $this->assertTrue($idc->isADuplicateRecord(array('idx_del_id_user::assigned_user_id')),'simulated check against assigned user index (idx_del_id_user::assigned_user_id) failed (returned false instead of true).  This is wrong because we have not changed this field and it should remain a duplicate');
219
220         //we're done, lets delete the focus bean now
221         $focus->mark_deleted($focus->id);
222
223     }
224
225
226
227 }