Browse Source

Update phpunit

Laurent Destailleur 5 years ago
parent
commit
73c3fa40bf
2 changed files with 49 additions and 8 deletions
  1. 7 3
      htdocs/core/lib/date.lib.php
  2. 42 5
      test/phpunit/DateLibTest.php

+ 7 - 3
htdocs/core/lib/date.lib.php

@@ -601,14 +601,14 @@ function dol_get_first_day_week($day, $month, $year, $gm = false)
  *
  *	@param	    int			$timestampStart     Timestamp de debut
  *	@param	    int			$timestampEnd       Timestamp de fin
- *  @param      string		$countrycode        Country code
+ *  @param      string		$country_code       Country code
  *	@param      int			$lastday            Last day is included, 0: no, 1:yes
  *  @param		int			$includesaturday	Include saturday as non working day (-1=use setup, 0=no, 1=yes)
  *  @param		int			$includesunday		Include sunday as non working day (-1=use setup, 0=no, 1=yes)
  *	@return   	int|string						Number of non working days or error message string if error
  *  @see num_between_day(), num_open_day()
  */
-function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', $lastday = 0, $includesaturday = -1, $includesunday = -1)
+function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1)
 {
 	global $db, $conf, $mysoc;
 
@@ -618,6 +618,8 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR',
 	// Check to ensure we use correct parameters
 	if ((($timestampEnd - $timestampStart) % 86400) != 0) return 'ErrorDates must use same hours and must be GMT dates';
 
+	if (empty($country_code)) $country_code = $mysoc->country_code;
+
 	if ($includesaturday < 0) $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1);
 	if ($includesunday < 0)   $includesunday   = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY : 1);
 
@@ -651,10 +653,12 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR',
 			}
 		}
 
+		$country_id = dol_getIdFromCode($db, $country_code, 'c_country', 'code', 'rowid');
+
 		// Loop on public holiday defined into hrm_public_holiday
 		$sql = "SELECT code, entity, fk_country, dayrule, year, month, day, active";
 		$sql.= " FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday";
-		$sql.= " WHERE active = 1 and fk_country IN (0, ".$mysoc->country_id.")";
+		$sql.= " WHERE active = 1 and fk_country IN (0".($country_id > 0 ? ", ".$country_id : 0).")";
 
 		$resql = $db->query($sql);
 		if ($resql)

+ 42 - 5
test/phpunit/DateLibTest.php

@@ -185,16 +185,33 @@ class DateLibTest extends PHPUnit\Framework\TestCase
         // With same hours - Tuesday/Wednesday jan 2013
         $date1=dol_mktime(0, 0, 0, 1, 1, 2013);
         $date2=dol_mktime(0, 0, 0, 1, 2, 2013);
+        $date3=dol_mktime(0, 0, 0, 1, 3, 2013);
 
         $result=num_public_holiday($date1, $date2, 'FR', 1);
         print __METHOD__." result=".$result."\n";
-        $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday/Wednesday jan 2013 for FR');   // 1 closed days
+        $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday 1 - Wednesday 2 jan 2013 for FR');   // 1 closed days (country france)
 
         $result=num_public_holiday($date1, $date2, 'XX', 1);
         print __METHOD__." result=".$result."\n";
-        $this->assertEquals(0, $result, 'NumPublicHoliday for Tuesday/Wednesday jan 2013 for XX');   // no closed days (country unknown)
+        $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday 1 - Wednesday 2 jan 2013 for XX');   // 1 closed days (country unknown)
 
-        // With same hours - Friday/Sunday jan 2013
+        $result=num_public_holiday($date2, $date3, 'FR', 1);
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(0, $result, 'NumPublicHoliday for Wednesday 2 - Thursday 3 jan 2013 for FR');   // no closed days
+
+        // Check with easter monday
+        $date1=dol_mktime(0, 0, 0, 4, 21, 2019);
+        $date2=dol_mktime(0, 0, 0, 4, 23, 2019);
+
+        $result=num_public_holiday($date1, $date2, 'XX', 1);
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(1, $result, 'NumPublicHoliday including eastermonday for XX');   // 2 opened day, 1 closed days (sunday)
+
+        $result=num_public_holiday($date1, $date2, 'FR', 1);
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(2, $result, 'NumPublicHoliday including eastermonday for FR');   // 1 opened day, 2 closed days (sunday + easter monday)
+
+        // Check for sunday/saturday - Friday 4 - Sunday 6 jan 2013
         $date1=dol_mktime(0, 0, 0, 1, 4, 2013);
         $date2=dol_mktime(0, 0, 0, 1, 6, 2013);
 
@@ -202,10 +219,25 @@ class DateLibTest extends PHPUnit\Framework\TestCase
         print __METHOD__." result=".$result."\n";
         $this->assertEquals(2, $result, 'NumPublicHoliday for FR');   // 1 opened day, 2 closed days
 
+        $result=num_public_holiday($date1, $date2, 'FR', 1, 1, 1);
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(2, $result, 'NumPublicHoliday for FR');   // 1 opened day, 2 closed days
+
+        $result=num_public_holiday($date1, $date2, 'FR', 1, 1, 0);
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(1, $result, 'NumPublicHoliday for FR');   // 2 opened day, 1 closed days
+
+        $result=num_public_holiday($date1, $date2, 'FR', 1, 0, 0);
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(0, $result, 'NumPublicHoliday for FR');   // 3 opened day, 0 closed days
+
         $result=num_public_holiday($date1, $date2, 'XX', 1);
         print __METHOD__." result=".$result."\n";
         $this->assertEquals(2, $result, 'NumPublicHoliday for XX');   // 1 opened day, 2 closed days (even if country unknown)
 
+
+
+        // Add more holiday with constant HOLIDAY_MORE_PUBLIC_HOLIDAYS
         $conf->global->HOLIDAY_MORE_PUBLIC_HOLIDAYS='12-13,2019-12-14';
 
         $date1=dol_mktime(0, 0, 0, 12, 13, 2018);
@@ -243,14 +275,19 @@ class DateLibTest extends PHPUnit\Framework\TestCase
         // With same hours - Tuesday/Wednesday jan 2013
         $date1=dol_mktime(0, 0, 0, 1, 1, 2013);
         $date2=dol_mktime(0, 0, 0, 1, 2, 2013);
+        $date3=dol_mktime(0, 0, 0, 1, 3, 2013);
 
         $result=num_open_day($date1, $date2, 0, 1, 0, 'FR');
         print __METHOD__." result=".$result."\n";
-        $this->assertEquals(1, $result, 'NumOpenDay Tuesday/Wednesday jan 2013 for FR');   // 1 opened days
+        $this->assertEquals(1, $result, 'NumOpenDay Tuesday 1 - Wednesday 2 jan 2013 for FR');   // 1 opened days (country france)
 
         $result=num_open_day($date1, $date2, 0, 1, 0, 'XX');
         print __METHOD__." result=".$result."\n";
-        $this->assertEquals(2, $result, 'NumOpenDay Tuesday/Wednesday jan 2013 for XX');   // 2 opened days (country unknown)
+        $this->assertEquals(1, $result, 'NumOpenDay Tuesday 1 - Wednesday 2 jan 2013 for XX');   // 1 opened days (country unknown)
+
+        $result=num_open_day($date2, $date3, 0, 1, 0, 'FR');
+        print __METHOD__." result=".$result."\n";
+        $this->assertEquals(2, $result, 'NumOpenDay Wednesday 2 - Thursday 3 jan 2013 for FR');   // 2 opened days
 
         // With same hours - Friday/Sunday jan 2013
         $date1=dol_mktime(0, 0, 0, 1, 4, 2013);