test(v1.4.0-p2): add failing tests for milestones and columns
RED phase: 5 tests in test_collector.py (collect_milestones), 10 tests in test_display.py (render_milestones, parse_columns), 2 tests in test_exporter.py (milestones JSON), 7 tests in test_cli.py (--milestones, --columns). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -401,3 +401,130 @@ class TestSortRepos:
|
||||
]
|
||||
result = sort_repos(repos, "activity")
|
||||
assert [r.name for r in result] == ["recent", "old-commit", "inactive"]
|
||||
|
||||
|
||||
class TestRenderMilestones:
|
||||
"""Test the dedicated milestones table rendering."""
|
||||
|
||||
def test_render_milestones_basic(self):
|
||||
"""Milestones table displays expected columns."""
|
||||
from gitea_dashboard.collector import MilestoneData
|
||||
from gitea_dashboard.display import render_milestones
|
||||
|
||||
console, buf = _make_console()
|
||||
milestones = [
|
||||
MilestoneData(
|
||||
repo_name="my-repo",
|
||||
title="v1.0",
|
||||
open_issues=2,
|
||||
closed_issues=8,
|
||||
progress_pct=80,
|
||||
due_on="2026-04-01T00:00:00Z",
|
||||
state="open",
|
||||
),
|
||||
]
|
||||
|
||||
render_milestones(milestones, console=console)
|
||||
output = buf.getvalue()
|
||||
|
||||
assert "my-repo" in output
|
||||
assert "v1.0" in output
|
||||
assert "80" in output
|
||||
|
||||
def test_render_milestones_empty(self):
|
||||
"""Empty list shows informative message."""
|
||||
from gitea_dashboard.display import render_milestones
|
||||
|
||||
console, buf = _make_console()
|
||||
|
||||
render_milestones([], console=console)
|
||||
output = buf.getvalue()
|
||||
|
||||
assert "Aucune milestone" in output
|
||||
|
||||
def test_render_milestones_progress_colors(self):
|
||||
"""Progress coloring: green > 80%, yellow 50-80%, red < 50%."""
|
||||
from gitea_dashboard.collector import MilestoneData
|
||||
from gitea_dashboard.display import render_milestones
|
||||
|
||||
console, buf = _make_console()
|
||||
milestones = [
|
||||
MilestoneData("repo", "high", 1, 9, 90, None, "open"),
|
||||
MilestoneData("repo", "mid", 3, 3, 50, None, "open"),
|
||||
MilestoneData("repo", "low", 8, 2, 20, None, "open"),
|
||||
]
|
||||
|
||||
render_milestones(milestones, console=console)
|
||||
output = buf.getvalue()
|
||||
|
||||
# All three should appear without crash
|
||||
assert "high" in output
|
||||
assert "mid" in output
|
||||
assert "low" in output
|
||||
|
||||
|
||||
class TestParseColumns:
|
||||
"""Test parse_columns function."""
|
||||
|
||||
def test_parse_columns_all_default(self):
|
||||
"""None returns all columns."""
|
||||
from gitea_dashboard.display import AVAILABLE_COLUMNS, parse_columns
|
||||
|
||||
result = parse_columns(None)
|
||||
|
||||
assert result == list(AVAILABLE_COLUMNS.keys())
|
||||
|
||||
def test_parse_columns_inclusion(self):
|
||||
"""'name,issues' returns only those columns."""
|
||||
from gitea_dashboard.display import parse_columns
|
||||
|
||||
result = parse_columns("name,issues")
|
||||
|
||||
assert result == ["name", "issues"]
|
||||
|
||||
def test_parse_columns_exclusion(self):
|
||||
"""'-description,-commit' returns all except those."""
|
||||
from gitea_dashboard.display import AVAILABLE_COLUMNS, parse_columns
|
||||
|
||||
result = parse_columns("-description,-commit")
|
||||
|
||||
assert "description" not in result
|
||||
assert "commit" not in result
|
||||
assert len(result) == len(AVAILABLE_COLUMNS) - 2
|
||||
|
||||
def test_parse_columns_unknown_raises(self):
|
||||
"""Unknown column raises ValueError."""
|
||||
from gitea_dashboard.display import parse_columns
|
||||
|
||||
with pytest.raises(ValueError, match="unknown"):
|
||||
parse_columns("unknown")
|
||||
|
||||
def test_parse_columns_help(self):
|
||||
"""'help' returns sentinel list."""
|
||||
from gitea_dashboard.display import parse_columns
|
||||
|
||||
result = parse_columns("help")
|
||||
|
||||
assert result == ["__help__"]
|
||||
|
||||
def test_parse_columns_no_desc_compat(self):
|
||||
"""no_desc=True excludes description column."""
|
||||
from gitea_dashboard.display import parse_columns
|
||||
|
||||
result = parse_columns(None, no_desc=True)
|
||||
|
||||
assert "description" not in result
|
||||
|
||||
def test_render_dashboard_with_columns(self):
|
||||
"""Only specified columns appear in the output."""
|
||||
from gitea_dashboard.display import render_dashboard
|
||||
|
||||
console, buf = _make_console()
|
||||
repos = [_make_repo(name="test", open_issues=5)]
|
||||
|
||||
render_dashboard(repos, console=console, columns=["name", "issues"])
|
||||
output = buf.getvalue()
|
||||
|
||||
assert "test" in output
|
||||
assert "Description" not in output
|
||||
assert "Release" not in output
|
||||
|
||||
Reference in New Issue
Block a user