feat(xlsx): make Excel export production-grade
- Add merge cells for project/version groups. - Add numeric Hours column and human-readable Spent Time. - Add version/project/grand totals. - Apply auto-width, freeze panes, auto-filter and styling. - Respect --no-time: keep columns empty, skip totals. - Pass no_time flag through formatter factory to all file formatters. - Add tests for XLSX features and --no-time behavior. Closes #38
This commit is contained in:
@@ -208,3 +208,20 @@ def test_total_issues_message_goes_to_stderr(mock_fetch, capsys):
|
||||
captured = capsys.readouterr()
|
||||
assert "Total issues" not in captured.out
|
||||
assert "Total issues" in captured.err
|
||||
|
||||
|
||||
@mock.patch.dict(os.environ, VALID_ENV, clear=True)
|
||||
@mock.patch("redmine_reporter.cli.fetch_issues_with_spent_time")
|
||||
def test_cli_no_time_passed_to_formatter(mock_fetch, tmp_path):
|
||||
"""CLI --no-time передаётся в файловый форматтер."""
|
||||
issue = _MockIssue()
|
||||
mock_fetch.return_value = [(issue, 1.0)]
|
||||
|
||||
output = str(tmp_path / "report.xlsx")
|
||||
with mock.patch("redmine_reporter.cli.get_formatter_by_extension") as mock_get_formatter:
|
||||
mock_formatter = mock.MagicMock()
|
||||
mock_get_formatter.return_value = mock_formatter
|
||||
main(["--date", "2026-01-01--2026-01-31", "--output", output, "--no-time"])
|
||||
|
||||
_, kwargs = mock_get_formatter.call_args
|
||||
assert kwargs.get("no_time") is True
|
||||
|
||||
Reference in New Issue
Block a user