Fix mysql tests. Move sort, search & admin fields from ransacker to DB.

This commit is contained in:
Alejandro Babio 2013-11-26 10:15:18 -03:00
parent 2d5de7301c
commit 5c990b9d18
4 changed files with 25 additions and 28 deletions

View File

@ -2,4 +2,7 @@ Person.blueprint do
name
email { "test@example.com" }
salary
end
only_sort
only_search
only_admin
end

View File

@ -78,42 +78,42 @@ module Ransack
it 'allows sort by "only_sort" field' do
s = Person.search("s"=>{"0"=>{"dir"=>"asc", "name"=>"only_sort"}})
s.result.to_sql.should match /ORDER BY "people"."name" \|\| "only_sort" \|\| "people"."name" ASC/
s.result.to_sql.should match /ORDER BY #{quote_table_name("people")}.#{quote_column_name("only_sort")} ASC/
end
it "doesn't sort by 'only_search' field" do
s = Person.search("s"=>{"0"=>{"dir"=>"asc", "name"=>"only_search"}})
s.result.to_sql.should_not match /ORDER BY "people"."name" \|\| "only_search" \|\| "people"."name" ASC/
s.result.to_sql.should_not match /ORDER BY #{quote_table_name("people")}.#{quote_column_name("only_search")} ASC/
end
it 'allows search by "only_search" field' do
s = Person.search(:only_search_eq => 'htimS cirA')
s.result.to_sql.should match /WHERE "people"."name" \|\| "only_search" \|\| "people"."name" = 'htimS cirA'/
s.result.to_sql.should match /WHERE #{quote_table_name("people")}.#{quote_column_name("only_search")} = 'htimS cirA'/
end
it "can't be searched by 'only_sort'" do
s = Person.search(:only_sort_eq => 'htimS cirA')
s.result.to_sql.should_not match /WHERE "people"."name" \|\| "only_sort" \|\| "people"."name" = 'htimS cirA'/
s.result.to_sql.should_not match /WHERE #{quote_table_name("people")}.#{quote_column_name("only_sort")} = 'htimS cirA'/
end
it 'allows sort by "only_admin" field, if auth_object: :admin' do
s = Person.search({"s"=>{"0"=>{"dir"=>"asc", "name"=>"only_admin"}}}, {auth_object: :admin})
s.result.to_sql.should match /ORDER BY "people"."name" \|\| "only_admin" \|\| "people"."name" ASC/
s.result.to_sql.should match /ORDER BY #{quote_table_name("people")}.#{quote_column_name("only_admin")} ASC/
end
it "doesn't sort by 'only_admin' field, if auth_object: nil" do
s = Person.search("s"=>{"0"=>{"dir"=>"asc", "name"=>"only_admin"}})
s.result.to_sql.should_not match /ORDER BY "people"."name" \|\| "only_admin" \|\| "people"."name" ASC/
s.result.to_sql.should_not match /ORDER BY #{quote_table_name("people")}.#{quote_column_name("only_admin")} ASC/
end
it 'allows search by "only_admin" field, if auth_object: :admin' do
s = Person.search({:only_admin_eq => 'htimS cirA'}, {auth_object: :admin})
s.result.to_sql.should match /WHERE "people"."name" \|\| "only_admin" \|\| "people"."name" = 'htimS cirA'/
s.result.to_sql.should match /WHERE #{quote_table_name("people")}.#{quote_column_name("only_admin")} = 'htimS cirA'/
end
it "can't be searched by 'only_admin'" do
it "can't be searched by 'only_admin', if auth_object: nil" do
s = Person.search(:only_admin_eq => 'htimS cirA')
s.result.to_sql.should_not match /WHERE "people"."name" \|\| "only_admin" \|\| "people"."name" = 'htimS cirA'/
s.result.to_sql.should_not match /WHERE #{quote_table_name("people")}.#{quote_column_name("only_admin")} = 'htimS cirA'/
end
end

View File

@ -11,12 +11,15 @@ Dir[File.expand_path('../{helpers,support,blueprints}/*.rb', __FILE__)].each do
end
Sham.define do
name { Faker::Name.name }
title { Faker::Lorem.sentence }
body { Faker::Lorem.paragraph }
salary {|index| 30000 + (index * 1000)}
tag_name { Faker::Lorem.words(3).join(' ') }
note { Faker::Lorem.words(7).join(' ') }
name { Faker::Name.name }
title { Faker::Lorem.sentence }
body { Faker::Lorem.paragraph }
salary {|index| 30000 + (index * 1000)}
tag_name { Faker::Lorem.words(3).join(' ') }
note { Faker::Lorem.words(7).join(' ') }
only_admin { Faker::Lorem.words(3).join(' ') }
only_search { Faker::Lorem.words(3).join(' ') }
only_sort { Faker::Lorem.words(3).join(' ') }
end
RSpec.configure do |config|

View File

@ -46,18 +46,6 @@ class Person < ActiveRecord::Base
Arel::Nodes::InfixOperation.new('||', parent.table[:name], parent.table[:name])
end
ransacker :only_search do |parent|
Arel::Nodes::InfixOperation.new('|| "only_search" ||', parent.table[:name], parent.table[:name])
end
ransacker :only_sort do |parent|
Arel::Nodes::InfixOperation.new('|| "only_sort" ||', parent.table[:name], parent.table[:name])
end
ransacker :only_admin do |parent|
Arel::Nodes::InfixOperation.new('|| "only_admin" ||', parent.table[:name], parent.table[:name])
end
def self.ransackable_attributes(auth_object = nil)
if auth_object == :admin
column_names + _ransackers.keys - ['only_sort']
@ -104,6 +92,9 @@ module Schema
t.integer :parent_id
t.string :name
t.string :email
t.string :only_search
t.string :only_sort
t.string :only_admin
t.integer :salary
t.boolean :awesome, :default => false
t.timestamps