mirror of
https://github.com/josegonzalez/python-github-backup.git
synced 2026-04-30 20:45:35 +02:00
96 lines
3.4 KiB
Python
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",
|
|
]
|