def test_archive_gist_called_process_error(mock_logger, mock_subprocess, mock_git_asset): operation = PULL_OPERATION github_archive = GithubArchive() github_archive.archive_gist(mock_git_asset, 'github_archive', operation) mock_logger.assert_called()
def test_archive_gist_clone_exists(mock_logger, mock_subprocess, mock_path_exists, mock_git_asset): operation = CLONE_OPERATION github_archive = GithubArchive() github_archive.archive_gist(mock_git_asset, 'github_archive', operation) mock_subprocess.assert_not_called()
def test_archive_gist_timeout_exception(mock_logger, mock_subprocess): gist = mock.MagicMock() gist.id = '123' operation = 'clone' message = f'Git operation timed out archiving {gist.id}.' GithubArchive.archive_gist(gist, 'mock/path', operation) mock_logger.error.assert_called_with(message)
def test_archive_gist_success(mock_logger, mock_subprocess): gist = mock.MagicMock() gist.id = '123' operation = 'clone' message = f'Gist: {gist.id} {operation} success!' GithubArchive.archive_gist(gist, 'mock/path', operation) mock_logger.info.assert_called_once_with(message)
def test_archive_repo_timeout_exception(mock_logger, mock_subprocess): repo = mock.MagicMock() repo.name = 'mock-repo' operation = 'clone' message = f'Git operation timed out archiving {repo.name}.' GithubArchive.archive_repo(repo, 'master', 'mock/path', operation) mock_logger.error.assert_called_with(message)
def test_archive_repo_success(mock_logger, mock_subprocess): repo = mock.MagicMock() repo.name = 'mock-repo' operation = 'clone' message = f'Repo: {repo.name} {operation} success!' GithubArchive.archive_repo(repo, 'master', 'mock/path', operation) mock_logger.info.assert_called_once_with(message)
def test_iterate_repos_not_matching_owner_name(mock_user, mock_archive_repo): mock_user.name = 'Justintime123' repo = mock.MagicMock() repo.owner.name = 'Justintim456' repos = [repo] GithubArchive.iterate_repos(repos, 'user', 'clone', 'master') mock_archive_repo.assert_not_called()
def test_archive_gist_timeout_exception(mock_logger, mock_subprocess, mock_git_asset): operation = CLONE_OPERATION message = f'Git operation timed out archiving {mock_git_asset.id}.' github_archive = GithubArchive() github_archive.archive_gist(mock_git_asset, 'mock/path', operation) mock_logger.assert_called_with(message)
def test_archive_gist_bad_param(mock_logger, mock_subprocess): gist = mock.MagicMock() gist.id = '123' operation = 'bad-param' message = f'Could not determine what action to take with {gist.id} based on {operation}.' with pytest.raises(ValueError): GithubArchive.archive_gist(gist, 'mock/path', operation) mock_logger.error.assert_called_once_with(message)
def test_archive_gist_clone_exists(mock_logger, mock_subprocess, mock_path_exists): gist = mock.MagicMock() gist.id = '123' operation = 'clone' message = f'Gist: {gist.id} already cloned, skipping clone operation.' GithubArchive.archive_gist(gist, 'mock/path', operation) mock_logger.info.assert_called_once_with(message)
def test_archive_repo_bad_param(mock_logger, mock_subprocess): repo = mock.MagicMock() repo.name = 'mock-repo' operation = 'bad-param' message = f'Could not determine what action to take with {repo.name} based on {operation}.' with pytest.raises(ValueError): GithubArchive.archive_repo(repo, 'master', 'mock/path', operation) mock_logger.error.assert_called_once_with(message)
def test_archive_repo_clone_exists(mock_logger, mock_subprocess, mock_path_exists): repo = mock.MagicMock() repo.name = 'mock-repo' operation = 'clone' message = f'Repo: {repo.name} already cloned, skipping clone operation.' GithubArchive.archive_repo(repo, 'master', 'mock/path', operation) mock_logger.info.assert_called_once_with(message)
def test_archive_gist_success(mock_logger, mock_subprocess, mock_git_asset): # TODO: Mock the subprocess better to ensure it's doing what it should operation = CLONE_OPERATION message = f'Gist: {mock_git_asset.owner.login}/{mock_git_asset.id} {operation} success!' github_archive = GithubArchive() github_archive.archive_gist(mock_git_asset, 'mock/path', operation) mock_subprocess.assert_called() mock_logger.assert_called_once_with(message)
def _run(self): GithubArchive.run( user_clone=self.user_clone, user_pull=self.user_pull, gists_clone=self.gists_clone, gists_pull=self.gists_pull, orgs_clone=self.orgs_clone, orgs_pull=self.orgs_pull, )
def test_determine_repo_context_bad_param(mock_logger, mock_determine_repo_context, mock_object): repos = [mock_object] context = 'bad-param' message = f'Could not determine what action to take with {context}.' with pytest.raises(ValueError): GithubArchive.determine_repo_context(repos, context, 'clone') mock_determine_repo_context.assert_not_called() mock_logger.error.assert_called_once_with(message)
def test_initialize_project_missing_all_cli_args(mock_logger): # TODO: Is it possible to test all variations easily in one test? # Parametrize doesn't work great because we can't easily swap the param name being used message = 'At least one git operation and one list must be provided to run github-archive.' with pytest.raises(ValueError) as error: github_archive = GithubArchive() github_archive.initialize_project() mock_logger.assert_called_with(message) assert message == str(error.value)
def test_initialize_project_missing_operation(mock_logger): # TODO: Is it possible to test all variations easily in one test? # Parametrize doesn't work great because we can't easily swap the param name being used message = 'A list must be provided when a git operation is specified.' with pytest.raises(ValueError) as error: github_archive = GithubArchive(clone=True, ) github_archive.initialize_project() mock_logger.assert_called_with(message) assert message == str(error.value)
def test_archive_repo_use_https_success(mock_logger, mock_subprocess, mock_git_asset): # TODO: Mock the subprocess better to ensure it's doing what it should operation = CLONE_OPERATION message = f'Repo: {mock_git_asset.owner.login}/{mock_git_asset.name} {operation} success!' github_archive = GithubArchive(use_https=True, ) github_archive.archive_repo(mock_git_asset, 'mock/path', operation) mock_subprocess.assert_called() mock_logger.assert_called_once_with(message)
def test_run_orgs_pull_true(mock_logger, mock_determine_repo_context, mock_iterate_gists, mock_get_all_org_repos): GithubArchive.run(user_clone=False, user_pull=False, orgs_clone=False, orgs_pull=True, gists_clone=False, gists_pull=False, branch='master') mock_get_all_org_repos.assert_called_once() mock_determine_repo_context.assert_called_once() mock_iterate_gists.assert_not_called() mock_logger.info.call_count == 3
def test_run_user_pull_true(mock_logger, mock_iterate_repos, mock_iterate_gists, mock_get_repos): GithubArchive.run( user_clone=False, user_pull=True, orgs_clone=False, orgs_pull=False, gists_clone=False, gists_pull=False, ) mock_get_repos.assert_called_once() mock_iterate_repos.assert_called_once() mock_iterate_gists.assert_not_called() mock_logger.info.call_count == 3
def test_run_orgs_list_without_flag(mock_logger, mock_iterate_repos, mock_iterate_gists, mock_get_all_org_repos): GithubArchive.run(user_clone=False, user_pull=False, orgs_clone=False, orgs_pull=False, gists_clone=False, gists_pull=False, branch='master') mock_get_all_org_repos.assert_not_called() mock_iterate_repos.assert_not_called() mock_iterate_gists.assert_not_called() mock_logger.info.call_count == 3
def test_run_token_view(mock_get_all_git_assets, mock_view_repos, mock_authed_user_in_users, mock_get_user): github_archive = GithubArchive( token='123', users='justintime50', view=True, ) github_archive.authenticated_username = '******' github_archive.run() mock_get_all_git_assets.assert_called_once() mock_view_repos.assert_called_once() assert github_archive.users == [ ] # Assert the authed user gets removed from list
def test_initialize_project_include_exclude_together(mock_logger): # TODO: Is it possible to test all variations easily in one test? # Parametrize doesn't work great because we can't easily swap the param name being used message = 'The include and exclude flags are mutually exclusive. Only one can be used on each run.' with pytest.raises(ValueError) as error: github_archive = GithubArchive( users='justintime50', clone=True, include='mock-repo', exclude='another-mock-repo', ) github_archive.initialize_project() mock_logger.assert_called_with(message) assert message == str(error.value)
def test_run_token_pull(mock_get_all_git_assets, mock_iterate_repos_to_archive, mock_authed_user_in_users, mock_get_user): github_archive = GithubArchive( token='123', users='justintime50', pull=True, ) github_archive.authenticated_username = '******' github_archive.run() mock_get_all_git_assets.assert_called_once() mock_iterate_repos_to_archive.assert_called_once_with( mock_get_all_git_assets(), PULL_OPERATION) assert github_archive.users == [ ] # Assert the authed user gets removed from list
def test_iterate_gists(mock_archive_gist, mock_github_instance, mock_git_asset): gists = [mock_git_asset] GithubArchive(gists='mock_username', ).iterate_gists_to_archive( gists, CLONE_OPERATION) mock_archive_gist.assert_called()
def test_get_get_all_gists(mock_get_user, mock_get_gists, mock_github_instance): gists = 'justintime50,user2' GithubArchive(gists=gists, ).get_all_git_assets(GIST_CONTEXT) mock_get_user.call_count == len(gists) mock_get_gists.call_count == len(gists)
def test_get_all_user_repos(mock_get_user, mock_get_repos, mock_github_instance): users = 'justintime50,user2' GithubArchive(users=users, ).get_all_git_assets(USER_CONTEXT) mock_get_user.call_count == len(users) mock_get_repos.call_count == len(users)
def test_authenticated_user_in_users(mock_get_user): authenticated_user_in_users = GithubArchive( token='123', users='unauthenticated_user', ).authenticated_user_in_users() assert authenticated_user_in_users is False
def test_run_users_view(mock_get_all_git_assets, mock_view_repos): GithubArchive( users='justintime50', view=True, ).run() mock_get_all_git_assets.assert_called_once() mock_view_repos.assert_called_once()
def test_remove_failed_dirs_on_error(mock_logger, mock_chmod, mock_path_exists): """Tests that we remove failed dirs correctly when there's an error such as read-only `.git` folders on Windows.""" with pytest.raises(OSError): GithubArchive().remove_failed_dirs('mock/path', ['mock_dir']) mock_logger.assert_called_once() mock_chmod.assert_called_once()