features/batch/step_definitions.rb (52 lines of code) (raw):
# frozen_string_literal: true
And(/^a (Parent|Child) model with TableConfig of:$/) do |model, code_block|
case model
when 'Parent'
ParentTableModel = @parent # rubocop:disable Naming/ConstantName
when 'Child'
ChildTableModel = @model # rubocop:disable Naming/ConstantName
else
raise 'Model must be either a Parent or Child'
end
@table_config = eval(code_block)
end
When(/^we make a batch write call with following Parent and Child model items:$/) do |string|
item_data = JSON.parse(string, symbolize_names: true)
Aws::Record::Batch.write do |db|
item_data.each do |item|
case item[:model]
when 'Parent'
db.put(@parent.new(remove_model_key(item)))
when 'Child'
db.put(@model.new(remove_model_key(item)))
else
raise 'Model must be either a Parent or Child'
end
end
end
end
And(/^we make a batch read call for the following Parent and Child model item keys:$/) do |string|
key_batch = JSON.parse(string, symbolize_names: true)
@batch_read_result = Aws::Record::Batch.read do |db|
key_batch.each do |item_key|
case item_key[:model]
when 'Parent'
db.find(@parent, remove_model_key(item_key))
when 'Child'
db.find(@model, remove_model_key(item_key))
else
raise 'Model must be either a Parent or Child'
end
end
end
end
Then(/^we expect the batch read result to include the following items:$/) do |string|
expected = JSON.parse(string, symbolize_names: true)
actual = @batch_read_result.items.map(&:to_h)
expect(expected.count).to eq(actual.count)
expect(expected.all? { |e| actual.include?(e) }).to be_truthy
end
private
def remove_model_key(item)
item.delete(:model)
item
end