import pytest from redmine_reporter.report_builder import build_grouped_report, STATUS_TRANSLATION from redmine_reporter.utils import get_version class MockIssue: def __init__(self, project, subject, status, fixed_version=None, issue_id=999): self.id = issue_id self.project = project self.subject = subject self.status = status if fixed_version is not None: self.fixed_version = fixed_version def test_status_translation(): assert STATUS_TRANSLATION["Closed"] == "Закрыто" assert STATUS_TRANSLATION["New"] == "В работе" assert STATUS_TRANSLATION["Resolved"] == "Решена" def test_build_grouped_report(): issues = [ (MockIssue("Камеры", "Фича A", "New", "v2.5.0", 101), 2.0), (MockIssue("Камеры", "Баг B", "Resolved", "v2.5.0", 102), 1.5), (MockIssue("ПО", "Доки", "Pending", None, 201), 4.0), ] rows = build_grouped_report(issues) assert len(rows) == 3 # Первая строка — полное название проекта и версии assert rows[0]["display_project"] == "Камеры" assert rows[0]["display_version"] == "v2.5.0" # Вторая — пустые display_* из-за совпадения assert rows[1]["display_project"] == "" assert rows[1]["display_version"] == "" # Третья — новый проект assert rows[2]["display_project"] == "ПО" assert rows[2]["display_version"] == "" # Проверка перевода и времени assert rows[0]["status_ru"] == "В работе" assert rows[0]["time_text"] == "2ч" assert rows[1]["time_text"] == "1ч 30м"