Sha256: f68fa2667175de64c130940f4122b45805ea981278e6c0887b9816e45d5e3a96

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require 'spec_helper'

describe KPM::NexusFacade::Actions do
  subject { described_class.new({}, nil, logger) }
  let(:logger) { Logger.new(STDOUT) }
  let(:nexus_mock) { double(KPM::NexusFacade::NexusApiCallsV2) }

  before do
    KPM::NexusFacade::NexusApiCallsV2.stub(:new).and_return(nexus_mock)
  end

  context 'when Nexus throws a non-retryable exception' do
    it 'never retries' do
      calls = 0
      expect do
        subject.send(:retry_exceptions, 'foo') do
          calls += 1
          raise StandardError, '404'
        end
      end.to raise_error(StandardError)
      expect(calls).to eq(1)
    end
  end

  context 'when Nexus throws a retryable exception' do
    it 'retries until giving up' do
      calls = 0
      expect do
        subject.send(:retry_exceptions, 'foo') do
          calls += 1
          raise KPM::NexusFacade::UnexpectedStatusCodeException, 503
        end
      end.to raise_error(StandardError)
      expect(calls).to eq(3)
    end
  end

  context 'when networking is flaky' do
    it 'retries until call succeeds' do
      calls = 0
      expect(subject.send(:retry_exceptions, 'foo') do
        calls += 1
        raise OpenSSL::SSL::SSLErrorWaitReadable if calls < 2

        true
      end).to be_true
      expect(calls).to eq(2)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kpm-0.8.2 spec/kpm/unit/actions_spec.rb
kpm-0.8.1 spec/kpm/unit/actions_spec.rb
kpm-0.8.0 spec/kpm/unit/actions_spec.rb