Files
actions/tests/test_summarize_release.py

139 lines
4.4 KiB
Python

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
from unittest.mock import MagicMock, patch
from actions.summarize_release import (
create_github_release,
generate_release_summary,
get_prs_between_tags,
get_release_diff,
)
def test_get_release_diff():
"""Test retrieving diff between tags."""
mock_event = MagicMock()
mock_event.repository = "test/repo"
mock_event.headers_diff = {"Accept": "application/vnd.github.v3.diff"}
# Mock response
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.text = "diff content"
mock_event.get.return_value = mock_response
diff = get_release_diff(mock_event, "v1.0.0", "v1.1.0")
assert diff == ("diff content", [])
mock_event.get.assert_called_once_with(
"https://api.github.com/repos/test/repo/compare/v1.0.0...v1.1.0", headers=mock_event.headers_diff
)
def test_get_prs_between_tags():
"""Test retrieving PRs between tags."""
mock_event = MagicMock()
mock_event.repository = "test/repo"
mock_event.get.side_effect = [
MagicMock(status_code=200, json=lambda: {"commits": [{"commit": {"message": "Fix bug #123"}}]}),
MagicMock(
status_code=200,
json=lambda: {
"number": 123,
"title": "Fix bug",
"body": "Fix",
"user": {"login": "user1"},
"html_url": "url",
"merged_at": "2023-01-01T12:00:00Z",
},
),
]
with patch("time.sleep"):
prs = get_prs_between_tags(mock_event, "v1.0.0", "v1.1.0")
assert len(prs) == 1
assert prs[0]["number"] == 123
def test_get_prs_between_tags_api_failure():
"""Test API failure returns empty list."""
mock_event = MagicMock()
mock_event.get.return_value = MagicMock(status_code=404)
assert get_prs_between_tags(mock_event, "v1.0.0", "v1.1.0") == []
def test_get_prs_between_tags_missing_commits():
"""Test missing commits data returns empty list."""
mock_event = MagicMock()
mock_event.get.return_value = MagicMock(status_code=200, json=lambda: {"message": "No commits"})
assert get_prs_between_tags(mock_event, "v1.0.0", "v1.1.0") == []
def test_get_prs_between_tags_empty_commits():
"""Test empty commits list returns empty list."""
mock_event = MagicMock()
mock_event.get.return_value = MagicMock(status_code=200, json=lambda: {"commits": []})
with patch("time.sleep"):
assert get_prs_between_tags(mock_event, "v1.0.0", "v1.1.0") == []
@patch("actions.summarize_release.get_response")
def test_generate_release_summary(mock_get_response):
"""Test generating release summary."""
mock_get_response.return_value = "Release summary content"
mock_event = MagicMock()
mock_event.repository = "test/repo"
# Create test data with matching author for new contributor
test_prs = [
{
"number": 123,
"title": "Fix bug",
"body": "Fixes a bug",
"author": "newuser", # Match the contributor name
"html_url": "https://github.com/test/repo/pull/123",
"merged_at": "2023-01-01T12:00:00Z",
}
]
# Mock new contributors function
with patch("actions.summarize_release.get_new_contributors", return_value=["newuser"]):
summary = generate_release_summary(
event=mock_event,
diff=("diff content", ["generated/client.py"]),
prs=test_prs,
latest_tag="v1.1.0",
previous_tag="v1.0.0",
)
assert "Release summary content" in summary
assert "What's Changed" in summary
assert "https://github.com/test/repo/compare/v1.0.0...v1.1.0" in summary
assert "generated/client.py" in mock_get_response.call_args.args[0][1]["content"]
mock_get_response.assert_called_once()
def test_create_github_release():
"""Test creating GitHub release."""
mock_event = MagicMock()
mock_event.repository = "test/repo"
create_github_release(event=mock_event, tag_name="v1.1.0", name="Version 1.1.0", body="Release notes")
mock_event.post.assert_called_once_with(
"https://api.github.com/repos/test/repo/releases",
json={
"tag_name": "v1.1.0",
"name": "Version 1.1.0",
"body": "Release notes",
"draft": False,
"prerelease": False,
},
)