def test_create_existing_tag(expected_commits): # Creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *first*, so that the function will # return before touching edx/configuration. ordered_commits = OrderedDict([ find_repo_item(expected_commits, 'edx/edx-platform'), find_repo_item(expected_commits, 'edx/configuration'), ]) find_repo(ordered_commits, 'edx/edx-platform').create_ref.side_effect = ALREADY_EXISTS # Creating a tag that does not already exist anywhere. result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) assert result is False find_repo(ordered_commits, 'edx/edx-platform').create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) assert not find_repo(ordered_commits, 'edx/configuration').create_ref.called
def test_create_existing_tag_at_end(expected_commits): # Creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* so that other repos will have # been touched first. ordered_commits = OrderedDict([ find_repo_item(expected_commits, 'edx/configuration'), find_repo_item(expected_commits, 'edx/edx-platform'), ]) find_repo(ordered_commits, 'edx/edx-platform').create_ref.side_effect = ALREADY_EXISTS result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) assert result is False find_repo(ordered_commits, 'edx/edx-platform').create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) find_repo(ordered_commits, 'edx/configuration').create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # Second request failed, so rollback the first. find_repo(ordered_commits, 'edx/configuration' ).create_ref.return_value.delete.assert_called_once_with()
def test_create_happy_path(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } # creating a tag that does not already exist anywhere result = create_ref_for_repos( { repo_objs[repo_name]: ref_info for repo_name, ref_info in expected_commits.items() }, "tag-exists-no-repos", dry=False, ) assert result is True repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-no-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-no-repos", ) repo_objs['edx/XBlock'].create_ref.assert_called_once_with( sha="1a2b3c4d5e6f", ref="refs/tags/tag-exists-no-repos", )
def test_create_existing_tag(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *first* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/edx-platform', 'edx/configuration') ) # creating a tag that does not already exist anywhere result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) assert result is False repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) assert not repo_objs['edx/configuration'].create_ref.called
def test_create_existing_tag(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *first* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/edx-platform', 'edx/configuration')) # creating a tag that does not already exist anywhere result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) assert result is False repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) assert not repo_objs['edx/configuration'].create_ref.called
def test_create_existing_tag_at_end_no_rollback(expected_commits): # Creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* so that other repos will have # been touched first. ordered_commits = OrderedDict([ find_repo_item(expected_commits, 'edx/configuration'), find_repo_item(expected_commits, 'edx/edx-platform'), ]) find_repo(ordered_commits, 'edx/edx-platform').create_ref.side_effect = ALREADY_EXISTS with pytest.raises(TagReleaseError) as excinfo: create_ref_for_repos( ordered_commits, "tag-exists-some-repos", rollback_on_fail=False, dry=False, ) find_repo(ordered_commits, 'edx/edx-platform').create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) find_repo(ordered_commits, 'edx/configuration').create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # Second request failed, no rollback of the first. assert not find_repo( ordered_commits, 'edx/configuration').create_ref.return_value.delete.called assert "No rollback attempted" in str(excinfo.value) assert "Reference already exists" in str(excinfo.value) assert "Refs exist on the following repos: " in str(excinfo.value) assert "edx/configuration" in str(excinfo.value)
def test_create_existing_tag_at_end_rollback_failure(expected_commits): # Creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* so that other repos will have # been touched first. ordered_commits = OrderedDict([ find_repo_item(expected_commits, 'edx/configuration'), find_repo_item(expected_commits, 'edx/edx-platform'), ]) edx_edx_platform = find_repo(ordered_commits, 'edx/edx-platform') edx_edx_platform.create_ref.side_effect = ALREADY_EXISTS # When we try to delete the configuration tag, it will fail with a 500 error edx_configuration = find_repo(ordered_commits, 'edx/configuration') edx_configuration.create_ref.return_value.delete.side_effect = GitHubError( Mock(status_code=500)) with pytest.raises(TagReleaseError) as excinfo: create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) edx_edx_platform.create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) edx_configuration.create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # Second response failed, so try to rollback. # ... but configuration fails, so we get an exception edx_configuration.create_ref.return_value.delete.assert_called_once_with() assert "failed to delete ref on the following repos: edx/configuration" in str( excinfo)
def test_create_existing_tag_at_end_rollback_failure(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # when we try to delete the configuration tag, it will fail with a 500 error repo_objs[ 'edx/configuration'].create_ref.return_value.delete.side_effect = GitHubError( Mock(status_code=500)) # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/configuration', 'edx/edx-platform')) with pytest.raises(RuntimeError) as excinfo: result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # second response failed, so try to rollback. # ... but configuration fails, so we get an exception repo_objs[ 'edx/configuration'].create_ref.return_value.delete.assert_called_once_with( ) assert "failed to delete ref on the following repos: edx/configuration" in str( excinfo)
def test_create_existing_tag_at_end_no_rollback(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/configuration', 'edx/edx-platform') ) with pytest.raises(RuntimeError) as excinfo: result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", rollback_on_fail=False, dry=False, ) repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # second request failed, no rollback of the first. assert not repo_objs['edx/configuration'].create_ref.return_value.delete.called assert "No rollback attempted" in str(excinfo.value) assert "Reference already exists" in str(excinfo.value) assert "Refs exist on the following repos: " in str(excinfo.value) assert "edx/configuration" in str(excinfo.value)
def test_create_existing_tag_at_end_no_rollback(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/configuration', 'edx/edx-platform')) with pytest.raises(RuntimeError) as excinfo: result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", rollback_on_fail=False, dry=False, ) repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # second request failed, no rollback of the first. assert not repo_objs[ 'edx/configuration'].create_ref.return_value.delete.called assert "No rollback attempted" in str(excinfo.value) assert "Reference already exists" in str(excinfo.value) assert "Refs exist on the following repos: " in str(excinfo.value) assert "edx/configuration" in str(excinfo.value)
def test_create_existing_tag_at_end_rollback_failure(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # when we try to delete the configuration tag, it will fail with a 500 error repo_objs['edx/configuration'].create_ref.return_value.delete.side_effect = GitHubError(Mock(status_code=500)) # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/configuration', 'edx/edx-platform') ) with pytest.raises(RuntimeError) as excinfo: result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # second response failed, so try to rollback. # ... but configuration fails, so we get an exception repo_objs['edx/configuration'].create_ref.return_value.delete.assert_called_once_with() assert "failed to delete ref on the following repos: edx/configuration" in str(excinfo)
def test_create_happy_path(expected_commits): # Creating a tag that does not already exist anywhere. result = create_ref_for_repos(expected_commits, "tag-exists-no-repos", dry=False) assert result is True find_repo(expected_commits, 'edx/edx-platform').create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-no-repos", ) find_repo(expected_commits, 'edx/configuration').create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-no-repos", ) find_repo(expected_commits, 'edx/XBlock').create_ref.assert_called_once_with( sha="1a2b3c4d5e6f", ref="refs/tags/tag-exists-no-repos", )
def test_create_existing_tag_at_end(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/configuration', 'edx/edx-platform') ) result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) assert result is False repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # second request failed, so rollback the first. repo_objs['edx/configuration'].create_ref.return_value.delete.assert_called_once_with()
def test_create_existing_tag_at_end(): repo_objs = { repo_name: mock_repository(repo_name) for repo_name in expected_commits } repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS # creating a tag that already exists in edx-platform: we'll make sure # that edx-platform is attempted *last* ordered_commits = OrderedDict( (repo_objs[repo_name], expected_commits[repo_name]) for repo_name in ('edx/configuration', 'edx/edx-platform')) result = create_ref_for_repos( ordered_commits, "tag-exists-some-repos", dry=False, ) assert result is False repo_objs['edx/edx-platform'].create_ref.assert_called_once_with( sha="deadbeef12345", ref="refs/tags/tag-exists-some-repos", ) repo_objs['edx/configuration'].create_ref.assert_called_once_with( sha="12345deadbeef", ref="refs/tags/tag-exists-some-repos", ) # second request failed, so rollback the first. repo_objs[ 'edx/configuration'].create_ref.return_value.delete.assert_called_once_with( )