mirror of
https://github.com/activerecord-hackery/ransack.git
synced 2022-11-09 13:47:45 -05:00
97 lines
3.5 KiB
Ruby
97 lines
3.5 KiB
Ruby
require 'spec_helper'
|
|
|
|
module Polyamorous
|
|
describe JoinDependency do
|
|
|
|
context 'with symbol joins' do
|
|
subject { new_join_dependency Person, articles: :comments }
|
|
|
|
specify { expect(subject.send(:join_root).drop(1).size)
|
|
.to eq(2) }
|
|
specify { expect(subject.send(:join_root).drop(1).map(&:join_type).uniq)
|
|
.to eq [Polyamorous::InnerJoin] }
|
|
end
|
|
|
|
context 'with has_many :through association' do
|
|
subject { new_join_dependency Person, :authored_article_comments }
|
|
|
|
specify { expect(subject.send(:join_root).drop(1).size)
|
|
.to eq 1 }
|
|
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
|
.to eq 'comments' }
|
|
end
|
|
|
|
context 'with outer join' do
|
|
subject { new_join_dependency Person, new_join(:articles, :outer) }
|
|
|
|
specify { expect(subject.send(:join_root).drop(1).size)
|
|
.to eq 1 }
|
|
specify { expect(subject.send(:join_root).drop(1).first.join_type)
|
|
.to eq Polyamorous::OuterJoin }
|
|
end
|
|
|
|
context 'with nested outer joins' do
|
|
subject { new_join_dependency Person,
|
|
new_join(:articles, :outer) => new_join(:comments, :outer) }
|
|
|
|
specify { expect(subject.send(:join_root).drop(1).size)
|
|
.to eq 2 }
|
|
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
|
.to eq [Polyamorous::OuterJoin, Polyamorous::OuterJoin] }
|
|
specify { expect(subject.send(:join_root).drop(1).map(&:join_type).uniq)
|
|
.to eq [Polyamorous::OuterJoin] }
|
|
end
|
|
|
|
context 'with polymorphic belongs_to join' do
|
|
subject { new_join_dependency Note, new_join(:notable, :inner, Person) }
|
|
|
|
specify { expect(subject.send(:join_root).drop(1).size)
|
|
.to eq 1 }
|
|
specify { expect(subject.send(:join_root).drop(1).first.join_type)
|
|
.to eq Polyamorous::InnerJoin }
|
|
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
|
.to eq 'people' }
|
|
end
|
|
|
|
context 'with polymorphic belongs_to join and nested symbol join' do
|
|
subject { new_join_dependency Note,
|
|
new_join(:notable, :inner, Person) => :comments }
|
|
|
|
specify { expect(subject.send(:join_root).drop(1).size)
|
|
.to eq 2 }
|
|
specify { expect(subject.send(:join_root).drop(1).map(&:join_type).uniq)
|
|
.to eq [Polyamorous::InnerJoin] }
|
|
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
|
.to eq 'people' }
|
|
specify { expect(subject.send(:join_root).drop(1)[1].table_name)
|
|
.to eq 'comments' }
|
|
end
|
|
|
|
context 'with polymorphic belongs_to join and nested join' do
|
|
subject { new_join_dependency Note,
|
|
new_join(:notable, :outer, Person) => :comments }
|
|
specify { expect(subject.send(:join_root).drop(1).size).to eq 2 }
|
|
specify { expect(subject.send(:join_root).drop(1).map(&:join_type)).to eq [Polyamorous::OuterJoin, Polyamorous::InnerJoin] }
|
|
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
|
.to eq 'people' }
|
|
specify { expect(subject.send(:join_root).drop(1)[1].table_name)
|
|
.to eq 'comments' }
|
|
end
|
|
|
|
context '#left_outer_join in Rails 5 overrides join type specified',
|
|
if: ActiveRecord::VERSION::MAJOR >= 5 && ActiveRecord::VERSION::MAJOR < 6 && ActiveRecord::VERSION::MINOR < 2 do
|
|
|
|
let(:join_type_class) do
|
|
new_join_dependency(
|
|
Person,
|
|
new_join(:articles)
|
|
).join_constraints(
|
|
[],
|
|
Arel::Nodes::OuterJoin
|
|
).first.joins.map(&:class)
|
|
end
|
|
|
|
specify { expect(join_type_class).to eq [Arel::Nodes::OuterJoin] }
|
|
end
|
|
end
|
|
end
|