Sha256: db2cfcc811eadb5d0252ed93f3ac1d982d7325f7bd716788dde3d8b55495e222

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

# Prerequisites:
# * set up any method stubs on the git repo to raise error, e.g.
#     before { allow(git_repo).to receive(:pull).and raise_error(error) }
# * define a method named retry_git_command to set up retry expectations, e.g.
#     let(:retry_git_command) do
#       expect(git_repo).to have_received(:pull).exactly(retry_limit).times
#     end
shared_examples_for 'a git error handler' do
  let(:safe_subject) { subject rescue error }

  context 'with Git::GitExecuteError' do
    let(:error) { Git::GitExecuteError.new('some git error') }

    let(:retry_limit) { 3 }

    it 'retries 3 times' do
      safe_subject
      retry_git_command
    end

    it 'logs the error' do
      expect(logger).to receive(:error)
      safe_subject
    end

    it 'raises a GithubBitbucketDeployer::CommandException' do
      expect { subject }
        .to raise_error(GithubBitbucketDeployer::CommandException)
    end
  end

  context 'with any other type of error' do
    let(:error) { ArgumentError.new('some non-git error') }

    let(:retry_limit) { 1 }

    it 'only tries once' do
      safe_subject
      retry_git_command
    end

    it 'raises the original exception' do
      expect { subject }.to raise_error(error)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
github_bitbucket_deployer-1.0.1 spec/support/shared_examples/git_error_handler.rb
github_bitbucket_deployer-1.0.0 spec/support/shared_examples/git_error_handler.rb