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:
sylvain
2026-03-13 03:46:09 +01:00
parent fdd806abcd
commit ebf72c9a56
4 changed files with 405 additions and 1 deletions

View File

@@ -389,3 +389,94 @@ class TestMainFormatJson:
captured = capsys.readouterr()
parsed = json.loads(captured.out)
assert isinstance(parsed, list)
class TestParseArgsMilestones:
"""Test --milestones argument parsing."""
def test_parse_args_milestones(self):
"""--milestones sets milestones=True."""
from gitea_dashboard.cli import parse_args
args = parse_args(["--milestones"])
assert args.milestones is True
def test_parse_args_milestones_default(self):
"""Without --milestones, milestones is False."""
from gitea_dashboard.cli import parse_args
args = parse_args([])
assert args.milestones is False
class TestParseArgsColumns:
"""Test --columns argument parsing."""
def test_parse_args_columns(self):
"""--columns name,issues sets columns='name,issues'."""
from gitea_dashboard.cli import parse_args
args = parse_args(["--columns", "name,issues"])
assert args.columns == "name,issues"
def test_parse_args_columns_default(self):
"""Without --columns, columns is None."""
from gitea_dashboard.cli import parse_args
args = parse_args([])
assert args.columns is None
class TestMainMilestonesMode:
"""Test main() with --milestones."""
@patch("gitea_dashboard.cli.render_milestones")
@patch("gitea_dashboard.cli.collect_milestones")
@patch("gitea_dashboard.cli.GiteaClient")
def test_main_milestones_mode(self, mock_client_cls, mock_collect_ms, mock_render_ms):
"""--milestones routes to collect_milestones + render_milestones."""
env = {"GITEA_TOKEN": "test-tok"}
mock_client_cls.return_value = MagicMock()
mock_collect_ms.return_value = []
with patch.dict("os.environ", env, clear=True):
main(["--milestones"])
mock_collect_ms.assert_called_once()
mock_render_ms.assert_called_once()
class TestMainColumnsHelp:
"""Test main() with --columns help."""
@patch("gitea_dashboard.cli.GiteaClient")
def test_main_columns_help(self, mock_client_cls, capsys):
"""--columns help displays available columns and exits."""
env = {"GITEA_TOKEN": "test-tok"}
mock_client_cls.return_value = MagicMock()
with patch.dict("os.environ", env, clear=True):
main(["--columns", "help"])
captured = capsys.readouterr()
# Should list column names
assert "name" in captured.out or "name" in captured.err
@patch("gitea_dashboard.cli.render_dashboard")
@patch("gitea_dashboard.cli.collect_all")
@patch("gitea_dashboard.cli.GiteaClient")
def test_main_no_desc_and_columns_compat(self, mock_client_cls, mock_collect, mock_render):
"""--no-desc and --columns -commit both apply cumulatively."""
env = {"GITEA_TOKEN": "test-tok"}
mock_client_cls.return_value = MagicMock()
mock_collect.return_value = []
with patch.dict("os.environ", env, clear=True):
main(["--no-desc", "--columns", "-commit"])
# render_dashboard should be called with columns excluding both description and commit
call_kwargs = mock_render.call_args
columns = call_kwargs[1].get("columns") if call_kwargs[1] else None
if columns is not None:
assert "description" not in columns
assert "commit" not in columns