80 lines
2.2 KiB
Ruby
80 lines
2.2 KiB
Ruby
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
|