mirror of
https://github.com/josegonzalez/python-github-backup.git
synced 2026-01-14 18:12:40 +01:00
Refactor test fixtures to use shared create_args helper
Uses the real parse_args() function to get CLI defaults, so when new arguments are added they're automatically available to all tests. Changes: - Add tests/conftest.py with create_args fixture - Update 8 test files to use shared fixture - Remove duplicate _create_mock_args methods - Remove redundant @pytest.fixture mock_args definitions This eliminates the need to update multiple test files when adding new CLI arguments.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
"""Tests for --all-starred flag behavior (issue #225)."""
|
||||
|
||||
import pytest
|
||||
from unittest.mock import Mock, patch
|
||||
from unittest.mock import patch
|
||||
|
||||
from github_backup import github_backup
|
||||
|
||||
@@ -12,58 +12,14 @@ class TestAllStarredCloning:
|
||||
Issue #225: --all-starred should clone starred repos without requiring --repositories.
|
||||
"""
|
||||
|
||||
def _create_mock_args(self, **overrides):
|
||||
"""Create a mock args object with sensible defaults."""
|
||||
args = Mock()
|
||||
args.user = "testuser"
|
||||
args.output_directory = "/tmp/backup"
|
||||
args.include_repository = False
|
||||
args.include_everything = False
|
||||
args.include_gists = False
|
||||
args.include_starred_gists = False
|
||||
args.all_starred = False
|
||||
args.skip_existing = False
|
||||
args.bare_clone = False
|
||||
args.lfs_clone = False
|
||||
args.no_prune = False
|
||||
args.include_wiki = False
|
||||
args.include_issues = False
|
||||
args.include_issue_comments = False
|
||||
args.include_issue_events = False
|
||||
args.include_pulls = False
|
||||
args.include_pull_comments = False
|
||||
args.include_pull_commits = False
|
||||
args.include_pull_details = False
|
||||
args.include_labels = False
|
||||
args.include_hooks = False
|
||||
args.include_milestones = False
|
||||
args.include_security_advisories = False
|
||||
args.include_releases = False
|
||||
args.include_assets = False
|
||||
args.include_attachments = False
|
||||
args.incremental = False
|
||||
args.incremental_by_files = False
|
||||
args.github_host = None
|
||||
args.prefer_ssh = False
|
||||
args.token_classic = None
|
||||
args.token_fine = None
|
||||
args.as_app = False
|
||||
args.osx_keychain_item_name = None
|
||||
args.osx_keychain_item_account = None
|
||||
|
||||
for key, value in overrides.items():
|
||||
setattr(args, key, value)
|
||||
|
||||
return args
|
||||
|
||||
@patch('github_backup.github_backup.fetch_repository')
|
||||
@patch('github_backup.github_backup.get_github_repo_url')
|
||||
def test_all_starred_clones_without_repositories_flag(self, mock_get_url, mock_fetch):
|
||||
def test_all_starred_clones_without_repositories_flag(self, mock_get_url, mock_fetch, create_args):
|
||||
"""--all-starred should clone starred repos without --repositories flag.
|
||||
|
||||
This is the core fix for issue #225.
|
||||
"""
|
||||
args = self._create_mock_args(all_starred=True)
|
||||
args = create_args(all_starred=True)
|
||||
mock_get_url.return_value = "https://github.com/otheruser/awesome-project.git"
|
||||
|
||||
# A starred repository (is_starred flag set by retrieve_repositories)
|
||||
@@ -88,9 +44,9 @@ class TestAllStarredCloning:
|
||||
|
||||
@patch('github_backup.github_backup.fetch_repository')
|
||||
@patch('github_backup.github_backup.get_github_repo_url')
|
||||
def test_starred_repo_not_cloned_without_all_starred_flag(self, mock_get_url, mock_fetch):
|
||||
def test_starred_repo_not_cloned_without_all_starred_flag(self, mock_get_url, mock_fetch, create_args):
|
||||
"""Starred repos should NOT be cloned if --all-starred is not set."""
|
||||
args = self._create_mock_args(all_starred=False)
|
||||
args = create_args(all_starred=False)
|
||||
mock_get_url.return_value = "https://github.com/otheruser/awesome-project.git"
|
||||
|
||||
starred_repo = {
|
||||
@@ -111,9 +67,9 @@ class TestAllStarredCloning:
|
||||
|
||||
@patch('github_backup.github_backup.fetch_repository')
|
||||
@patch('github_backup.github_backup.get_github_repo_url')
|
||||
def test_non_starred_repo_not_cloned_with_only_all_starred(self, mock_get_url, mock_fetch):
|
||||
def test_non_starred_repo_not_cloned_with_only_all_starred(self, mock_get_url, mock_fetch, create_args):
|
||||
"""Non-starred repos should NOT be cloned when only --all-starred is set."""
|
||||
args = self._create_mock_args(all_starred=True)
|
||||
args = create_args(all_starred=True)
|
||||
mock_get_url.return_value = "https://github.com/testuser/my-project.git"
|
||||
|
||||
# A regular (non-starred) repository
|
||||
@@ -135,9 +91,9 @@ class TestAllStarredCloning:
|
||||
|
||||
@patch('github_backup.github_backup.fetch_repository')
|
||||
@patch('github_backup.github_backup.get_github_repo_url')
|
||||
def test_repositories_flag_still_works(self, mock_get_url, mock_fetch):
|
||||
def test_repositories_flag_still_works(self, mock_get_url, mock_fetch, create_args):
|
||||
"""--repositories flag should still clone repos as before."""
|
||||
args = self._create_mock_args(include_repository=True)
|
||||
args = create_args(include_repository=True)
|
||||
mock_get_url.return_value = "https://github.com/testuser/my-project.git"
|
||||
|
||||
regular_repo = {
|
||||
|
||||
Reference in New Issue
Block a user