]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/modules/Import/ImportFileTest.php
Added unit tests.
[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     public function testLoadEmptyFile()
71     {
72         $emptyFile = $GLOBALS['sugar_config']['import_dir'].'/empty'.date("YmdHis").'.csv';
73         file_put_contents($emptyFile,'');
74         
75         $importFile = new ImportFile($emptyFile,',','"',false);
76         
77         $this->assertFalse($importFile->getNextRow());
78         
79         $importFile = new ImportFile($emptyFile,',','',false);
80         
81         $this->assertFalse($importFile->getNextRow());
82         
83         @unlink($emptyFile);
84     }
85     
86     public function testDeleteFileOnDestroy()
87     {
88         $file = SugarTestImportUtilities::createFile(3,2);
89         $importFile = new ImportFile($file,',','"',true);
90         
91         unset($importFile);
92         
93         $this->assertFalse(is_file($file));
94     }
95     
96     public function testNotDeleteFileOnDestroy()
97     {
98         $file = SugarTestImportUtilities::createFile(3,2);
99         $importFile = new ImportFile($file,',','"',false);
100         
101         unset($importFile);
102         
103         $this->assertTrue(is_file($file));
104     }
105     
106     public function testGetFieldCount()
107     {
108         $file = SugarTestImportUtilities::createFile(3,2);
109         $importFile = new ImportFile($file,',','"');
110         
111         $importFile->getNextRow();
112         $this->assertEquals($importFile->getFieldCount(),2);
113     }
114     
115     public function testMarkRowAsDuplicate()
116     {
117         $file = SugarTestImportUtilities::createFile(3,2);
118         $importFile = new ImportFile($file,',','"');
119         
120         $row = $importFile->getNextRow();
121         $importFile->markRowAsDuplicate();
122         
123         $fp = sugar_fopen(ImportCacheFiles::getDuplicateFileName(),'r');
124         $duperow = fgetcsv($fp);
125         fclose($fp);
126         
127         $this->assertEquals($row,$duperow);
128     }
129     
130     public function testWriteError()
131     {
132         $file = SugarTestImportUtilities::createFile(3,2);
133         $importFile = new ImportFile($file,',','"');
134         
135         $row = $importFile->getNextRow();
136         $importFile->writeError('Some Error','field1','foo');
137         
138         $fp = sugar_fopen(ImportCacheFiles::getErrorFileName(),'r');
139         $errorrow = fgetcsv($fp);
140         fclose($fp);
141         
142         $this->assertEquals(array('Some Error','field1','foo',1),$errorrow);
143         
144         $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
145         $errorrecordrow = fgetcsv($fp);
146         fclose($fp);
147         
148         $this->assertEquals($row,$errorrecordrow);
149     }
150     
151     public function testWriteErrorRecord()
152     {
153         $file = SugarTestImportUtilities::createFile(3,2);
154         $importFile = new ImportFile($file,',','"');
155         
156         $row = $importFile->getNextRow();
157         $importFile->writeErrorRecord();
158         
159         $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
160         $errorrecordrow = fgetcsv($fp);
161         fclose($fp);
162         
163         $this->assertEquals($row,$errorrecordrow);
164     }
165     
166     public function testWriteStatus()
167     {
168         $file = SugarTestImportUtilities::createFile(3,2);
169         $importFile = new ImportFile($file,',','"');
170         
171         $importFile->getNextRow();
172         $importFile->writeError('Some Error','field1','foo');
173         $importFile->getNextRow();
174         $importFile->markRowAsDuplicate();
175         $importFile->getNextRow();
176         $importFile->markRowAsImported();
177         $importFile->writeStatus();
178         
179         $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
180         $statusrow = fgetcsv($fp);
181         fclose($fp);
182         
183         $this->assertEquals(array(3,1,1,1,0,$file),$statusrow);
184     }
185     
186     public function testWriteStatusWithTwoErrorsInOneRow()
187     {
188         $file = SugarTestImportUtilities::createFile(3,2);
189         $importFile = new ImportFile($file,',','"');
190         
191         $row = $importFile->getNextRow();
192         $importFile->writeError('Some Error','field1','foo');
193         $importFile->writeError('Some Error','field1','foo');
194         $importFile->getNextRow();
195         $importFile->markRowAsImported();
196         $importFile->getNextRow();
197         $importFile->markRowAsImported();
198         $importFile->writeStatus();
199         
200         $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
201         $statusrow = fgetcsv($fp);
202         fclose($fp);
203         
204         $this->assertEquals(array(3,1,0,2,0,$file),$statusrow);
205         
206         $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
207         $errorrecordrow = fgetcsv($fp);
208         
209         $this->assertEquals($row,$errorrecordrow);
210         $this->assertFalse(fgetcsv($fp),'Should be only 1 record in the csv file');
211         fclose($fp);
212         
213     }
214     
215     public function testWriteStatusWithTwoUpdatedRecords()
216     {
217         $file = SugarTestImportUtilities::createFile(3,2);
218         $importFile = new ImportFile($file,',','"');
219         
220         $row = $importFile->getNextRow();
221         $importFile->markRowAsImported(false);
222         $importFile->getNextRow();
223         $importFile->markRowAsImported();
224         $importFile->getNextRow();
225         $importFile->markRowAsImported();
226         $importFile->writeStatus();
227         
228         $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
229         $statusrow = fgetcsv($fp);
230         fclose($fp);
231         
232         $this->assertEquals(array(3,0,0,2,1,$file),$statusrow);
233     }
234     
235     public function testWriteRowToLastImport()
236     {
237         $file = SugarTestImportUtilities::createFile(3,2);
238         $importFile = new ImportFile($file,',','"');
239         $record = $importFile->writeRowToLastImport("Tests","Test","TestRunner");
240         
241         $query = "SELECT * 
242                         FROM users_last_import
243                         WHERE assigned_user_id = '{$GLOBALS['current_user']->id}'
244                             AND import_module = 'Tests'
245                             AND bean_type = 'Test'
246                             AND bean_id = 'TestRunner'
247                             AND id = '$record'
248                             AND deleted=0";
249
250                 $result = $GLOBALS['db']->query($query);
251         
252         $this->assertNotNull($GLOBALS['db']->fetchByAssoc($result));
253         
254         $query = "DELETE 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         $GLOBALS['db']->query($query);
262     }
263 }