require 'spec_helper' module Ransack module Nodes describe Condition do context 'bug report #1245' do it 'preserves tuple behavior' do ransack_hash = { m: 'and', g: [ { title_type_in: ['["title 1", ""]'] } ] } sql = Article.ransack(ransack_hash).result.to_sql expect(sql).to include("IN (('title 1', ''))") end end context 'with an alias' do subject { Condition.extract( Context.for(Person), 'term_start', Person.first(2).map(&:name) ) } specify { expect(subject.combinator).to eq 'or' } specify { expect(subject.predicate.name).to eq 'start' } it 'converts the alias to the correct attributes' do expect(subject.attributes.map(&:name)).to eq(['name', 'email']) end end context 'with multiple values and an _any predicate' do subject { Condition.extract( Context.for(Person), 'name_eq_any', Person.first(2).map(&:name) ) } specify { expect(subject.values.size).to eq(2) } end describe '#negative?' do let(:context) { Context.for(Person) } let(:eq) { Condition.extract(context, 'name_eq', 'A') } let(:not_eq) { Condition.extract(context, 'name_not_eq', 'A') } specify { expect(not_eq.negative?).to be true } specify { expect(eq.negative?).to be false } end context 'with an invalid predicate' do subject { Condition.extract( Context.for(Person), 'name_invalid', Person.first.name ) } context "when ignore_unknown_conditions is false" do before do Ransack.configure { |c| c.ignore_unknown_conditions = false } end specify { expect { subject }.to raise_error ArgumentError } end context "when ignore_unknown_conditions is true" do before do Ransack.configure { |c| c.ignore_unknown_conditions = true } end specify { expect(subject).to be_nil } end end end end end