mirror of
https://github.com/josegonzalez/python-github-backup.git
synced 2026-04-30 04:25:35 +02:00
Skip checkpoint-equal incremental items
This commit is contained in:
@@ -50,6 +50,41 @@ def test_retrieve_discussion_summaries_stops_at_incremental_since(create_args):
|
||||
)
|
||||
|
||||
|
||||
def test_retrieve_discussion_summaries_excludes_checkpoint_timestamp(create_args):
|
||||
args = create_args()
|
||||
repository = {"full_name": "owner/repo"}
|
||||
|
||||
page = {
|
||||
"repository": {
|
||||
"hasDiscussionsEnabled": True,
|
||||
"discussions": {
|
||||
"totalCount": 1,
|
||||
"nodes": [
|
||||
{
|
||||
"number": 1,
|
||||
"title": "already backed up",
|
||||
"updatedAt": "2026-01-01T00:00:00Z",
|
||||
},
|
||||
],
|
||||
"pageInfo": {"hasNextPage": True, "endCursor": "NEXT"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
with patch(
|
||||
"github_backup.github_backup.retrieve_graphql_data", return_value=page
|
||||
) as mock_retrieve:
|
||||
summaries, newest, enabled, total = github_backup.retrieve_discussion_summaries(
|
||||
args, repository, since="2026-01-01T00:00:00Z"
|
||||
)
|
||||
|
||||
assert enabled is True
|
||||
assert total == 1
|
||||
assert newest == "2026-01-01T00:00:00Z"
|
||||
assert summaries == []
|
||||
assert mock_retrieve.call_count == 1
|
||||
|
||||
|
||||
def test_retrieve_discussion_summaries_disabled_discussions(create_args):
|
||||
args = create_args()
|
||||
repository = {"full_name": "owner/repo"}
|
||||
|
||||
@@ -31,6 +31,52 @@ class MockHTTPResponse:
|
||||
return headers
|
||||
|
||||
|
||||
def test_backup_pulls_incremental_excludes_checkpoint_timestamp(create_args, tmp_path):
|
||||
args = create_args(include_pulls=True, incremental=True)
|
||||
args.since = "2026-04-26T08:13:46Z"
|
||||
repository = {"full_name": "owner/repo"}
|
||||
|
||||
responses = [
|
||||
MockHTTPResponse([]),
|
||||
MockHTTPResponse(
|
||||
[
|
||||
{
|
||||
"number": 1,
|
||||
"title": "already backed up",
|
||||
"updated_at": "2026-04-26T08:13:46Z",
|
||||
},
|
||||
],
|
||||
link_header='<https://api.github.com/repos/owner/repo/pulls?per_page=100&state=closed&page=2>; rel="next"',
|
||||
),
|
||||
MockHTTPResponse(
|
||||
[
|
||||
{
|
||||
"number": 0,
|
||||
"title": "older pull on page 2",
|
||||
"updated_at": "2026-04-25T07:00:00Z",
|
||||
}
|
||||
]
|
||||
),
|
||||
]
|
||||
requests_made = []
|
||||
|
||||
def mock_urlopen(request, *args, **kwargs):
|
||||
requests_made.append(request.get_full_url())
|
||||
return responses[len(requests_made) - 1]
|
||||
|
||||
with patch("github_backup.github_backup.urlopen", side_effect=mock_urlopen):
|
||||
github_backup.backup_pulls(
|
||||
args, tmp_path, repository, "https://api.github.com/repos"
|
||||
)
|
||||
|
||||
assert len(requests_made) == 2
|
||||
assert "state=open" in requests_made[0]
|
||||
assert "state=closed" in requests_made[1]
|
||||
assert all("page=2" not in url for url in requests_made)
|
||||
assert not os.path.exists(tmp_path / "pulls" / "1.json")
|
||||
assert not os.path.exists(tmp_path / "pulls" / "0.json")
|
||||
|
||||
|
||||
def test_backup_pulls_incremental_stops_before_fetching_old_pages(
|
||||
create_args, tmp_path
|
||||
):
|
||||
|
||||
Reference in New Issue
Block a user