HolidayTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <?php
  2. /* Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. * or see http://www.gnu.org/
  17. */
  18. /**
  19. * \file test/phpunit/HolidayTest.php
  20. * \ingroup test
  21. * \brief PHPUnit test
  22. * \remarks To run this script as CLI: phpunit filename.php
  23. */
  24. global $conf,$user,$langs,$db;
  25. //define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
  26. //require_once 'PHPUnit/Autoload.php';
  27. require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
  28. require_once dirname(__FILE__).'/../../htdocs/holiday/class/holiday.class.php';
  29. $langs->load("dict");
  30. if (empty($user->id))
  31. {
  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 HolidayTest 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. * @return HolidayTest
  55. */
  56. function __construct()
  57. {
  58. parent::__construct();
  59. //$this->sharedFixture
  60. global $conf,$user,$langs,$db;
  61. $this->savconf=$conf;
  62. $this->savuser=$user;
  63. $this->savlangs=$langs;
  64. $this->savdb=$db;
  65. print __METHOD__." db->type=".$db->type." user->id=".$user->id;
  66. //print " - db ".$db->db;
  67. print "\n";
  68. }
  69. // Static methods
  70. public static function setUpBeforeClass()
  71. {
  72. global $conf,$user,$langs,$db;
  73. $db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
  74. print __METHOD__."\n";
  75. }
  76. // tear down after class
  77. public static function tearDownAfterClass()
  78. {
  79. global $conf,$user,$langs,$db;
  80. $db->rollback();
  81. print __METHOD__."\n";
  82. }
  83. /**
  84. * Init phpunit tests
  85. *
  86. * @return void
  87. */
  88. protected function setUp()
  89. {
  90. global $conf,$user,$langs,$db;
  91. $conf=$this->savconf;
  92. $user=$this->savuser;
  93. $langs=$this->savlangs;
  94. $db=$this->savdb;
  95. print __METHOD__."\n";
  96. }
  97. /**
  98. * End phpunit tests
  99. *
  100. * @return void
  101. */
  102. protected function tearDown()
  103. {
  104. print __METHOD__."\n";
  105. }
  106. /**
  107. * testHolidayCreate
  108. *
  109. * @return int
  110. */
  111. public function testHolidayCreate()
  112. {
  113. global $conf,$user,$langs,$db;
  114. $conf=$this->savconf;
  115. $user=$this->savuser;
  116. $langs=$this->savlangs;
  117. $db=$this->savdb;
  118. $localobject=new Holiday($this->savdb);
  119. $localobject->initAsSpecimen();
  120. $result=$localobject->create($user);
  121. print __METHOD__." result=".$result."\n";
  122. $this->assertLessThan($result, 0);
  123. return $result;
  124. }
  125. /**
  126. * testHolidayFetch
  127. *
  128. * @param int $id Id of Holiday
  129. * @return int
  130. * @depends testHolidayCreate
  131. * The depends says test is run only if previous is ok
  132. */
  133. public function testHolidayFetch($id)
  134. {
  135. global $conf,$user,$langs,$db;
  136. $conf=$this->savconf;
  137. $user=$this->savuser;
  138. $langs=$this->savlangs;
  139. $db=$this->savdb;
  140. $localobject=new Holiday($this->savdb);
  141. $result=$localobject->fetch($id);
  142. print __METHOD__." id=".$id." result=".$result."\n";
  143. $this->assertLessThan($result, 0);
  144. return $localobject;
  145. }
  146. /**
  147. * testHolidayUpdate
  148. *
  149. * @param Holiday $localobject Holiday
  150. * @return int
  151. *
  152. * @depends testHolidayFetch
  153. * The depends says test is run only if previous is ok
  154. */
  155. public function testHolidayUpdate($localobject)
  156. {
  157. global $conf,$user,$langs,$db;
  158. $conf=$this->savconf;
  159. $user=$this->savuser;
  160. $langs=$this->savlangs;
  161. $db=$this->savdb;
  162. $localobject->oldcopy = clone $localobject;
  163. $localobject->note_private='New private note after update';
  164. $localobject->note_public='New public note after update';
  165. $localobject->lastname='New name';
  166. $localobject->firstname='New firstname';
  167. $localobject->address='New address';
  168. $localobject->zip='New zip';
  169. $localobject->town='New town';
  170. $localobject->country_id=2;
  171. //$localobject->status=0;
  172. $localobject->phone_pro='New tel pro';
  173. $localobject->phone_perso='New tel perso';
  174. $localobject->phone_mobile='New tel mobile';
  175. $localobject->fax='New fax';
  176. $localobject->email='newemail@newemail.com';
  177. $localobject->jabberid='New im id';
  178. $localobject->default_lang='es_ES';
  179. $result=$localobject->update($localobject->id,$user);
  180. print __METHOD__." id=".$localobject->id." result=".$result."\n";
  181. $this->assertLessThan($result, 0, 'Holiday::update error');
  182. $result=$localobject->update_note($localobject->note_private,'_private');
  183. print __METHOD__." id=".$localobject->id." result=".$result."\n";
  184. $this->assertLessThan($result, 0, 'Holiday::update_note (private) error');
  185. $result=$localobject->update_note($localobject->note_public, '_public');
  186. print __METHOD__." id=".$localobject->id." result=".$result."\n";
  187. $this->assertLessThan($result, 0, 'Holiday::update_note (public) error');
  188. $newobject=new Holiday($this->savdb);
  189. $result=$newobject->fetch($localobject->id);
  190. print __METHOD__." id=".$localobject->id." result=".$result."\n";
  191. $this->assertLessThan($result, 0, 'Holiday::fetch error');
  192. print __METHOD__." old=".$localobject->note." new=".$newobject->note."\n";
  193. $this->assertEquals($localobject->note, $newobject->note,'Holiday::update_note error compare note');
  194. //print __METHOD__." old=".$localobject->note_public." new=".$newobject->note_public."\n";
  195. //$this->assertEquals($localobject->note_public, $newobject->note_public);
  196. return $localobject;
  197. }
  198. /**
  199. * testHolidayOther
  200. *
  201. * @param Holiday $localobject Holiday
  202. * @return void
  203. *
  204. * @depends testHolidayUpdate
  205. * The depends says test is run only if previous is ok
  206. */
  207. public function testHolidayOther($localobject)
  208. {
  209. global $conf,$user,$langs,$db;
  210. $conf=$this->savconf;
  211. $user=$this->savuser;
  212. $langs=$this->savlangs;
  213. $db=$this->savdb;
  214. //$localobject->fetch($localobject->id);
  215. /*
  216. $result=$localobject->getNomUrl(1);
  217. print __METHOD__." id=".$localobject->id." result=".$result."\n";
  218. $this->assertNotEquals($result, '');
  219. $result=$localobject->getFullAddress(1);
  220. print __METHOD__." id=".$localobject->id." result=".$result."\n";
  221. $this->assertContains("New address\nNew zip New town\nBelgium", $result);
  222. $localobject->info($localobject->id);
  223. print __METHOD__." localobject->date_creation=".$localobject->date_creation."\n";
  224. $this->assertNotEquals($localobject->date_creation, '');
  225. */
  226. return $localobject->id;
  227. }
  228. /**
  229. * testHolidayDelete
  230. *
  231. * @param int $id Id of Holiday
  232. * @return void
  233. *
  234. * @depends testHolidayOther
  235. * The depends says test is run only if previous is ok
  236. */
  237. public function testHolidayDelete($id)
  238. {
  239. global $conf,$user,$langs,$db;
  240. $conf=$this->savconf;
  241. $user=$this->savuser;
  242. $langs=$this->savlangs;
  243. $db=$this->savdb;
  244. $localobject=new Holiday($this->savdb);
  245. $result=$localobject->fetch($id);
  246. $result=$localobject->delete(0);
  247. print __METHOD__." id=".$id." result=".$result."\n";
  248. $this->assertLessThan($result, 0);
  249. return $result;
  250. }
  251. /**
  252. * testVerifDateHolidayCP
  253. *
  254. * @return void
  255. */
  256. public function testVerifDateHolidayCP()
  257. {
  258. global $conf,$user,$langs,$db;
  259. $conf=$this->savconf;
  260. $user=$this->savuser;
  261. $langs=$this->savlangs;
  262. $db=$this->savdb;
  263. // Create a leave request the 1st morning only
  264. $localobjecta=new Holiday($this->savdb);
  265. $localobjecta->initAsSpecimen();
  266. $localobjecta->date_debut = dol_mktime(0, 0, 0, 1, 1, 2020);
  267. $localobjecta->date_fin = dol_mktime(0, 0, 0, 1, 1, 2020);
  268. $localobjecta->halfday = 1;
  269. $result=$localobjecta->create($user);
  270. // Create a leave request the 2 afternoon only
  271. $localobjectb=new Holiday($this->savdb);
  272. $localobjectb->initAsSpecimen();
  273. $localobjectb->date_debut = dol_mktime(0, 0, 0, 1, 2, 2020);
  274. $localobjectb->date_fin = dol_mktime(0, 0, 0, 1, 2, 2020);
  275. $localobjectb->halfday = -1;
  276. $result=$localobjectb->create($user);
  277. $date_debut = dol_mktime(0, 0, 0, 1, 1, 2020);
  278. $date_fin = dol_mktime(0, 0, 0, 1, 2, 2020);
  279. $localobjectc=new Holiday($this->savdb);
  280. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_debut, 0);
  281. $this->assertFalse($result, 'result should be false, there is overlapping, full day is not available.');
  282. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_fin, 0);
  283. $this->assertFalse($result, 'result should be false, there is overlapping, full day is not available.');
  284. $result=$localobjectc->verifDateHolidayCP($user->id, $date_fin, $date_fin, 0);
  285. $this->assertFalse($result, 'result should be false, there is overlapping, full day is not available.');
  286. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_debut, 1);
  287. $this->assertFalse($result, 'result should be false, there is overlapping, morning of first day is not available.');
  288. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_fin, 1);
  289. $this->assertFalse($result, 'result should be false, there is overlapping, morning of first day is not available.');
  290. $result=$localobjectc->verifDateHolidayCP($user->id, $date_fin, $date_fin, 1);
  291. $this->assertTrue($result, 'result should be true, there is no overlapping');
  292. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_debut, -1);
  293. $this->assertTrue($result, 'result should be true, there is no overlapping');
  294. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_fin, -1);
  295. $this->assertFalse($result, 'result should be false, there is overlapping, afternoon of second day is not available');
  296. $result=$localobjectc->verifDateHolidayCP($user->id, $date_fin, $date_fin, -1);
  297. $this->assertFalse($result, 'result should be false, there is overlapping, afternoon of second day is not available');
  298. $result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_fin, 2); // start afternoon and end morning
  299. $this->assertTrue($result, 'result should be true, there is no overlapping');
  300. }
  301. }