Sha256: ea6c51dea7a2f4dd03c50744b48d557dc817c975505a74461069cdc734d114ff

Contents?: true

Size: 1.94 KB

Versions: 10

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

require 'rails_helper'

describe DHS::Collection do
  let(:total) { 443 }

  let(:limit) { 100 }

  def api_response(ids, offset)
    records = ids.map { |i| { id: i } }
    {
      items: records,
      total: total,
      limit: limit,
      offset: offset
    }.to_json
  end

  let(:datastore) { 'http://depay.fi/v2' }

  before do
    DHC.config.placeholder('datastore', datastore)
    class Record < DHS::Record
      endpoint '{+datastore}/{campaign_id}/feedbacks'
      endpoint '{+datastore}/feedbacks'
    end
  end

  context 'find_each' do
    it 'processes each record by fetching records in batches' do
      stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=0").to_return(status: 200, body: api_response((1..100).to_a, 0))
      stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=100").to_return(status: 200, body: api_response((101..200).to_a, 100))
      stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=200").to_return(status: 200, body: api_response((201..300).to_a, 200))
      stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=300").to_return(status: 200, body: api_response((301..400).to_a, 300))
      stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=400").to_return(status: 200, body: api_response((401..total).to_a, 400))
      count = 0
      Record.find_each do |record|
        count += 1
        expect(record.id).to eq(count)
        expect(record).to be_kind_of Record
        expect(record._proxy).to be_kind_of DHS::Item
      end
      expect(count).to eq total
    end

    it 'passes options to the requests made' do
      request = stub_request(:get, 'http://depay.fi/v2/feedbacks?limit=100&offset=0')
        .with(headers: { 'Authorization' => 'Bearer 123' })
        .to_return(body: {
          items: []
        }.to_json)
      Record.find_each(headers: { 'Authorization' => 'Bearer 123' }) { |record| }
      expect(request).to have_been_made
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
dhs-1.6.0 spec/record/find_each_spec.rb
dhs-1.5.0 spec/record/find_each_spec.rb
dhs-1.4.2 spec/record/find_each_spec.rb
dhs-1.4.1 spec/record/find_each_spec.rb
dhs-1.4.0 spec/record/find_each_spec.rb
dhs-1.3.0 spec/record/find_each_spec.rb
dhs-1.2.0 spec/record/find_each_spec.rb
dhs-1.1.0 spec/record/find_each_spec.rb
dhs-1.0.3 spec/record/find_each_spec.rb
dhs-1.0.2 spec/record/find_each_spec.rb