require 'spec_helper' require_relative '../../../../lib/locomotive/steam/adapters/memory/dataset.rb' require_relative '../../../../lib/locomotive/steam/adapters/memory/condition.rb' require_relative '../../../../lib/locomotive/steam/adapters/memory/order.rb' require_relative '../../../../lib/locomotive/steam/adapters/memory/query.rb' describe Locomotive::Steam::Adapters::Memory::Query do let(:entry_1) { OpenStruct.new(name: 'foo', id: 1, attributes: { name: 'foo', id: 1 }) } let(:entry_2) { OpenStruct.new(name: 'bar', id: 2, attributes: { name: 'bar', id: 2 }) } let(:entry_3) { OpenStruct.new(name: 'zone', id: 3, attributes: { name: 'zone', id: 3 }) } let(:records) { { 1 => entry_1, 2 => entry_2, 3 => entry_3 } } let(:dataset) { Locomotive::Steam::Adapters::Memory::Dataset.new(:test) } let(:locale) { :en } let(:query) { Locomotive::Steam::Adapters::Memory::Query } before { allow(dataset).to receive(:records).and_return(records) } describe '#only' do specify do expect( query.new(dataset, locale) do only(:name) end.all.map(&:name) ).to eq(['foo', 'bar', 'zone']) end end describe '#limited' do specify do expect( query.new(dataset, locale) do limit(1) end.all ).to eq([entry_1]) end end describe '#offset' do specify do expect( query.new(dataset, locale) do offset(1) end.all.map(&:name) ).to eq(['bar', 'zone']) end end describe '#order_by' do context 'asc' do specify do expect( query.new(dataset, locale) do order_by('name asc') end.all.map(&:name) ).to eq(['bar', 'foo', 'zone']) end end context 'desc' do specify do expect( query.new(dataset, locale) do order_by('name desc') end.all.map(&:name) ).to eq(['zone', 'foo', 'bar']) end end end describe '#where' do specify do expect( query.new(dataset, locale) do where('name.eq' => 'foo'). where('id.lt' => 2) end.all.map(&:name) ).to eq(['foo']) end end end