]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/modules/Import/ImportFileTest.php
Release 6.1.5
[Github/sugarcrm.git] / tests / modules / Import / ImportFileTest.php
1 <?php
2 require_once 'modules/Import/ImportFile.php';
3
4 class ImportFileTest extends Sugar_PHPUnit_Framework_TestCase
5 {
6         public function setUp()
7         {
8         $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
9     }
10     
11     public function tearDown()
12     {
13         SugarTestImportUtilities::removeAllCreatedFiles();
14         SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
15         unset($GLOBALS['current_user']);
16     }
17     
18     /**
19          * @group bug23380
20          */
21         public function testFileImportNoEnclosers()
22     {
23         $file = SugarTestImportUtilities::createFile(2,1);
24         $importFile = new ImportFile($file,',','');
25         $row = $importFile->getNextRow();
26         $this->assertEquals($row, array('foo00'));
27         $row = $importFile->getNextRow();
28         $this->assertEquals($row,array('foo10'));
29     }
30     
31     public function testLoadNonExistantFile()
32     {
33         $importFile = new ImportFile($GLOBALS['sugar_config']['import_dir'].'/thisfileisntthere'.date("YmdHis").'.csv',',','"');
34         $this->assertFalse($importFile->fileExists());
35     }
36     
37     public function testLoadGoodFile()
38     {
39         $file = SugarTestImportUtilities::createFile(2,1);
40         $importFile = new ImportFile($file,',','"');
41         $this->assertTrue($importFile->fileExists());
42     }
43     
44     /**
45      * @ticket 39494
46      */
47     public function testLoadFileWithByteOrderMark()
48     {
49         $importFile = new ImportFile('tests/modules/Import/Bug39494ImportFile.txt',"\t",'',false);
50         $this->assertTrue($importFile->fileExists());
51         $row = $importFile->getNextRow();
52         $this->assertEquals($row,array('name','city'));
53         $row = $importFile->getNextRow();
54         $this->assertEquals($row,array('tester1','wuhan'));
55     }
56     
57     public function testGetNextRow()
58     {
59         $file = SugarTestImportUtilities::createFile(3,2);
60         $importFile = new ImportFile($file,',','"');
61         
62         $row = $importFile->getNextRow();
63         $this->assertEquals(array("foo00","foo01"),$row);
64         $row = $importFile->getNextRow();
65         $this->assertEquals(array("foo10","foo11"),$row);
66         $row = $importFile->getNextRow();
67         $this->assertEquals(array("foo20","foo21"),$row);
68     }
69     
70     /**
71          * @ticket 41361
72          */
73     public function testGetNextRowWithEOL()
74     {
75         $file = SugarTestImportUtilities::createFileWithEOL(1, 1);
76         $importFile = new ImportFile($file,',','"');
77         $row = $importFile->getNextRow();
78         // both \r\n and \n should be properly replaced with PHP_EOL
79         $this->assertEquals(array("start0".PHP_EOL."0".PHP_EOL."end"), $row);
80     }
81     
82     public function testLoadEmptyFile()
83     {
84         $emptyFile = $GLOBALS['sugar_config']['import_dir'].'/empty'.date("YmdHis").'.csv';
85         file_put_contents($emptyFile,'');
86         
87         $importFile = new ImportFile($emptyFile,',','"',false);
88         
89         $this->assertFalse($importFile->getNextRow());
90         
91         $importFile = new ImportFile($emptyFile,',','',false);
92         
93         $this->assertFalse($importFile->getNextRow());
94         
95         @unlink($emptyFile);
96     }
97     
98     public function testDeleteFileOnDestroy()
99     {
100         $file = SugarTestImportUtilities::createFile(3,2);
101         $importFile = new ImportFile($file,',','"',true);
102         
103         unset($importFile);
104         
105         $this->assertFalse(is_file($file));
106     }
107     
108     public function testNotDeleteFileOnDestroy()
109     {
110         $file = SugarTestImportUtilities::createFile(3,2);
111         $importFile = new ImportFile($file,',','"',false);
112         
113         unset($importFile);
114         
115         $this->assertTrue(is_file($file));
116     }
117     
118     public function testGetFieldCount()
119     {
120         $file = SugarTestImportUtilities::createFile(3,2);
121         $importFile = new ImportFile($file,',','"');
122         
123         $importFile->getNextRow();
124         $this->assertEquals($importFile->getFieldCount(),2);
125     }
126     
127     public function testMarkRowAsDuplicate()
128     {
129         $file = SugarTestImportUtilities::createFile(3,2);
130         $importFile = new ImportFile($file,',','"');
131         
132         $row = $importFile->getNextRow();
133         $importFile->markRowAsDuplicate();
134         
135         $fp = sugar_fopen(ImportCacheFiles::getDuplicateFileName(),'r');
136         $duperow = fgetcsv($fp);
137         fclose($fp);
138         
139         $this->assertEquals($row,$duperow);
140     }
141     
142     public function testWriteError()
143     {
144         $file = SugarTestImportUtilities::createFile(3,2);
145         $importFile = new ImportFile($file,',','"');
146         
147         $row = $importFile->getNextRow();
148         $importFile->writeError('Some Error','field1','foo');
149         
150         $fp = sugar_fopen(ImportCacheFiles::getErrorFileName(),'r');
151         $errorrow = fgetcsv($fp);
152         fclose($fp);
153         
154         $this->assertEquals(array('Some Error','field1','foo',1),$errorrow);
155         
156         $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
157         $errorrecordrow = fgetcsv($fp);
158         fclose($fp);
159         
160         $this->assertEquals($row,$errorrecordrow);
161     }
162     
163     public function testWriteErrorRecord()
164     {
165         $file = SugarTestImportUtilities::createFile(3,2);
166         $importFile = new ImportFile($file,',','"');
167         
168         $row = $importFile->getNextRow();
169         $importFile->writeErrorRecord();
170         
171         $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
172         $errorrecordrow = fgetcsv($fp);
173         fclose($fp);
174         
175         $this->assertEquals($row,$errorrecordrow);
176     }
177     
178     public function testWriteStatus()
179     {
180         $file = SugarTestImportUtilities::createFile(3,2);
181         $importFile = new ImportFile($file,',','"');
182         
183         $importFile->getNextRow();
184         $importFile->writeError('Some Error','field1','foo');
185         $importFile->getNextRow();
186         $importFile->markRowAsDuplicate();
187         $importFile->getNextRow();
188         $importFile->markRowAsImported();
189         $importFile->writeStatus();
190         
191         $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
192         $statusrow = fgetcsv($fp);
193         fclose($fp);
194         
195         $this->assertEquals(array(3,1,1,1,0,$file),$statusrow);
196     }
197     
198     public function testWriteStatusWithTwoErrorsInOneRow()
199     {
200         $file = SugarTestImportUtilities::createFile(3,2);
201         $importFile = new ImportFile($file,',','"');
202         
203         $row = $importFile->getNextRow();
204         $importFile->writeError('Some Error','field1','foo');
205         $importFile->writeError('Some Error','field1','foo');
206         $importFile->getNextRow();
207         $importFile->markRowAsImported();
208         $importFile->getNextRow();
209         $importFile->markRowAsImported();
210         $importFile->writeStatus();
211         
212         $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
213         $statusrow = fgetcsv($fp);
214         fclose($fp);
215         
216         $this->assertEquals(array(3,1,0,2,0,$file),$statusrow);
217         
218         $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
219         $errorrecordrow = fgetcsv($fp);
220         
221         $this->assertEquals($row,$errorrecordrow);
222         $this->assertFalse(fgetcsv($fp),'Should be only 1 record in the csv file');
223         fclose($fp);
224         
225     }
226     
227     public function testWriteStatusWithTwoUpdatedRecords()
228     {
229         $file = SugarTestImportUtilities::createFile(3,2);
230         $importFile = new ImportFile($file,',','"');
231         
232         $row = $importFile->getNextRow();
233         $importFile->markRowAsImported(false);
234         $importFile->getNextRow();
235         $importFile->markRowAsImported();
236         $importFile->getNextRow();
237         $importFile->markRowAsImported();
238         $importFile->writeStatus();
239         
240         $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
241         $statusrow = fgetcsv($fp);
242         fclose($fp);
243         
244         $this->assertEquals(array(3,0,0,2,1,$file),$statusrow);
245     }
246     
247     public function testWriteRowToLastImport()
248     {
249         $file = SugarTestImportUtilities::createFile(3,2);
250         $importFile = new ImportFile($file,',','"');
251         $record = $importFile->writeRowToLastImport("Tests","Test","TestRunner");
252         
253         $query = "SELECT * 
254                         FROM users_last_import
255                         WHERE assigned_user_id = '{$GLOBALS['current_user']->id}'
256                             AND import_module = 'Tests'
257                             AND bean_type = 'Test'
258                             AND bean_id = 'TestRunner'
259                             AND id = '$record'
260                             AND deleted=0";
261
262                 $result = $GLOBALS['db']->query($query);
263         
264         $this->assertNotNull($GLOBALS['db']->fetchByAssoc($result));
265         
266         $query = "DELETE FROM users_last_import
267                         WHERE assigned_user_id = '{$GLOBALS['current_user']->id}'
268                             AND import_module = 'Tests'
269                             AND bean_type = 'Test'
270                             AND bean_id = 'TestRunner'
271                             AND id = '$record'
272                             AND deleted=0";
273         $GLOBALS['db']->query($query);
274     }
275 }