@@ -1586,34 +1586,39 @@ def request_params
15861586 end
15871587
15881588 describe '#find_by_pages' do
1589- let ( :model ) do
1590- new_class do
1591- self . range_key = :range
1589+ it 'yields one page at a time' do
1590+ klass = new_class do
1591+ range :range
15921592 field :city
15931593 field :age , :number
15941594 field :range , :number
15951595 field :data
15961596 end
1597- end
15981597
1599- before do
16001598 120 . times do |i |
1601- model . create (
1602- id : '1' ,
1603- range : i . to_f ,
1604- age : i . to_f ,
1605- data : 'A' * 1024 * 16
1606- )
1599+ klass . create ( id : '1' , range : i . to_f , age : i . to_f , data : 'A' * 1024 * 16 )
16071600 end
1608- end
16091601
1610- it 'yields one page at a time' do
1611- expect { |b | model . where ( id : '1' ) . find_by_pages ( &b ) } . to yield_successive_args (
1612- [ all ( be_a ( model ) ) , { last_evaluated_key : an_instance_of ( Hash ) } ] ,
1613- [ all ( be_a ( model ) ) , { last_evaluated_key : nil } ] ,
1602+ expect { |b | klass . where ( id : '1' ) . find_by_pages ( &b ) } . to yield_successive_args (
1603+ [ all ( be_a ( klass ) ) , { last_evaluated_key : an_instance_of ( Hash ) } ] ,
1604+ [ all ( be_a ( klass ) ) , { last_evaluated_key : nil } ] ,
16141605 )
16151606 end
16161607
1608+ it 'returns :last_evaluated_key which may be used to restart iteration' do
1609+ klass = new_class do
1610+ field :name
1611+ end
1612+
1613+ # Creates exactly 2 full pages
1614+ 58 . times { klass . create! ( name : SecureRandom . uuid * 1024 ) }
1615+
1616+ first_page , first_page_meta = klass . find_by_pages . first
1617+ second_page , = klass . start ( first_page_meta [ :last_evaluated_key ] ) . find_by_pages . first
1618+
1619+ expect ( first_page & second_page ) . to be_empty
1620+ end
1621+
16171622 describe 'callbacks' do
16181623 it 'runs after_initialize callback' do
16191624 klass_with_callback = new_class do
@@ -2895,4 +2900,35 @@ def request_params
28952900 end
28962901 end
28972902 end
2903+
2904+ describe '#consistent' do
2905+ it 'sends ConsistentRead attribute in Query request' do
2906+ klass = new_class do
2907+ range :name
2908+ end
2909+ klass . create_table
2910+
2911+ expect {
2912+ described_class . new ( klass ) . where ( id : '1' , name : 'Alex' ) . consistent . all . to_a
2913+ } . to send_request_matching ( :Query , { ConsistentRead : true } )
2914+
2915+ expect {
2916+ described_class . new ( klass ) . where ( id : '1' , name : 'Alex' ) . all . to_a
2917+ } . not_to send_request_matching ( :Query , { ConsistentRead : true } )
2918+
2919+ end
2920+
2921+ it 'sends ConsistentRead attribute in Scan request' do
2922+ klass = new_class do
2923+ range :name
2924+ end
2925+ klass . create_table
2926+
2927+ chain = described_class . new ( klass )
2928+
2929+ expect {
2930+ described_class . new ( klass ) . where ( name : 'Alex' ) . consistent . all . to_a
2931+ } . to send_request_matching ( :Scan , { ConsistentRead : true } )
2932+ end
2933+ end
28982934end
0 commit comments