Files
MoviePilot/tests/test_temporal_date_text.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

45 lines
1.7 KiB
Python

"""
自由文本日期解析的语言范围与结果契约。
"""
import pytest
from dateparser.languages.loader import LocaleDataLoader
from app.foundation import temporal
@pytest.mark.parametrize("text, expected", [
("2026-09-30T12:31:15Z", "2026-09-30 12:31:15"),
("2026-09-30T12:31:15.123456789+08:00", "2026-09-30 12:31:15"),
("2026/09/30 12:31", "2026-09-30 12:31:00"),
("Tue, 30 Sep 2026 12:31:15 GMT", "2026-09-30 12:31:15"),
("September 30 2026 10:00 PM", "2026-09-30 22:00:00"),
("2026年09月30日 12:30:00", "2026-09-30 12:30:00"),
])
def test_absolute_date_text_keeps_parsed_value(text, expected):
"""
站点与存储常见的绝对时间格式照常归一。
"""
assert temporal.normalize_datetime(text) == expected
@pytest.mark.parametrize("text", ["3 小时前", "3 小時前", "2 天前", "昨天", "3 hours ago", "2 days ago", "9月30日"])
def test_relative_and_partial_date_text_still_resolves(text):
"""
简繁中文、日文写法和英文的相对或缺年份日期仍能解析。
"""
assert temporal.parse_timestamp(text) > 0
@pytest.mark.parametrize("text", ["not a date", "N/A", "未知", "--"])
def test_unparseable_text_loads_only_candidate_languages(text, monkeypatch):
"""
无法识别的文本原样返回,且不会把全部语言数据载入常驻内存。
"""
monkeypatch.setattr(LocaleDataLoader, "_loaded_locales", {})
monkeypatch.setattr(LocaleDataLoader, "_loaded_languages", {})
assert temporal.normalize_datetime(text) == text
assert temporal.parse_timestamp(text) == 0
assert len(LocaleDataLoader._loaded_locales) <= len(temporal._DATE_TEXT_LANGUAGES)