# frozen_string_literal: true RSpec.describe Fiken::Collection do subject(:client) { Fiken::Client.new(token: "t") } def page_headers(page:, page_count:, result_count:) { "Fiken-Api-Page" => page.to_s, "Fiken-Api-Page-Size" => "25", "Fiken-Api-Page-Count" => page_count.to_s, "Fiken-Api-Result-Count" => result_count.to_s } end it "exposes pagination metadata from response headers" do stub_fiken(:get, "/companies", body: [{ "slug" => "a" }], headers: page_headers(page: 0, page_count: 3, result_count: 3)) collection = client.companies.list expect(collection.page).to eq(0) expect(collection.page_count).to eq(3) expect(collection.result_count).to eq(3) expect(collection.last_page?).to be(false) end it "walks every page with auto_paging_each" do stub_request(:get, "#{API_BASE}/companies") .to_return(status: 200, body: JSON.generate([{ "slug" => "a" }]), headers: { "Content-Type" => "application/json" } .merge(page_headers(page: 0, page_count: 2, result_count: 2))) stub_request(:get, "#{API_BASE}/companies") .with(query: { "page" => "1" }) .to_return(status: 200, body: JSON.generate([{ "slug" => "b" }]), headers: { "Content-Type" => "application/json" } .merge(page_headers(page: 1, page_count: 2, result_count: 2))) slugs = client.companies.list.auto_paging_each.map(&:slug) expect(slugs).to eq(%w[a b]) end end