spec/kashiwamochi/query_spec.rb in kashiwamochi-0.3.0 vs spec/kashiwamochi/query_spec.rb in kashiwamochi-0.4.0

- old
+ new

@@ -1,18 +1,23 @@ require 'spec_helper' describe Kashiwamochi::Query do describe '#initialize' do - context 'with {:foo => 1, :bar => 2, :to_s => 3, :s => "name asc"]}' do - before { @q = Kashiwamochi::Query.new(:foo => 1, :bar => 2, :to_s => 3, :s => "name asc") } + context "with {:foo => 1, :bar => 2, :to_s => 3, :s => ['name asc', ' ', 'created_at desc']}" do + before { @q = Kashiwamochi::Query.new(:foo => 1, :bar => 2, :to_s => 3, :s => ['name asc', ' ', 'created_at desc']) } subject { @q } describe 'length' do context 'search_params' do subject { @q.search_params } its(:length) { should eq 3 } end + + context 'sort_params' do + subject { @q.sort_params } + its(:length) { should eq 2 } + end end describe 'having' do its(:foo) { should eq 1 } its(:bar) { should eq 2 } @@ -29,43 +34,65 @@ end end end - describe '#sort_query' do - context 'build with {:s => "name asc"}' do - before { @q = Kashiwamochi::Query.new(:s => "name asc") } - subject { @q.sort_query(keys) } + describe '#sorts_query' do + context "build with {:s => ['name asc', ' ', 'created_at desc']}" do + context 'default' do + before { @q = Kashiwamochi::Query.new(:s => ['name asc', ' ', 'created_at desc']) } + subject { @q.sorts_query(keys) } - context 'with empty' do - let(:keys) { [] } - it { should eq 'name asc' } - end + context 'with empty' do + let(:keys) { [] } + it { should eq 'name asc, created_at desc' } + end - context 'with :name' do - let(:keys) { [:name] } - it { should eq 'name asc' } - end + context 'with :name' do + let(:keys) { [:name] } + it { should eq 'name asc' } + end - context 'with :created_at' do - let(:keys) { [:created_at] } - it { should be_nil } - end + context 'with :created_at' do + let(:keys) { [:created_at] } + it { should eq 'created_at desc' } + end - context 'with [:name, :created_at]' do - let(:keys) { [:name, :created_at] } - it { should eq 'name asc' } + context 'with [:name, :created_at]' do + let(:keys) { [:name, :created_at] } + it { should eq 'name asc, created_at desc' } + end + + context 'with [:created_at, :name]' do + let(:keys) { [:created_at, :name] } + it { should eq 'created_at desc, name asc' } + end + + context 'with [:foo, :bar]' do + let(:keys) { [:foo, :bar] } + it { should be_nil } + end end - context 'with [:foo, :bar]' do - let(:keys) { [:foo, :bar] } - it { should be_nil } + context 'unordered' do + before { @q = Kashiwamochi::Query.new(:s => ['name asc', ' ', 'created_at desc']) } + subject { @q.sorts_query(keys, :unordered => true) } + + context 'with [:name, :created_at]' do + let(:keys) { [:name, :created_at] } + it { should eq 'name asc, created_at desc' } + end + + context 'with [:created_at, :name]' do + let(:keys) { [:created_at, :name] } + it { should eq 'name asc, created_at desc' } + end end end end describe '#to_option' do - before { @q = Kashiwamochi::Query.new(:name => 'aira', :s => "created_at desc") } + before { @q = Kashiwamochi::Query.new(:name => 'aira', :s => ["created_at desc"]) } subject { @q.to_option } it { should be_an_instance_of Hash } it { should eq ({:name => 'aira', :s => 'created_at desc'}) } end