Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions tests/test_git_vitality.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
from datetime import datetime, timezone
from unittest.mock import MagicMock, patch
from pathlib import Path
from arbiter.git_vitality import score_git_vitality, GitVitalityReport
from arbiter.git_vitality import score_git_vitality
from arbiter.git_historian import CommitInfo

@pytest.fixture
Expand Down Expand Up @@ -33,15 +33,22 @@ def test_single_committer_scores_low_bus_factor(tmp_path, mock_commits):

def test_recent_commit_scores_max_recency(tmp_path, mock_commits):
(tmp_path / ".git").mkdir()
# Today is 2026-04-19 (from session context)
# mock_commits[0] is from 2026-04-10 (9 days ago)
with patch("arbiter.git_vitality.walk_commits", return_value=mock_commits):
with patch("subprocess.run") as mock_run:
mock_run.return_value.returncode = 0
mock_run.return_value.stdout = ""
report = score_git_vitality(tmp_path)
assert report.days_since_commit <= 30
# 25 points for recency
# Freeze "now" at 2026-04-19 so days_since stays deterministic.
# datetime.datetime is a C extension, so we patch the module binding
# rather than the classmethod (setattr fails on C types).
frozen_now = datetime(2026, 4, 19, tzinfo=timezone.utc)
mock_dt = MagicMock()
mock_dt.now = lambda *_args, **_kwargs: frozen_now
mock_dt.fromisoformat = lambda ts: datetime.fromisoformat(ts)
mock_dt.timezone = timezone
with patch("arbiter.git_vitality.datetime", mock_dt):
with patch("arbiter.git_vitality.walk_commits", return_value=mock_commits):
with patch("subprocess.run") as mock_run:
mock_run.return_value.returncode = 0
mock_run.return_value.stdout = ""
report = score_git_vitality(tmp_path)
assert report.days_since_commit == 8 # Apr 10 10:00 -> Apr 19 00:00
assert report.score >= 25 # max recency points

def test_semver_tags_detected(tmp_path, mock_commits):
(tmp_path / ".git").mkdir()
Expand Down
Loading