gitlink-cli/skills/gitlink-stale/tests/test_stale.py

87 lines
2.8 KiB
Python

"""gitlink-stale 单元测试。"""
from __future__ import annotations
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "scripts"))
import pytest
from stale import parse_relative_days, grade, analyze_stale, render_report
class TestParseRelativeDays:
def test_days(self):
assert parse_relative_days("3天前") == 3
def test_weeks(self):
assert parse_relative_days("2周前") == 14
def test_months(self):
assert parse_relative_days("2个月前") == 60
def test_years(self):
assert parse_relative_days("1年前") == 365
def test_recent(self):
assert parse_relative_days("刚刚") == 0
assert parse_relative_days("3小时前") == 0
def test_unknown(self):
assert parse_relative_days("") is None
assert parse_relative_days("奇怪的值") is None
class TestGrade:
def test_levels(self):
assert grade(5) == "活跃"
assert grade(30) == "留意"
assert grade(90) == "陈旧"
assert grade(200) == "僵尸"
assert grade(None) == "未知"
class TestAnalyzeStale:
def test_filters_closed(self):
issues = [
{"id": "1", "name": "open old", "updated_at": "200天前", "issue_status": "正在解决"},
{"id": "2", "name": "closed", "updated_at": "300天前", "issue_status": "关闭"},
]
r = analyze_stale(issues, [])
# 关闭的不计入
assert r["total_open"] == 1
assert r["by_grade"]["僵尸"] == 1
def test_pr_open_only(self):
pulls = [
{"pull_request_number": "1", "name": "open pr", "pr_time": "100天前", "pull_request_status": 0},
{"pull_request_number": "2", "name": "merged", "pr_time": "100天前", "pull_request_status": 1},
]
r = analyze_stale([], pulls)
assert r["total_open"] == 1
def test_cleanup_list(self):
issues = [{"id": "1", "name": "zombie", "updated_at": "200天前", "issue_status": "open"}]
r = analyze_stale(issues, [])
assert r["cleanup_count"] == 1
assert r["cleanup"][0]["grade"] == "僵尸"
def test_empty(self):
r = analyze_stale([], [])
assert r["total_open"] == 0 and r["cleanup_count"] == 0
class TestRender:
def test_report(self):
issues = [{"id": "1", "name": "old issue", "updated_at": "150天前", "issue_status": "open"}]
r = analyze_stale(issues, [])
md = render_report(r, "o", "r")
assert "陈旧 Issue/PR 清理报告" in md
assert "建议处理" in md
def test_clean_repo(self):
r = analyze_stale([{"id": "1", "name": "x", "updated_at": "1天前", "issue_status": "open"}], [])
md = render_report(r, "o", "r")
assert "积压控制良好" in md
if __name__ == "__main__":
sys.exit(pytest.main([__file__, "-v"]))