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);
73 public function testGetNextRowWithEOL()
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);
82 public function testLoadEmptyFile()
84 $emptyFile = $GLOBALS['sugar_config']['import_dir'].'/empty'.date("YmdHis").'.csv';
85 file_put_contents($emptyFile,'');
87 $importFile = new ImportFile($emptyFile,',','"',false);
89 $this->assertFalse($importFile->getNextRow());
91 $importFile = new ImportFile($emptyFile,',','',false);
93 $this->assertFalse($importFile->getNextRow());
98 public function testDeleteFileOnDestroy()
100 $file = SugarTestImportUtilities::createFile(3,2);
101 $importFile = new ImportFile($file,',','"',true);
105 $this->assertFalse(is_file($file));
108 public function testNotDeleteFileOnDestroy()
110 $file = SugarTestImportUtilities::createFile(3,2);
111 $importFile = new ImportFile($file,',','"',false);
115 $this->assertTrue(is_file($file));
118 public function testGetFieldCount()
120 $file = SugarTestImportUtilities::createFile(3,2);
121 $importFile = new ImportFile($file,',','"');
123 $importFile->getNextRow();
124 $this->assertEquals($importFile->getFieldCount(),2);
127 public function testMarkRowAsDuplicate()
129 $file = SugarTestImportUtilities::createFile(3,2);
130 $importFile = new ImportFile($file,',','"');
132 $row = $importFile->getNextRow();
133 $importFile->markRowAsDuplicate();
135 $fp = sugar_fopen(ImportCacheFiles::getDuplicateFileName(),'r');
136 $duperow = fgetcsv($fp);
139 $this->assertEquals($row,$duperow);
142 public function testWriteError()
144 $file = SugarTestImportUtilities::createFile(3,2);
145 $importFile = new ImportFile($file,',','"');
147 $row = $importFile->getNextRow();
148 $importFile->writeError('Some Error','field1','foo');
150 $fp = sugar_fopen(ImportCacheFiles::getErrorFileName(),'r');
151 $errorrow = fgetcsv($fp);
154 $this->assertEquals(array('Some Error','field1','foo',1),$errorrow);
156 $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
157 $errorrecordrow = fgetcsv($fp);
160 $this->assertEquals($row,$errorrecordrow);
163 public function testWriteErrorRecord()
165 $file = SugarTestImportUtilities::createFile(3,2);
166 $importFile = new ImportFile($file,',','"');
168 $row = $importFile->getNextRow();
169 $importFile->writeErrorRecord();
171 $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
172 $errorrecordrow = fgetcsv($fp);
175 $this->assertEquals($row,$errorrecordrow);
178 public function testWriteStatus()
180 $file = SugarTestImportUtilities::createFile(3,2);
181 $importFile = new ImportFile($file,',','"');
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();
191 $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
192 $statusrow = fgetcsv($fp);
195 $this->assertEquals(array(3,1,1,1,0,$file),$statusrow);
198 public function testWriteStatusWithTwoErrorsInOneRow()
200 $file = SugarTestImportUtilities::createFile(3,2);
201 $importFile = new ImportFile($file,',','"');
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();
212 $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
213 $statusrow = fgetcsv($fp);
216 $this->assertEquals(array(3,1,0,2,0,$file),$statusrow);
218 $fp = sugar_fopen(ImportCacheFiles::getErrorRecordsFileName(),'r');
219 $errorrecordrow = fgetcsv($fp);
221 $this->assertEquals($row,$errorrecordrow);
222 $this->assertFalse(fgetcsv($fp),'Should be only 1 record in the csv file');
227 public function testWriteStatusWithTwoUpdatedRecords()
229 $file = SugarTestImportUtilities::createFile(3,2);
230 $importFile = new ImportFile($file,',','"');
232 $row = $importFile->getNextRow();
233 $importFile->markRowAsImported(false);
234 $importFile->getNextRow();
235 $importFile->markRowAsImported();
236 $importFile->getNextRow();
237 $importFile->markRowAsImported();
238 $importFile->writeStatus();
240 $fp = sugar_fopen(ImportCacheFiles::getStatusFileName(),'r');
241 $statusrow = fgetcsv($fp);
244 $this->assertEquals(array(3,0,0,2,1,$file),$statusrow);
247 public function testWriteRowToLastImport()
249 $file = SugarTestImportUtilities::createFile(3,2);
250 $importFile = new ImportFile($file,',','"');
251 $record = $importFile->writeRowToLastImport("Tests","Test","TestRunner");
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'
262 $result = $GLOBALS['db']->query($query);
264 $this->assertNotNull($GLOBALS['db']->fetchByAssoc($result));
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'
273 $GLOBALS['db']->query($query);