* Refactor holidayModel::getHolidayByAPI, and add its unit test.

This commit is contained in:
liumengyi
2023-12-05 09:10:05 +08:00
parent c0a2a0bf81
commit d7d818cccf
3 changed files with 52 additions and 3 deletions
+6 -3
View File
@@ -410,26 +410,29 @@ class holidayModel extends model
}
/**
* API: 获取节假日。
* Get holidays by api.
*
* @param string $year
* @access public
* @return array
*/
public function getHolidayByAPI($year = '')
public function getHolidayByAPI(string $year = ''): array
{
/* Get holidays by api. */
if(empty($year)) $year = date('Y');
$apiRoot = sprintf($this->config->holiday->apiRoot, $year);
$data = json_decode(common::http($apiRoot));
$days = isset($data->days) ? (array)$data->days : array();
/* Build holiday data. */
$holidays = array();
$privDay = 0;
$prevDayOff = true;
$daysIndex = count($days) - 1;
foreach($days as $index => $day)
{
if($index < $daysIndex and (strtotime($day->date) - $privDay > 86400 or $day->isOffDay != $prevDayOff))
if($index < $daysIndex && (strtotime($day->date) - $privDay > 86400 || $day->isOffDay != $prevDayOff))
{
$holiday = new stdClass();
$holiday->type = $day->isOffDay ? 'holiday' : 'working';
@@ -439,7 +442,7 @@ class holidayModel extends model
$holidays[] = $holiday;
}
if(isset($holiday) or $index == $daysIndex)
if(isset($holiday) || $index == $daysIndex)
{
$holidayNum = count($holidays);
if($holidayNum > 1)
+20
View File
@@ -357,4 +357,24 @@ class holidayTest
return $task->realDuration;
}
/**
* 测试通过 API 获取节假日。
* Test get holidays by api.
*
* @param string $year
* @access public
* @return int|array
*/
public function getHolidayByAPITest(string $year): int|array
{
if($year == 'this year') $year = date('Y');
if($year == 'last year') $year = date('Y', strtotime('-1 year'));
if($year == 'next year') $year = date('Y', strtotime('+1 year'));
$objects = $this->objectModel->getHolidayByAPI($year);
if(dao::isError()) return dao::getError();
return count($objects);
}
}
@@ -0,0 +1,26 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/holiday.class.php';
zdTable('holiday')->gen(50);
zdTable('user')->gen(1);
su('admin');
/**
title=测试 holidayModel->getHolidayByAPI();
cid=1
pid=1
*/
$holiday = new holidayTest();
$year = array('this year', 'last year', 'next year', '');
r($holiday->getHolidayByAPITest($year[0])) && p() && e('11'); //返回 本年 的节假日。
r($holiday->getHolidayByAPITest($year[1])) && p() && e('12'); //返回 上年 的节假日。
r($holiday->getHolidayByAPITest($year[2])) && p() && e('14'); //返回 下年 的节假日。
r($holiday->getHolidayByAPITest($year[3])) && p() && e('11'); //返回 不设置年份 的节假日。