Test all the boolean true and false values.
These tests are meant to prevent changing the TRUE_VALUES and FALSE_VALUES sets in RANSACK::CONSTANTS without a very good reason. Previously, no test was alerting us against merging changes like #503.
This commit is contained in:
parent
9ae1b54476
commit
5009eeadb8
|
@ -1,6 +1,9 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
module Ransack
|
module Ransack
|
||||||
|
TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE'].to_set
|
||||||
|
FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE'].to_set
|
||||||
|
|
||||||
describe Predicate do
|
describe Predicate do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -20,18 +23,12 @@ module Ransack
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'eq' do
|
describe 'eq' do
|
||||||
it 'generates an equality condition for boolean true' do
|
it 'generates an equality condition for boolean true values' do
|
||||||
@s.awesome_eq = true
|
test_boolean_equality_for(true)
|
||||||
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
|
|
||||||
expect(@s.result.to_sql).to match /#{field} = #{
|
|
||||||
ActiveRecord::Base.connection.quoted_true}/
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'generates an equality condition for boolean false' do
|
it 'generates an equality condition for boolean false values' do
|
||||||
@s.awesome_eq = false
|
test_boolean_equality_for(false)
|
||||||
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
|
|
||||||
expect(@s.result.to_sql).to match /#{field} = #{
|
|
||||||
ActiveRecord::Base.connection.quoted_false}/
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not generate a condition for nil' do
|
it 'does not generate a condition for nil' do
|
||||||
|
@ -361,5 +358,30 @@ module Ransack
|
||||||
expect(@s.result.to_sql).to match /#{field} IS NOT NULL AND #{field} != ''/
|
expect(@s.result.to_sql).to match /#{field} IS NOT NULL AND #{field} != ''/
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def test_boolean_equality_for(boolean_value)
|
||||||
|
test_values_for(boolean_value).each do |value|
|
||||||
|
s = Search.new(Person, awesome_eq: value)
|
||||||
|
expect(s.result.to_sql).to match expected_boolean_query(boolean_value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_values_for(boolean_value)
|
||||||
|
case boolean_value
|
||||||
|
when true
|
||||||
|
TRUE_VALUES
|
||||||
|
when false
|
||||||
|
FALSE_VALUES
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def expected_boolean_query(boolean_value)
|
||||||
|
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
|
||||||
|
condition = ActiveRecord::Base.connection.send("quoted_#{boolean_value}")
|
||||||
|
/#{field} = #{condition}/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue