Sha256: db0c3d44483ca368be06cbe1c13c3ff4f50fdc54032e04185505f172540cca00

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true
RSpec.describe SoapyBing::Soap::Request::PollGenerateReportRequest do
  describe '#perform' do
    let(:response_body) do
      {
        'Envelope' => {
          'Body' => {
            'PollGenerateReportResponse' => {
              'ReportRequestStatus' => {
                'Status' => nil,
                'ReportDownloadUrl' => 'http://example.com'
              }
            }
          }
        }
      }
    end

    let(:pending_response_body) do
      response_body['Envelope']['Body']['PollGenerateReportResponse'] \
        ['ReportRequestStatus']['Status'] = 'Pending'
      response_body
    end
    let(:successful_response_body) do
      response_body['Envelope']['Body']['PollGenerateReportResponse'] \
        ['ReportRequestStatus']['Status'] = 'Success'
      response_body
    end

    before do
      call_count = 0
      allow(HTTParty).to receive(:post) do
        call_count += 1
        call_count == 3 ? successful_response_body : pending_response_body
      end
    end

    subject do
      described_class
        .new(
          context: {
            oauth: instance_double(SoapyBing::OauthCredentials).as_null_object,
            account: instance_double(SoapyBing::Account).as_null_object
          }
        )
        .perform
    end

    it 'polls until successful response' do
      expect(HTTParty).to receive(:post).exactly(3).times
      expect(subject.payload).to eq 'http://example.com'
    end

    it 'throws PollingTimeoutError when exceeded polling tries' do
      stub_const('SoapyBing::Soap::Request::PollGenerateReportRequest::POLLING_TRIES', 1)
      expect(HTTParty).to receive(:post).once
      expect { subject }.to raise_error described_class::PollingTimeoutError
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
soapy_bing-0.1.0 spec/soapy_bing/soap/request/poll_generate_report_request_spec.rb