FilesLibTest.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. <?php
  2. /* Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
  3. * Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
  4. * Copyright (C) 2023 Alexandre Janniaux <alexandre.janniaux@gmail.com>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  18. * or see https://www.gnu.org/
  19. */
  20. /**
  21. * \file test/phpunit/FilesLibTest.php
  22. * \ingroup test
  23. * \brief PHPUnit test
  24. * \remarks To run this script as CLI: phpunit filename.php
  25. */
  26. global $conf,$user,$langs,$db;
  27. //define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
  28. //require_once 'PHPUnit/Autoload.php';
  29. require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
  30. require_once dirname(__FILE__).'/../../htdocs/core/lib/files.lib.php';
  31. if (empty($user->id)) {
  32. print "Load permissions for admin user nb 1\n";
  33. $user->fetch(1);
  34. $user->getrights();
  35. }
  36. $conf->global->MAIN_DISABLE_ALL_MAILS=1;
  37. /**
  38. * Class for PHPUnit tests
  39. *
  40. * @backupGlobals disabled
  41. * @backupStaticAttributes enabled
  42. * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased.
  43. */
  44. class FilesLibTest extends PHPUnit\Framework\TestCase
  45. {
  46. protected $savconf;
  47. protected $savuser;
  48. protected $savlangs;
  49. protected $savdb;
  50. /**
  51. * Constructor
  52. * We save global variables into local variables
  53. *
  54. * @param string $name Name
  55. * @return FilesLibTest
  56. */
  57. public function __construct($name = '')
  58. {
  59. parent::__construct($name);
  60. //$this->sharedFixture
  61. global $conf,$user,$langs,$db;
  62. $this->savconf=$conf;
  63. $this->savuser=$user;
  64. $this->savlangs=$langs;
  65. $this->savdb=$db;
  66. print __METHOD__." db->type=".$db->type." user->id=".$user->id;
  67. //print " - db ".$db->db;
  68. print "\n";
  69. }
  70. /**
  71. * setUpBeforeClass
  72. *
  73. * @return void
  74. */
  75. public static function setUpBeforeClass(): void
  76. {
  77. global $conf,$user,$langs,$db;
  78. $db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
  79. print __METHOD__."\n";
  80. }
  81. /**
  82. * tearDownAfterClass
  83. *
  84. * @return void
  85. */
  86. public static function tearDownAfterClass(): void
  87. {
  88. global $conf,$user,$langs,$db;
  89. $db->rollback();
  90. print __METHOD__."\n";
  91. }
  92. /**
  93. * Init phpunit tests
  94. *
  95. * @return void
  96. */
  97. protected function setUp(): void
  98. {
  99. global $conf,$user,$langs,$db;
  100. $conf=$this->savconf;
  101. $user=$this->savuser;
  102. $langs=$this->savlangs;
  103. $db=$this->savdb;
  104. print __METHOD__."\n";
  105. }
  106. /**
  107. * End phpunit tests
  108. *
  109. * @return void
  110. */
  111. protected function tearDown(): void
  112. {
  113. print __METHOD__."\n";
  114. }
  115. /**
  116. * testDolBasename
  117. *
  118. * @return void
  119. */
  120. public function testDolBasename()
  121. {
  122. global $conf,$user,$langs,$db;
  123. $conf=$this->savconf;
  124. $user=$this->savuser;
  125. $langs=$this->savlangs;
  126. $db=$this->savdb;
  127. $result=dol_basename('adir/afile');
  128. print __METHOD__." result=".$result."\n";
  129. $this->assertEquals('afile', $result);
  130. $result=dol_basename('adir/afile/');
  131. print __METHOD__." result=".$result."\n";
  132. $this->assertEquals('afile', $result);
  133. $result=dol_basename('adir/νεο'); // With cyrillic data. Here basename fails to return correct value
  134. print __METHOD__." result=".$result."\n";
  135. $this->assertEquals('νεο', $result);
  136. $result=dol_basename('adir/νεο/'); // With cyrillic data. Here basename fails to return correct value
  137. print __METHOD__." result=".$result."\n";
  138. $this->assertEquals('νεο', $result);
  139. }
  140. /**
  141. * testDolCountNbOfLine
  142. *
  143. * @return int
  144. */
  145. public function testDolCountNbOfLine()
  146. {
  147. global $conf,$user,$langs,$db;
  148. $conf=$this->savconf;
  149. $user=$this->savuser;
  150. $langs=$this->savlangs;
  151. $db=$this->savdb;
  152. $file=dirname(__FILE__).'/Example_import_company_1.csv';
  153. $result=dol_count_nb_of_line($file);
  154. print __METHOD__." result=".$result."\n";
  155. $this->assertEquals(3, $result);
  156. return $result;
  157. }
  158. /**
  159. * testDolIsFileDir
  160. *
  161. * @return int
  162. */
  163. public function testDolIsFileDir()
  164. {
  165. global $conf,$user,$langs,$db;
  166. $conf=$this->savconf;
  167. $user=$this->savuser;
  168. $langs=$this->savlangs;
  169. $db=$this->savdb;
  170. $file=dirname(__FILE__).'/Example_import_company_1.csv';
  171. $result=dol_is_file($file);
  172. print __METHOD__." result=".$result."\n";
  173. $this->assertTrue($result);
  174. $result=dol_is_dir($file);
  175. print __METHOD__." result=".$result."\n";
  176. $this->assertFalse($result);
  177. return $result;
  178. }
  179. /**
  180. * testDolOther
  181. *
  182. * @return boolean
  183. */
  184. public function testDolOther()
  185. {
  186. global $conf,$user,$langs,$db;
  187. $conf=$this->savconf;
  188. $user=$this->savuser;
  189. $langs=$this->savlangs;
  190. $db=$this->savdb;
  191. $url='http://www.dolibarr.org';
  192. $result=dol_is_url($url);
  193. print __METHOD__." result=".$result."\n";
  194. $this->assertTrue($result);
  195. $url='https://www.dolibarr.org';
  196. $result=dol_is_url($url);
  197. print __METHOD__." result=".$result."\n";
  198. $this->assertTrue($result);
  199. $url='file://www.dolibarr.org/download/file.zip';
  200. $result=dol_is_url($url);
  201. print __METHOD__." result=".$result."\n";
  202. $this->assertTrue($result);
  203. return $result;
  204. }
  205. /**
  206. * testDolMimeType
  207. *
  208. * @return void
  209. */
  210. public function testDolMimeType()
  211. {
  212. global $conf,$user,$langs,$db;
  213. $conf=$this->savconf;
  214. $user=$this->savuser;
  215. $langs=$this->savlangs;
  216. $db=$this->savdb;
  217. // file.png
  218. $result=dol_mimetype('file.png', '', 0);
  219. $this->assertEquals('image/png', $result);
  220. $result=dol_mimetype('file.png', '', 1);
  221. $this->assertEquals('png', $result);
  222. $result=dol_mimetype('file.png', '', 2);
  223. $this->assertEquals('image.png', $result);
  224. $result=dol_mimetype('file.png', '', 3);
  225. $this->assertEquals('', $result);
  226. // file.odt
  227. $result=dol_mimetype('file.odt', '', 0);
  228. $this->assertEquals('application/vnd.oasis.opendocument.text', $result);
  229. $result=dol_mimetype('file.odt', '', 1);
  230. $this->assertEquals('vnd.oasis.opendocument.text', $result);
  231. $result=dol_mimetype('file.odt', '', 2);
  232. $this->assertEquals('ooffice.png', $result);
  233. $result=dol_mimetype('file.odt', '', 3);
  234. $this->assertEquals('', $result);
  235. // file.php
  236. $result=dol_mimetype('file.php', '', 0);
  237. $this->assertEquals('text/plain', $result);
  238. $result=dol_mimetype('file.php', '', 1);
  239. $this->assertEquals('plain', $result);
  240. $result=dol_mimetype('file.php', '', 2);
  241. $this->assertEquals('php.png', $result);
  242. $result=dol_mimetype('file.php', '', 3);
  243. $this->assertEquals('php', $result);
  244. // file.php.noexe
  245. $result=dol_mimetype('file.php.noexe', '', 0);
  246. $this->assertEquals('text/plain', $result);
  247. }
  248. /**
  249. * testDolDeleteDir
  250. *
  251. * @return void
  252. */
  253. public function testDolDeleteDir()
  254. {
  255. global $conf,$user,$langs,$db;
  256. $conf=$this->savconf;
  257. $user=$this->savuser;
  258. $langs=$this->savlangs;
  259. $db=$this->savdb;
  260. $dirout=$conf->admin->dir_temp.'/test';
  261. $dirout2=$conf->admin->dir_temp.'/test2';
  262. $count=0;
  263. $result=dol_delete_dir_recursive($dirout, $count); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
  264. print __METHOD__." result=".$result."\n";
  265. $this->assertGreaterThanOrEqual(0, $result);
  266. $count=0;
  267. $countdeleted=0;
  268. $result=dol_delete_dir_recursive($dirout, $count, 1, 0, $countdeleted); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
  269. print __METHOD__." result=".$result."\n";
  270. $this->assertGreaterThanOrEqual(0, $result);
  271. $this->assertGreaterThanOrEqual(0, $countdeleted);
  272. dol_mkdir($dirout2);
  273. $count=0;
  274. $countdeleted=0;
  275. $result=dol_delete_dir_recursive($dirout2, $count, 1, 0, $countdeleted); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
  276. print __METHOD__." result=".$result."\n";
  277. $this->assertGreaterThanOrEqual(1, $result);
  278. $this->assertGreaterThanOrEqual(1, $countdeleted);
  279. }
  280. /**
  281. * testDolCopyMoveDelete
  282. *
  283. * @return void
  284. */
  285. public function testDolCopyMoveDelete()
  286. {
  287. global $conf,$user,$langs,$db;
  288. $conf=$this->savconf;
  289. $user=$this->savuser;
  290. $langs=$this->savlangs;
  291. $db=$this->savdb;
  292. $file=dirname(__FILE__).'/Example_import_company_1.csv';
  293. $result=dol_copy($file, '/adir/that/does/not/exists/file.csv');
  294. print __METHOD__." result=".$result."\n";
  295. $this->assertLessThan(0, $result, 'copy dir that does not exists'); // We should have error
  296. $result=dol_copy($file, $conf->admin->dir_temp.'/file.csv', 0, 1);
  297. print __METHOD__." result=".$result."\n";
  298. $this->assertGreaterThanOrEqual(1, $result, 'copy file ('.$file.') into a dir that exists ('.$conf->admin->dir_temp.'/file.csv)'); // Should be 1
  299. // Again to test with overwriting=0
  300. $result=dol_copy($file, $conf->admin->dir_temp.'/file.csv', 0, 0);
  301. print __METHOD__." result=".$result."\n";
  302. $this->assertEquals(0, $result, 'copy destination already exists, no overwrite'); // Should be 0
  303. // Again to test with overwriting=1
  304. $result=dol_copy($file, $conf->admin->dir_temp.'/file.csv', 0, 1);
  305. print __METHOD__." result=".$result."\n";
  306. $this->assertGreaterThanOrEqual(1, $result, 'copy destination already exists, overwrite'); // Should be 1
  307. // To test a move that should work
  308. $result=dol_move($conf->admin->dir_temp.'/file.csv', $conf->admin->dir_temp.'/file2.csv', 0, 1);
  309. print __METHOD__." result=".$result."\n";
  310. $this->assertTrue($result, 'move with default mask');
  311. // To test a move that should work with forced mask
  312. $result=dol_move($conf->admin->dir_temp.'/file2.csv', $conf->admin->dir_temp.'/file3.csv', '0754', 1); // file should be rwxr-wr--
  313. print __METHOD__." result=".$result."\n";
  314. $this->assertTrue($result, 'move with forced mask');
  315. // To test a delete that should success
  316. $result=dol_delete_file($conf->admin->dir_temp.'/file3.csv');
  317. print __METHOD__." result=".$result."\n";
  318. $this->assertTrue($result, 'delete file');
  319. // Again to test there is error when deleting a non existing file with option disableglob
  320. $result=dol_delete_file($conf->admin->dir_temp.'/file3.csv', 1, 1);
  321. print __METHOD__." result=".$result."\n";
  322. $this->assertFalse($result, 'delete file that does not exists with disableglo must return ko');
  323. // Again to test there is no error when deleting a non existing file without option disableglob
  324. $result=dol_delete_file($conf->admin->dir_temp.'/file3csv', 0, 1);
  325. print __METHOD__." result=".$result."\n";
  326. $this->assertTrue($result, 'delete file that does not exists without disabling glob must return ok');
  327. // Test copy with special char / delete with blob
  328. $result=dol_copy($file, $conf->admin->dir_temp.'/file with [x] and é.csv', 0, 1);
  329. print __METHOD__." result=".$result."\n";
  330. $this->assertGreaterThanOrEqual(1, $result, 'copy file with special chars, overwrite'); // Should be 1
  331. // Try to delete using a glob criteria
  332. $result=dol_delete_file($conf->admin->dir_temp.'/file with [x]*é.csv');
  333. print __METHOD__." result=".$result."\n";
  334. $this->assertTrue($result, 'delete file using glob');
  335. }
  336. /**
  337. * testDolCompressUnCompress
  338. *
  339. * @return void
  340. */
  341. public function testDolCompressUnCompress()
  342. {
  343. global $conf,$user,$langs,$db;
  344. $conf=$this->savconf;
  345. $user=$this->savuser;
  346. $langs=$this->savlangs;
  347. $db=$this->savdb;
  348. // Format zip
  349. print "\n";
  350. print 'testDolCompressUnCompress zip'."\n";
  351. $format='zip';
  352. $filein=dirname(__FILE__).'/Example_import_company_1.csv';
  353. $fileout=$conf->admin->dir_temp.'/test.'.$format;
  354. $dirout=$conf->admin->dir_temp.'/testdir'.$format;
  355. dol_delete_file($fileout);
  356. $count=0;
  357. dol_delete_dir_recursive($dirout, $count, 1);
  358. $errorstring = '';
  359. dol_mkdir($conf->admin->dir_temp);
  360. $conf->global->MAIN_ENABLE_LOG_TO_HTML=1;
  361. $conf->modules['syslog'] = 'syslog';
  362. $_REQUEST['logtohtml']=1;
  363. $conf->logbuffer=array();
  364. $result=dol_compress_file($filein, $fileout, $format, $errorstring);
  365. print __METHOD__." compress result=".$result."\n";
  366. print join(', ', $conf->logbuffer);
  367. $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_file on ".$filein." into ".$fileout." : ".$errorstring);
  368. $result=dol_uncompress($fileout, $dirout);
  369. print __METHOD__." uncompress result=".join(',', $result)."\n";
  370. print join(', ', $conf->logbuffer);
  371. $this->assertEquals(0, count($result), "Pb with dol_uncompress_file of file ".$fileout);
  372. // Format gz
  373. print "\n";
  374. print 'testDolCompressUnCompress gz'."\n";
  375. $format='gz';
  376. $filein=dirname(__FILE__).'/Example_import_company_1.csv';
  377. $fileout=$conf->admin->dir_temp.'/test.'.$format;
  378. $dirout=$conf->admin->dir_temp.'/testdir'.$format;
  379. dol_delete_file($fileout);
  380. $count=0;
  381. dol_delete_dir_recursive($dirout, $count, 1);
  382. $errorstring = '';
  383. dol_mkdir($conf->admin->dir_temp);
  384. $conf->global->MAIN_ENABLE_LOG_TO_HTML=1;
  385. $conf->modules['syslog'] = 'syslog';
  386. $_REQUEST['logtohtml']=1;
  387. $conf->logbuffer=array();
  388. $result=dol_compress_file($filein, $fileout, $format, $errorstring);
  389. print __METHOD__." compress result=".$result."\n";
  390. print join(', ', $conf->logbuffer);
  391. $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_file on ".$filein." into ".$fileout." : ".$errorstring);
  392. $result=dol_uncompress($fileout, $dirout);
  393. print __METHOD__." uncompress result=".join(',', $result)."\n";
  394. print join(', ', $conf->logbuffer);
  395. $this->assertEquals(0, count($result), "Pb with dol_uncompress_file of file ".$fileout);
  396. // Test compression of a directory
  397. // $dirout is $conf->admin->dir_temp.'/testdirgz'
  398. $excludefiles = '/(\.back|\.old|\.log|documents[\/\\\]admin[\/\\\]documents[\/\\\])/i';
  399. if (preg_match($excludefiles, 'a/temp/b')) { echo '----- Regex OK -----'."\n"; }
  400. $result=dol_compress_dir($dirout, $conf->admin->dir_temp.'/testcompressdirzip.zip', 'zip', $excludefiles);
  401. print __METHOD__." dol_compress_dir result=".$result."\n";
  402. print join(', ', $conf->logbuffer);
  403. $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_dir of ".$dirout." into ".$conf->admin->dir_temp.'/testdir.zip');
  404. }
  405. /**
  406. * testDolCheckSecureAccessDocument
  407. *
  408. * @return void
  409. */
  410. public function testDolCheckSecureAccessDocument()
  411. {
  412. global $conf,$user,$langs,$db;
  413. $conf=$this->savconf;
  414. $user=$this->savuser;
  415. $langs=$this->savlangs;
  416. $db=$this->savdb;
  417. //$dummyuser=new User($db);
  418. //$result=restrictedArea($dummyuser,'societe');
  419. // We save user properties
  420. $savpermlire = $user->hasRight('facture', 'lire');
  421. $savpermcreer = $user->hasRight('facture', 'creer');
  422. if (empty($user->rights->facture)) {
  423. $user->rights->facture = new stdClass();
  424. }
  425. // Check access to SPECIMEN
  426. $user->rights->facture->lire = 0;
  427. $user->rights->facture->creer = 0;
  428. $filename='SPECIMEN.pdf'; // Filename relative to module part
  429. $result=dol_check_secure_access_document('facture', $filename, 0, '', '', 'read');
  430. $this->assertEquals(1, $result['accessallowed']);
  431. // Check read permission
  432. $user->rights->facture->lire = 1;
  433. $user->rights->facture->creer = 1;
  434. $filename='FA010101/FA010101.pdf'; // Filename relative to module part
  435. $result=dol_check_secure_access_document('facture', $filename, 0, '', '', 'read');
  436. $this->assertEquals(1, $result['accessallowed']);
  437. $user->rights->facture->lire = 0;
  438. $user->rights->facture->creer = 0;
  439. $filename='FA010101/FA010101.pdf'; // Filename relative to module part
  440. $result=dol_check_secure_access_document('facture', $filename, 0, '', '', 'read');
  441. $this->assertEquals(0, $result['accessallowed']);
  442. // Check write permission
  443. $user->rights->facture->lire = 0;
  444. $user->rights->facture->creer = 0;
  445. $filename='FA010101/FA010101.pdf'; // Filename relative to module part
  446. $result=dol_check_secure_access_document('facture', $filename, 0, '', '', 'write');
  447. $this->assertEquals(0, $result['accessallowed']);
  448. $user->rights->facture->lire = 1;
  449. $user->rights->facture->creer = 1;
  450. $filename='FA010101/FA010101.pdf'; // Filename relative to module part
  451. $result=dol_check_secure_access_document('facture', $filename, 0, '', '', 'write');
  452. $this->assertEquals(1, $result['accessallowed']);
  453. $user->rights->facture->lire = 1;
  454. $user->rights->facture->creer = 0;
  455. $filename='FA010101/FA010101.pdf'; // Filename relative to module part
  456. $result=dol_check_secure_access_document('facture', $filename, 0, '', '', 'write');
  457. $this->assertEquals(0, $result['accessallowed']);
  458. // We restore user properties
  459. $user->rights->facture->lire = $savpermlire;
  460. $user->rights->facture->creer = $savpermcreer;
  461. }
  462. /**
  463. * testDolDirMove
  464. *
  465. * @return void
  466. */
  467. public function testDolDirMove()
  468. {
  469. global $conf,$user,$langs,$db;
  470. $conf=$this->savconf;
  471. $user=$this->savuser;
  472. $langs=$this->savlangs;
  473. $db=$this->savdb;
  474. // To test a move of empty directory that should work
  475. $dirsrcpath = $conf->admin->dir_temp.'/directory';
  476. $dirdestpath = $conf->admin->dir_temp.'/directory2';
  477. $file=dirname(__FILE__).'/Example_import_company_1.csv';
  478. dol_mkdir($dirsrcpath);
  479. dol_delete_dir_recursive($dirdestpath, 0, 1);
  480. $result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
  481. print __METHOD__." result=".$result."\n";
  482. $this->assertTrue($result, 'move of directory with empty directory');
  483. // To test a move on existing directory with overwrite
  484. dol_mkdir($dirsrcpath);
  485. $result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
  486. print __METHOD__." result=".$result."\n";
  487. $this->assertTrue($result, 'move of directory on existing directory with empty directory');
  488. // To test a move on existing directory without overwrite
  489. dol_mkdir($dirsrcpath);
  490. $result=dol_move_dir($dirsrcpath, $dirdestpath, 0, 1, 1);
  491. print __METHOD__." result=".$result."\n";
  492. $this->assertFalse($result, 'move of directory on existing directory without overwrite');
  493. // To test a move with a file to rename in src directory
  494. dol_mkdir($dirsrcpath);
  495. dol_delete_dir_recursive($dirdestpath, 0, 1);
  496. dol_copy($file, $dirsrcpath.'/directory_file.csv');
  497. $result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
  498. print __METHOD__." result=".$result."\n";
  499. $this->assertTrue($result, 'move of directory with file in directory');
  500. // To test a move without a file to rename in src directory
  501. dol_mkdir($dirsrcpath);
  502. dol_delete_dir_recursive($dirdestpath, 0, 1);
  503. dol_copy($file, $dirsrcpath.'/file.csv');
  504. $result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
  505. print __METHOD__." result=".$result."\n";
  506. $this->assertTrue($result, 'move of directory with file whitout rename needed in directory');
  507. // To test a move with a directory to rename in src directory
  508. dol_mkdir($dirsrcpath);
  509. dol_delete_dir_recursive($dirdestpath, 0, 1);
  510. dol_mkdir($dirsrcpath.'/directory');
  511. $result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
  512. print __METHOD__." result=".$result."\n";
  513. $this->assertTrue($result, 'move of directory with file with rename needed in directory');
  514. // To test a move without a directory to rename in src directory
  515. dol_mkdir($dirsrcpath);
  516. dol_delete_dir_recursive($dirdestpath, 0, 1);
  517. dol_mkdir($dirsrcpath.'/notorename');
  518. $result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
  519. print __METHOD__." result=".$result."\n";
  520. $this->assertTrue($result, 'move of directory with directory whitout rename needed in directory');
  521. }
  522. }