初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,101 @@
|
||||
"""农历/节气/节日引擎测试。"""
|
||||
|
||||
from datetime import date
|
||||
|
||||
from app.modules.time_sense.lunar import (
|
||||
Shichen,
|
||||
get_day_period,
|
||||
get_festivals,
|
||||
get_shichen,
|
||||
get_solar_term,
|
||||
solar_to_lunar,
|
||||
)
|
||||
|
||||
|
||||
def test_solar_to_lunar_spring_festival_2026():
|
||||
# 2026-02-17 是农历丙午年正月初一(春节)
|
||||
result = solar_to_lunar(date(2026, 2, 17))
|
||||
assert result.year_ganzhi == "丙午"
|
||||
assert result.month == 1
|
||||
assert result.day == 1
|
||||
assert result.is_leap_month is False
|
||||
|
||||
|
||||
def test_solar_to_lunar_leap_month_recognized():
|
||||
# 农历闰月标记:取一个已知闰月日期(如 2025 农历闰六月初一 ≈ 2025-07-25)
|
||||
result = solar_to_lunar(date(2025, 7, 25))
|
||||
assert result.month == 6
|
||||
assert result.is_leap_month is True
|
||||
|
||||
|
||||
def test_get_shichen_zi():
|
||||
# 子时:23 点与 0 点都属子
|
||||
assert get_shichen(23).name == "子"
|
||||
assert get_shichen(0).name == "子"
|
||||
|
||||
|
||||
def test_get_shichen_wu():
|
||||
assert get_shichen(12).name == "午"
|
||||
|
||||
|
||||
def test_get_day_period_deep_night():
|
||||
assert get_day_period(2) == "凌晨"
|
||||
assert get_day_period(23) == "深夜"
|
||||
|
||||
|
||||
def test_get_solar_term_returns_current_or_nearest():
|
||||
# 立春通常在 2/3-2/5;2026 年立春为 2/4
|
||||
info = get_solar_term(date(2026, 2, 4))
|
||||
assert info.current_name == "立春"
|
||||
|
||||
|
||||
def test_get_solar_term_cross_year_next_in_chinese():
|
||||
# 2026-12-25 跨年带入项,下一节气小寒在 getJieQiTable() 中以 XIAO_HAN 出现
|
||||
info = get_solar_term(date(2026, 12, 25))
|
||||
assert info.next_name == "小寒"
|
||||
assert info.current_name is None
|
||||
|
||||
|
||||
def test_get_solar_term_non_term_day_current_none():
|
||||
_ALL_JIEQI_CN = {
|
||||
"立春",
|
||||
"雨水",
|
||||
"惊蛰",
|
||||
"春分",
|
||||
"清明",
|
||||
"谷雨",
|
||||
"立夏",
|
||||
"小满",
|
||||
"芒种",
|
||||
"夏至",
|
||||
"小暑",
|
||||
"大暑",
|
||||
"立秋",
|
||||
"处暑",
|
||||
"白露",
|
||||
"秋分",
|
||||
"寒露",
|
||||
"霜降",
|
||||
"立冬",
|
||||
"小雪",
|
||||
"大雪",
|
||||
"冬至",
|
||||
"小寒",
|
||||
"大寒",
|
||||
}
|
||||
info = get_solar_term(date(2026, 7, 15))
|
||||
assert info.current_name is None
|
||||
assert info.next_name in _ALL_JIEQI_CN
|
||||
assert info.days_to_next > 0
|
||||
|
||||
|
||||
def test_get_festivals_spring_festival():
|
||||
festivals = get_festivals(date(2026, 2, 17))
|
||||
names = [f.name for f in festivals]
|
||||
assert "春节" in names
|
||||
|
||||
|
||||
def test_shichen_model_has_range():
|
||||
s = Shichen(name="子", start_hour=23, end_hour=1)
|
||||
assert s.name == "子"
|
||||
assert s.start_hour == 23
|
||||
Reference in new issue
Block a user