def test_publish_should_not_upload_to_pypi_if_option_is_false(mocker): mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.ci_checks.check") mock_upload_pypi = mocker.patch("semantic_release.cli.upload_to_pypi") mock_upload_release = mocker.patch( "semantic_release.cli.upload_to_release") mocker.patch("semantic_release.cli.post_changelog", lambda *x: True) mocker.patch("semantic_release.cli.push_new_version", return_value=True) mocker.patch("semantic_release.cli.should_bump_version", return_value=False) mocker.patch("semantic_release.cli.markdown_changelog", lambda *x, **y: "CHANGES") mocker.patch("semantic_release.cli.update_changelog_file") mocker.patch("semantic_release.cli.bump_version") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.check_token", lambda: True) mocker.patch( "semantic_release.cli.config.get", wrapped_config_get( remove_dist=False, upload_to_pypi=False, upload_to_release=False, ), ) mocker.patch("semantic_release.cli.update_changelog_file", lambda *x, **y: None) publish() assert not mock_upload_pypi.called assert not mock_upload_release.called
def test_publish_retry_version_fail(mocker): mock_get_current = mocker.patch("semantic_release.cli.get_current_version", return_value="current") mock_get_previous = mocker.patch( "semantic_release.cli.get_previous_version", return_value="previous") mock_get_owner_name = mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("owner", "name"), ) mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_checkout = mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.config.get", lambda *x: "my_branch") mock_should_bump_version = mocker.patch( "semantic_release.cli.should_bump_version", return_value=False) publish(noop=False, retry=True, force_level=False) mock_get_current.assert_called_once_with() mock_get_previous.assert_called_once_with("current") mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with("my_branch") mock_should_bump_version.assert_called_once_with( current_version="previous", new_version="current", noop=False, retry=True)
def test_publish_bad_token(mocker): mock_get_current = mocker.patch("semantic_release.cli.get_current_version", return_value="current") mock_current_release_version = mocker.patch( "semantic_release.cli.get_current_release_version", return_value="1.2.3") get_previous_release_version = mocker.patch( "semantic_release.cli.get_previous_release_version", return_value="previous") mock_get_owner_name = mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("owner", "name"), ) mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_checkout = mocker.patch("semantic_release.cli.checkout") mocker.patch( "semantic_release.cli.config.get", wrapped_config_get( branch="my_branch", upload_to_repository=False, upload_to_release=False, remove_dist=False, ), ) mock_should_bump_version = mocker.patch( "semantic_release.cli.should_bump_version") mock_get_token = mocker.patch("semantic_release.cli.get_token", return_value="SUPERTOKEN") mock_get_domain = mocker.patch("semantic_release.cli.get_domain", return_value="domain") mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_check_token = mocker.patch("semantic_release.cli.check_token", return_value=False) publish(noop=False, retry=True, force_level=False) mock_get_current.assert_called_once() mock_current_release_version.assert_called_once() get_previous_release_version.assert_called_once_with("current") mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with("my_branch") mock_should_bump_version.assert_called_once_with( current_version="previous", new_version="current", current_release_version="1.2.3", prerelease=False, noop=False, retry=True, ) mock_get_token.assert_called() mock_get_domain.assert_called() mock_push.assert_called_once_with( auth_token="SUPERTOKEN", owner="owner", name="name", branch="my_branch", domain="domain", ) mock_check_token.assert_called_once_with()
def test_publish_should_call_functions(mocker): mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_checkout = mocker.patch("semantic_release.cli.checkout") mock_version = mocker.patch("semantic_release.cli.version", return_value=True) mock_log = mocker.patch("semantic_release.cli.post_changelog") mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_pypi = mocker.patch("semantic_release.cli.upload_to_pypi") mock_release = mocker.patch("semantic_release.cli.upload_to_release") mock_build_dists = mocker.patch("semantic_release.cli.build_dists") mock_remove_dists = mocker.patch("semantic_release.cli.remove_dists") mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("relekang", "python-semantic-release"), ) mocker.patch("semantic_release.cli.evaluate_version_bump", lambda *x: "feature") mocker.patch("semantic_release.cli.generate_changelog") mocker.patch("semantic_release.cli.markdown_changelog", lambda *x, **y: "CHANGES") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.check_token", lambda: True) publish() assert mock_ci_check.called assert mock_push.called assert mock_remove_dists.called assert mock_build_dists.called assert mock_pypi.called assert mock_release.called assert mock_version.called mock_log.assert_called_once_with( u"relekang", "python-semantic-release", "2.0.0", "CHANGES" ) mock_checkout.assert_called_once_with("master")
def test_publish_should_run_pre_commit_if_provided(mocker): mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.ci_checks.check") mocker.patch.object(ArtifactRepo, "upload") mocker.patch("semantic_release.cli.upload_to_release") mocker.patch("semantic_release.cli.post_changelog", lambda *x: True) mocker.patch("semantic_release.cli.push_new_version", return_value=True) mocker.patch("semantic_release.cli.should_bump_version", return_value=True) mocker.patch("semantic_release.cli.markdown_changelog", lambda *x, **y: "CHANGES") mocker.patch("semantic_release.cli.update_changelog_file") mocker.patch("semantic_release.cli.bump_version") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.check_token", lambda: True) run_pre_commit = mocker.patch("semantic_release.cli.run_pre_commit") mocker.patch( "semantic_release.cli.config.get", wrapped_config_get( remove_dist=False, upload_to_pypi=False, upload_to_release=False, pre_commit_command='echo "Hello, world."', ), ) mocker.patch("semantic_release.cli.update_changelog_file", lambda *x, **y: None) publish() assert run_pre_commit.called
def test_publish_giterror_when_posting(mocker): mock_get_current = mocker.patch("semantic_release.cli.get_current_version", return_value="current") mock_evaluate = mocker.patch("semantic_release.cli.evaluate_version_bump", return_value="patch") mock_get_new = mocker.patch("semantic_release.cli.get_new_version", return_value="new") mock_get_owner_name = mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("owner", "name"), ) mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_checkout = mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.config.get", return_value="my_branch") mocker.patch("semantic_release.cli.config.getboolean", return_value=False) mock_version = mocker.patch("semantic_release.cli.version") mock_get_token = mocker.patch("semantic_release.cli.get_token", return_value="SUPERTOKEN") mock_get_domain = mocker.patch("semantic_release.cli.get_domain", return_value="domain") mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_check_token = mocker.patch("semantic_release.cli.check_token", return_value=True) mock_generate = mocker.patch("semantic_release.cli.generate_changelog", return_value="super changelog") mock_markdown = mocker.patch("semantic_release.cli.markdown_changelog", return_value="super md changelog") mock_post = mocker.patch("semantic_release.cli.post_changelog", mock.Mock(side_effect=GitError())) publish(noop=False, retry=False, force_level=False) mock_get_current.assert_called_once_with() mock_evaluate.assert_called_once_with("current", False) mock_get_new.assert_called_once_with("current", "patch") mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with("my_branch") mock_version.assert_called_once_with(noop=False, retry=False, force_level=False) mock_get_token.assert_called_once_with() mock_get_domain.assert_called_once_with() mock_push.assert_called_once_with( auth_token="SUPERTOKEN", owner="owner", name="name", branch="my_branch", domain="domain", ) mock_check_token.assert_called_once_with() mock_generate.assert_called_once_with("current", "new") mock_markdown.assert_called_once_with("new", "super changelog", header=False) mock_post.assert_called_once_with("owner", "name", "new", "super md changelog")
def test_publish_giterror_when_posting(mocker): mock_get_current = mocker.patch('semantic_release.cli.get_current_version', return_value='current') mock_evaluate = mocker.patch('semantic_release.cli.evaluate_version_bump', return_value='patch') mock_get_new = mocker.patch('semantic_release.cli.get_new_version', return_value='new') mock_get_owner_name = mocker.patch( 'semantic_release.cli.get_repository_owner_and_name', return_value=('owner', 'name')) mock_ci_check = mocker.patch('semantic_release.ci_checks.check') mock_checkout = mocker.patch('semantic_release.cli.checkout') mocker.patch('semantic_release.cli.config.get', return_value='my_branch') mocker.patch('semantic_release.cli.config.getboolean', return_value=False) mock_version = mocker.patch('semantic_release.cli.version') mock_get_token = mocker.patch('semantic_release.cli.get_token', return_value='SUPERTOKEN') mock_get_domain = mocker.patch('semantic_release.cli.get_domain', return_value='domain') mock_push = mocker.patch('semantic_release.cli.push_new_version') mock_check_token = mocker.patch('semantic_release.cli.check_token', return_value=True) mock_generate = mocker.patch('semantic_release.cli.generate_changelog', return_value='super changelog') mock_markdown = mocker.patch('semantic_release.cli.markdown_changelog', return_value='super md changelog') mock_post = mocker.patch('semantic_release.cli.post_changelog', mock.Mock(side_effect=GitError())) publish(noop=False, retry=False, force_level=False) mock_get_current.assert_called_once_with() mock_evaluate.assert_called_once_with('current', False) mock_get_new.assert_called_once_with('current', 'patch') mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with('my_branch') mock_version.assert_called_once_with(noop=False, retry=False, force_level=False) mock_get_token.assert_called_once_with() mock_get_domain.assert_called_once_with() mock_push.assert_called_once_with(auth_token='SUPERTOKEN', owner='owner', name='name', branch='my_branch', domain='domain') mock_check_token.assert_called_once_with() mock_generate.assert_called_once_with('current', 'new') mock_markdown.assert_called_once_with('new', 'super changelog', header=False) mock_post.assert_called_once_with('owner', 'name', 'new', 'super md changelog')
def test_publish_should_skip_build_when_command_is_empty(mocker): mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_checkout = mocker.patch("semantic_release.cli.checkout") mock_should_bump_version = mocker.patch( "semantic_release.cli.should_bump_version", return_value=True) mock_log = mocker.patch("semantic_release.cli.post_changelog") mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mocker.patch.dict( "os.environ", { "REPOSITORY_USERNAME": "******", "REPOSITORY_PASSWORD": "******", }, ) mock_repository = mocker.patch.object(ArtifactRepo, "upload") mock_release = mocker.patch("semantic_release.cli.upload_to_release") mock_build_dists = mocker.patch("semantic_release.cli.build_dists") mock_remove_dists = mocker.patch("semantic_release.cli.remove_dists") mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("relekang", "python-semantic-release"), ) mocker.patch("semantic_release.cli.evaluate_version_bump", lambda *x: "feature") mocker.patch("semantic_release.cli.generate_changelog") mocker.patch("semantic_release.cli.markdown_changelog", lambda *x, **y: "CHANGES") mocker.patch("semantic_release.cli.update_changelog_file") mocker.patch("semantic_release.cli.bump_version") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.check_token", lambda: True) mocker.patch( "semantic_release.cli.config.get", wrapped_config_get(build_command="", ), ) publish() assert mock_ci_check.called assert mock_push.called assert not mock_remove_dists.called assert not mock_build_dists.called assert mock_repository.called assert mock_release.called assert mock_should_bump_version.called mock_log.assert_called_once_with("relekang", "python-semantic-release", "2.0.0", "CHANGES") mock_checkout.assert_called_once_with("master")
def test_publish_should_call_functions_with_custom_pypi_glob_patterns(mocker): mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_checkout = mocker.patch("semantic_release.cli.checkout") mock_should_bump_version = mocker.patch( "semantic_release.cli.should_bump_version", return_value=True ) mock_log = mocker.patch("semantic_release.cli.post_changelog") mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_pypi = mocker.patch("semantic_release.cli.upload_to_pypi") mock_release = mocker.patch("semantic_release.cli.upload_to_release") mock_build_dists = mocker.patch("semantic_release.cli.build_dists") mock_remove_dists = mocker.patch("semantic_release.cli.remove_dists") mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("relekang", "python-semantic-release"), ) mocker.patch("semantic_release.cli.evaluate_version_bump", lambda *x: "feature") mocker.patch("semantic_release.cli.generate_changelog") mocker.patch("semantic_release.cli.markdown_changelog", lambda *x, **y: "CHANGES") mocker.patch("semantic_release.cli.update_changelog_file") mocker.patch("semantic_release.cli.bump_version") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.check_token", lambda: True) mocker.patch( "semantic_release.cli.config.get", wrapped_config_get( upload_to_pypi_glob_patterns="*.tar.gz,*.whl", ), ) publish() assert mock_ci_check.called assert mock_push.called assert mock_remove_dists.called assert mock_build_dists.called mock_pypi.assert_called_with( path="dist", skip_existing=None, glob_patterns=["*.tar.gz", "*.whl"] ) assert mock_release.called assert mock_should_bump_version.called mock_log.assert_called_once_with( u"relekang", "python-semantic-release", "2.0.0", "CHANGES" ) mock_checkout.assert_called_once_with("master")
def test_publish_bad_token(mocker): mock_get_current = mocker.patch("semantic_release.cli.get_current_version", return_value="current") mock_get_previous = mocker.patch( "semantic_release.cli.get_previous_version", return_value="previous") mock_get_owner_name = mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("owner", "name"), ) mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_checkout = mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.config.get", return_value="my_branch") mocker.patch("semantic_release.cli.config.getboolean", return_value=False) mock_version = mocker.patch("semantic_release.cli.version") mock_get_token = mocker.patch("semantic_release.cli.get_token", return_value="SUPERTOKEN") mock_get_domain = mocker.patch("semantic_release.cli.get_domain", return_value="domain") mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_check_token = mocker.patch("semantic_release.cli.check_token", return_value=False) publish(noop=False, retry=True, force_level=False) mock_get_current.assert_called_once_with() mock_get_previous.assert_called_once_with("current") mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with("my_branch") mock_version.assert_called_once_with(noop=False, retry=True, force_level=False) mock_get_token.assert_called() mock_get_domain.assert_called() mock_push.assert_called_once_with( auth_token="SUPERTOKEN", owner="owner", name="name", branch="my_branch", domain="domain", ) mock_check_token.assert_called_once_with()
def test_publish_should_do_nothing_when_version_fails(mocker): mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.evaluate_version_bump", lambda *x: "feature") mocker.patch("semantic_release.cli.generate_changelog") mock_log = mocker.patch("semantic_release.cli.post_changelog") mock_upload_pypi = mocker.patch("semantic_release.cli.upload_to_pypi") mock_upload_release = mocker.patch("semantic_release.cli.upload_to_release") mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_version = mocker.patch("semantic_release.cli.version", return_value=False) publish() assert mock_version.called assert not mock_push.called assert not mock_upload_pypi.called assert not mock_upload_release.called assert not mock_log.called assert mock_ci_check.called
def test_publish_bad_token(mocker): mock_get_current = mocker.patch('semantic_release.cli.get_current_version', return_value='current') mock_get_previous = mocker.patch( 'semantic_release.cli.get_previous_version', return_value='previous') mock_get_owner_name = mocker.patch( 'semantic_release.cli.get_repository_owner_and_name', return_value=('owner', 'name')) mock_ci_check = mocker.patch('semantic_release.ci_checks.check') mock_checkout = mocker.patch('semantic_release.cli.checkout') mocker.patch('semantic_release.cli.config.get', return_value='my_branch') mocker.patch('semantic_release.cli.config.getboolean', return_value=False) mock_version = mocker.patch('semantic_release.cli.version') mock_get_token = mocker.patch('semantic_release.cli.get_token', return_value='SUPERTOKEN') mock_get_domain = mocker.patch('semantic_release.cli.get_domain', return_value='domain') mock_push = mocker.patch('semantic_release.cli.push_new_version') mock_check_token = mocker.patch('semantic_release.cli.check_token', return_value=False) publish(noop=False, retry=True, force_level=False) mock_get_current.assert_called_once_with() mock_get_previous.assert_called_once_with('current') mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with('my_branch') mock_version.assert_called_once_with(noop=False, retry=True, force_level=False) mock_get_token.assert_called() mock_get_domain.assert_called() mock_push.assert_called_once_with(auth_token='SUPERTOKEN', owner='owner', name='name', branch='my_branch', domain='domain') mock_check_token.assert_called_once_with()
def test_publish_should_do_nothing_when_not_should_bump_version(mocker): mocker.patch("semantic_release.cli.checkout") mocker.patch("semantic_release.cli.get_new_version", lambda *x: "2.0.0") mocker.patch("semantic_release.cli.evaluate_version_bump", lambda *x: "feature") mocker.patch("semantic_release.cli.generate_changelog") mock_log = mocker.patch("semantic_release.cli.post_changelog") mock_repository = mocker.patch.object(ArtifactRepo, "upload") mock_upload_release = mocker.patch( "semantic_release.cli.upload_to_release") mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_should_bump_version = mocker.patch( "semantic_release.cli.should_bump_version", return_value=False) publish() assert mock_should_bump_version.called assert not mock_push.called assert not mock_repository.called assert not mock_upload_release.called assert not mock_log.called assert mock_ci_check.called
def test_publish_retry_version_fail(mocker): mock_get_current = mocker.patch('semantic_release.cli.get_current_version', return_value='current') mock_get_previous = mocker.patch( 'semantic_release.cli.get_previous_version', return_value='previous') mock_get_owner_name = mocker.patch( 'semantic_release.cli.get_repository_owner_and_name', return_value=('owner', 'name')) mock_ci_check = mocker.patch('semantic_release.ci_checks.check') mock_checkout = mocker.patch('semantic_release.cli.checkout') mocker.patch('semantic_release.cli.config.get', lambda *x: 'my_branch') mock_version = mocker.patch('semantic_release.cli.version', return_value=False) publish(noop=False, retry=True, force_level=False) mock_get_current.assert_called_once_with() mock_get_previous.assert_called_once_with('current') mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with('my_branch') mock_version.assert_called_once_with(noop=False, retry=True, force_level=False)
def test_publish_giterror_when_posting(mocker): mock_current_version = mocker.patch( "semantic_release.cli.get_current_version", return_value="1.2.3") mock_current_release_version = mocker.patch( "semantic_release.cli.get_current_release_version", return_value="1.2.3") mock_evaluate = mocker.patch("semantic_release.cli.evaluate_version_bump", return_value="patch") mock_get_new = mocker.patch("semantic_release.cli.get_new_version", return_value="new") mock_get_owner_name = mocker.patch( "semantic_release.cli.get_repository_owner_and_name", return_value=("owner", "name"), ) mock_ci_check = mocker.patch("semantic_release.ci_checks.check") mock_checkout = mocker.patch("semantic_release.cli.checkout") mocker.patch( "semantic_release.cli.config.get", wrapped_config_get( branch="my_branch", upload_to_repository=False, upload_to_release=False, remove_dist=False, ), ) mock_bump_version = mocker.patch("semantic_release.cli.bump_version") mock_should_bump_version = mocker.patch( "semantic_release.cli.should_bump_version", return_value=True) mock_get_token = mocker.patch("semantic_release.cli.get_token", return_value="SUPERTOKEN") mock_get_domain = mocker.patch("semantic_release.cli.get_domain", return_value="domain") mock_push = mocker.patch("semantic_release.cli.push_new_version") mock_check_token = mocker.patch("semantic_release.cli.check_token", return_value=True) mock_generate = mocker.patch("semantic_release.cli.generate_changelog", return_value="super changelog") mock_markdown = mocker.patch("semantic_release.cli.markdown_changelog", return_value="super md changelog") mock_update_changelog_file = mocker.patch( "semantic_release.cli.update_changelog_file") mock_post = mocker.patch("semantic_release.cli.post_changelog", mock.Mock(side_effect=GitError())) publish(noop=False, retry=False, force_level=False) mock_current_version.assert_called_once() mock_current_release_version.assert_called_once() mock_evaluate.assert_called_once_with("1.2.3", False) mock_get_new.assert_called_once_with("1.2.3", "1.2.3", "patch", False) mock_get_owner_name.assert_called_once_with() mock_ci_check.assert_called() mock_checkout.assert_called_once_with("my_branch") mock_should_bump_version.assert_called_once_with( current_version="1.2.3", new_version="new", current_release_version="1.2.3", prerelease=False, noop=False, retry=False, ) mock_update_changelog_file.assert_called_once_with("new", "super md changelog") mock_bump_version.assert_called_once_with("new", "patch") mock_get_token.assert_called_once_with() mock_get_domain.assert_called_once_with() mock_push.assert_called_once_with( auth_token="SUPERTOKEN", owner="owner", name="name", branch="my_branch", domain="domain", ) mock_check_token.assert_called_once_with() mock_generate.assert_called_once_with("1.2.3") mock_markdown.assert_called_once_with( "owner", "name", "new", "super changelog", header=False, previous_version="1.2.3", ) mock_post.assert_called_once_with("owner", "name", "new", "super md changelog")