Files
python-github-backup/tests/test_releases.py
2026-04-29 12:56:23 +02:00

96 lines
3.4 KiB
Python

"""Tests for release backup behavior."""
from github_backup import github_backup
def test_backup_releases_uses_embedded_assets_without_extra_asset_list_request(
create_args, tmp_path, monkeypatch
):
args = create_args(include_releases=True, include_assets=True)
repository = {"full_name": "owner/repo", "name": "repo"}
calls = []
downloads = []
def fake_retrieve_data(passed_args, template, query_args=None, paginated=True, **kwargs):
calls.append(template)
if template == "https://api.github.com/repos/owner/repo/releases":
return [
{
"tag_name": "v1.0.0",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"prerelease": False,
"draft": False,
"assets_url": "https://api.github.com/repos/owner/repo/releases/1/assets",
"assets": [
{
"name": "artifact.zip",
"url": "https://api.github.com/repos/owner/repo/releases/assets/1",
}
],
}
]
raise AssertionError("Unexpected API request: {0}".format(template))
def fake_download_file(url, path, auth, as_app=False, fine=False):
downloads.append((url, path))
monkeypatch.setattr(github_backup, "retrieve_data", fake_retrieve_data)
monkeypatch.setattr(github_backup, "download_file", fake_download_file)
github_backup.backup_releases(
args,
tmp_path,
repository,
"https://api.github.com/repos",
include_assets=True,
)
assert calls == ["https://api.github.com/repos/owner/repo/releases"]
assert downloads == [
(
"https://api.github.com/repos/owner/repo/releases/assets/1",
str(tmp_path / "releases" / "v1.0.0" / "artifact.zip"),
)
]
def test_backup_releases_falls_back_to_assets_url_when_assets_missing(
create_args, tmp_path, monkeypatch
):
args = create_args(include_releases=True, include_assets=True)
repository = {"full_name": "owner/repo", "name": "repo"}
calls = []
def fake_retrieve_data(passed_args, template, query_args=None, paginated=True, **kwargs):
calls.append(template)
if template == "https://api.github.com/repos/owner/repo/releases":
return [
{
"tag_name": "v1.0.0",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"prerelease": False,
"draft": False,
"assets_url": "https://api.github.com/repos/owner/repo/releases/1/assets",
}
]
if template == "https://api.github.com/repos/owner/repo/releases/1/assets":
return []
raise AssertionError("Unexpected API request: {0}".format(template))
monkeypatch.setattr(github_backup, "retrieve_data", fake_retrieve_data)
github_backup.backup_releases(
args,
tmp_path,
repository,
"https://api.github.com/repos",
include_assets=True,
)
assert calls == [
"https://api.github.com/repos/owner/repo/releases",
"https://api.github.com/repos/owner/repo/releases/1/assets",
]