added mongoid/predicate_spec

This commit is contained in:
Zhomart Mukhamejanov 2014-08-01 21:06:56 -07:00
parent 718a05b331
commit 9e1204e179
4 changed files with 128 additions and 1 deletions

View File

@ -0,0 +1,6 @@
describe 'Ransack' do
it 'can be required without errors' do
output = `bundle exec ruby -e "require 'ransack'" 2>&1`
expect(output).to be_empty
end
end

View File

@ -0,0 +1,11 @@
module RansackHelper
def quote_table_name(table)
# ActiveRecord::Base.connection.quote_table_name(table)
table
end
def quote_column_name(column)
# ActiveRecord::Base.connection.quote_column_name(column)
column
end
end

View File

@ -0,0 +1,110 @@
require 'mongoid_spec_helper'
module Ransack
describe Predicate do
before do
@s = Search.new(Person)
end
shared_examples 'wildcard escaping' do |method, value|
it 'automatically converts integers to strings' do
subject.parent_id_cont = 1
expect { subject.result }.to_not raise_error
end
it "escapes '%', '.' and '\\\\' in value" do
subject.send(:"#{method}=", '%._\\')
expect(subject.result.selector).to eq(value)
end
end
describe 'eq' do
it 'generates an equality condition for boolean true' do
@s.awesome_eq = true
expect(@s.result.selector).to eq({ "awesome" => true })
end
it 'generates an equality condition for boolean false' do
@s.awesome_eq = false
expect(@s.result.selector).to eq({ "awesome" => false })
end
it 'does not generate a condition for nil' do
@s.awesome_eq = nil
expect(@s.result.selector).to eq({ })
end
end
describe 'cont' do
it_has_behavior 'wildcard escaping', :name_cont, { 'name' => /%\._\\/i } do
subject { @s }
end
it 'generates a regex query' do
@s.name_cont = 'ric'
expect(@s.result.selector).to eq({ 'name' => /ric/i })
end
end
describe 'not_cont' do
it_has_behavior 'wildcard escaping', :name_not_cont, { "$not" => { 'name' => /%\._\\/i } } do
subject { @s }
end
it 'generates a regex query' do
@s.name_not_cont = 'ric'
expect(@s.result.selector).to eq({ "$not" => { 'name' => /ric/i } })
end
end
describe 'null' do
it 'generates a value IS NULL query' do
@s.name_null = true
expect(@s.result.selector).to eq({ 'name' => nil })
end
it 'generates a value IS NOT NULL query when assigned false' do
@s.name_null = false
expect(@s.result.selector).to eq( { 'name' => { '$ne' => nil } })
end
end
describe 'not_null' do
it 'generates a value IS NOT NULL query' do
@s.name_not_null = true
expect(@s.result.selector).to eq({ 'name' => { '$ne' => nil } })
end
it 'generates a value IS NULL query when assigned false' do
@s.name_not_null = false
expect(@s.result.selector).to eq({ 'name' => nil })
end
end
describe 'present' do
it %q[generates a value IS NOT NULL AND value != '' query] do
@s.name_present = true
expect(@s.result.selector).to eq({ '$and' => [ { 'name' => { '$ne' => nil } }, { 'name' => { '$ne' => '' } } ] })
end
it %q[generates a value IS NULL OR value = '' query when assigned false] do
@s.name_present = false
expect(@s.result.selector).to eq({ '$or' => [ { 'name' => nil }, { 'name' => '' } ] })
end
end
describe 'blank' do
it %q[generates a value IS NULL OR value = '' query] do
@s.name_blank = true
expect(@s.result.selector).to eq({ '$or' => [ { 'name' => nil}, { 'name' => '' } ] })
end
it %q[generates a value IS NOT NULL AND value != '' query when assigned false] do
@s.name_blank = false
expect(@s.result.selector).to eq({ '$and' => [ { 'name' => { '$ne' => nil}}, { 'name' => { '$ne' => '' }} ] })
end
end
end
end

View File

@ -9,7 +9,7 @@ I18n.enforce_available_locales = false
Time.zone = 'Eastern Time (US & Canada)'
I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'support', '*.yml')]
Dir[File.expand_path('../{helpers,mongoid/support}/*.rb', __FILE__)]
Dir[File.expand_path('../{mongoid/helpers,mongoid/support}/*.rb', __FILE__)]
.each do |f|
require f
end