2 require_once 'modules/Import/ImportFile.php';
4 class ImportFileTest extends Sugar_PHPUnit_Framework_TestCase
6 public function setUp()
8 $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
11 public function tearDown()
13 SugarTestImportUtilities::removeAllCreatedFiles();
14 SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
15 unset($GLOBALS['current_user']);
21 public function testFileImportNoEnclosers()
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'));
31 public function testLoadNonExistantFile()
33 $importFile = new ImportFile($GLOBALS['sugar_config']['import_dir'].'/thisfileisntthere'.date("YmdHis").'.csv',',','"');
34 $this->assertFalse($importFile->fileExists());
37 public function testLoadGoodFile()
39 $file = SugarTestImportUtilities::createFile(2,1);
40 $importFile = new ImportFile($file,',','"');
41 $this->assertTrue($importFile->fileExists());
47 public function testLoadFileWithByteOrderMark()
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'));
57 public function testGetNextRow()
59 $file = SugarTestImportUtilities::createFile(3,2);
60 $importFile = new ImportFile($file,',','"');
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);
70 public function testLoadEmptyFile()
72 $emptyFile = $GLOBALS['sugar_config']['import_dir'].'/empty'.date("YmdHis").'.csv';
73 file_put_contents($emptyFile,'');
75 $importFile = new ImportFile($emptyFile,',','"',false);
77 $this->assertFalse($importFile->getNextRow());
79 $importFile = new ImportFile($emptyFile,',','',false);
81 $this->assertFalse($importFile->getNextRow());
86 public function testDeleteFileOnDestroy()
88 $file = SugarTestImportUtilities::createFile(3,2);
89 $importFile = new ImportFile($file,',','"',true);
93 $this->assertFalse(is_file($file));
96 public function testNotDeleteFileOnDestroy()
98 $file = SugarTestImportUtilities::createFile(3,2);
99 $importFile = new ImportFile($file,',','"',false);
103 $this->assertTrue(is_file($file));
106 public function testGetFieldCount()
108 $file = SugarTestImportUtilities::createFile(3,2);
109 $importFile = new ImportFile($file,',','"');
111 $importFile->getNextRow();
112 $this->assertEquals($importFile->getFieldCount(),2);
115 public function testMarkRowAsDuplicate()
117 $file = SugarTestImportUtilities::createFile(3,2);
118 $importFile = new ImportFile($file,',','"');
120 $row = $importFile->getNextRow();
121 $importFile->markRowAsDuplicate();
123 $fp = sugar_fopen(ImportCacheFiles::getDuplicateFileName(),'r');
124 $duperow = fgetcsv($fp);
127 $this->assertEquals($row,$duperow);
130 public function testWriteError()
132 $file = SugarTestImportUtilities::createFile(3,2);
133 $importFile = new ImportFile($file,',','"');
135 $row = $importFile->getNextRow();
136 $importFile->writeError('Some Error','field1','foo');
138 $fp = sugar_fopen(ImportCacheFiles::getErrorFileName(),'r');
139 $errorrow = fgetcsv($fp);
142 $this->assertEquals(array('Some Error','field1','foo',1),$errorrow);
144 $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
145 $errorrecordrow = fgetcsv($fp);
148 $this->assertEquals($row,$errorrecordrow);
151 public function testWriteErrorRecord()
153 $file = SugarTestImportUtilities::createFile(3,2);
154 $importFile = new ImportFile($file,',','"');
156 $row = $importFile->getNextRow();
157 $importFile->writeErrorRecord();
159 $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
160 $errorrecordrow = fgetcsv($fp);
163 $this->assertEquals($row,$errorrecordrow);
166 public function testWriteStatus()
168 $file = SugarTestImportUtilities::createFile(3,2);
169 $importFile = new ImportFile($file,',','"');
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();
179 $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
180 $statusrow = fgetcsv($fp);
183 $this->assertEquals(array(3,1,1,1,0,$file),$statusrow);
186 public function testWriteStatusWithTwoErrorsInOneRow()
188 $file = SugarTestImportUtilities::createFile(3,2);
189 $importFile = new ImportFile($file,',','"');
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();
200 $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
201 $statusrow = fgetcsv($fp);
204 $this->assertEquals(array(3,1,0,2,0,$file),$statusrow);
206 $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
207 $errorrecordrow = fgetcsv($fp);
209 $this->assertEquals($row,$errorrecordrow);
210 $this->assertFalse(fgetcsv($fp),'Should be only 1 record in the csv file');
215 public function testWriteStatusWithTwoUpdatedRecords()
217 $file = SugarTestImportUtilities::createFile(3,2);
218 $importFile = new ImportFile($file,',','"');
220 $row = $importFile->getNextRow();
221 $importFile->markRowAsImported(false);
222 $importFile->getNextRow();
223 $importFile->markRowAsImported();
224 $importFile->getNextRow();
225 $importFile->markRowAsImported();
226 $importFile->writeStatus();
228 $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
229 $statusrow = fgetcsv($fp);
232 $this->assertEquals(array(3,0,0,2,1,$file),$statusrow);
235 public function testWriteRowToLastImport()
237 $file = SugarTestImportUtilities::createFile(3,2);
238 $importFile = new ImportFile($file,',','"');
239 $record = $importFile->writeRowToLastImport("Tests","Test","TestRunner");
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'
250 $result = $GLOBALS['db']->query($query);
252 $this->assertNotNull($GLOBALS['db']->fetchByAssoc($result));
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'
261 $GLOBALS['db']->query($query);