33require 'rails_helper'
44
55describe DHS ::Record do
6- context 'pagination' do
6+ context 'next offset pagination' do
77 def stub_api_request ( next_offset :, items : [ ] , offset : nil )
88 stub_request ( :get , [ 'http://depay.fi/v2/transactions?limit=100' , offset ? "offset=#{ offset } " : nil ] . compact . join ( '&' ) )
99 . to_return ( body : { items : items , next_offset : next_offset } . to_json )
@@ -28,4 +28,56 @@ class Transaction < DHS::Record
2828 expect ( transactions . to_a ) . to eq ( 0 ...300 ) . to_a
2929 end
3030 end
31+
32+ context 'next offset pagination with items configuration' do
33+ def stub_api_request ( next_offset :, items : [ ] , offset : nil )
34+ stub_request ( :get , [ 'http://depay.fi/v2/transactions?limit=100' , offset ? "offset=#{ offset } " : nil ] . compact . join ( '&' ) )
35+ . to_return ( body : { assets : items , next_offset : next_offset } . to_json )
36+ end
37+
38+ let! ( :requests ) do
39+ stub_api_request ( items : ( 0 ...100 ) . to_a , next_offset : 99 )
40+ stub_api_request ( items : ( 100 ...200 ) . to_a , offset : 99 , next_offset : 199 )
41+ stub_api_request ( items : ( 200 ...300 ) . to_a , offset : 199 , next_offset : 0 )
42+ end
43+
44+ before do
45+ class Transaction < DHS ::Record
46+ configuration items_key : :assets , pagination_strategy : :next_offset , pagination_key : { body : :next_offset , parameter : :offset }
47+
48+ endpoint 'http://depay.fi/v2/transactions'
49+ end
50+ end
51+
52+ it 'fetches and merges all the assets/items' do
53+ transactions = Transaction . all . fetch
54+ expect ( transactions . to_a ) . to eq ( 0 ...300 ) . to_a
55+ end
56+ end
57+
58+ context 'next offset pagination with items configuration and nil response' do
59+ def stub_api_request ( next_offset :, items : [ ] , offset : nil )
60+ stub_request ( :get , [ 'http://depay.fi/v2/transactions?limit=100' , offset ? "offset=#{ offset } " : nil ] . compact . join ( '&' ) )
61+ . to_return ( body : { assets : items , next_offset : next_offset } . to_json )
62+ end
63+
64+ let! ( :requests ) do
65+ stub_api_request ( items : ( 0 ...100 ) . to_a , next_offset : 99 )
66+ stub_api_request ( items : ( 100 ...200 ) . to_a , offset : 99 , next_offset : 199 )
67+ stub_api_request ( items : nil , offset : 199 , next_offset : 0 )
68+ end
69+
70+ before do
71+ class Transaction < DHS ::Record
72+ configuration items_key : :assets , pagination_strategy : :next_offset , pagination_key : { body : :next_offset , parameter : :offset }
73+
74+ endpoint 'http://depay.fi/v2/transactions'
75+ end
76+ end
77+
78+ it 'fetches and merges all the assets/items' do
79+ transactions = Transaction . all . fetch
80+ expect ( transactions . to_a ) . to eq ( 0 ...200 ) . to_a
81+ end
82+ end
3183end
0 commit comments