Skip to content

Commit

Permalink
Add more tests for eager_load on many_to_many relations
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurnn committed Oct 17, 2013
1 parent d1a755d commit d4b11b0
Showing 1 changed file with 71 additions and 17 deletions.
88 changes: 71 additions & 17 deletions spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb
Expand Up @@ -2,29 +2,29 @@

describe Mongoid::Relations::Eager::HasAndBelongsToMany do

let!(:person) do
Person.create!(houses: [house])
end
describe ".grouped_docs" do

let!(:house) do
House.create!
end
let(:docs) do
Person.all.to_a
end

let(:houses_metadata) do
Person.reflect_on_association(:houses)
end
let!(:person) do
Person.create!(houses: [house])
end

let(:docs) do
Person.all.to_a
end
let!(:house) do
House.create!
end

let(:eager) do
described_class.new(Person, [houses_metadata], docs).tap do |b|
b.shift_relation
let(:metadata) do
Person.reflect_on_association(:houses)
end
end

describe ".grouped_docs" do
let(:eager) do
described_class.new(Person, [metadata], docs).tap do |b|
b.shift_relation
end
end

it "aggregates by the parent primary key" do
expect(eager.grouped_docs.keys).to eq([person.id])
Expand All @@ -33,6 +33,28 @@

describe ".set_on_parent" do

let(:docs) do
Person.all.to_a
end

let!(:person) do
Person.create!(houses: [house])
end

let!(:house) do
House.create!
end

let(:metadata) do
Person.reflect_on_association(:houses)
end

let(:eager) do
described_class.new(Person, [metadata], docs).tap do |b|
b.shift_relation
end
end

it "sets the relation into the parent" do
docs.each do |doc|
expect(doc).to receive(:set_relation).with(:houses, :foo)
Expand All @@ -43,6 +65,10 @@

describe ".includes" do

let(:person) do
Person.create!
end

before do
Person.create!(houses: 3.times.map { House.create! })
end
Expand All @@ -59,5 +85,33 @@
end
end
end

context "when the relation is not polymorphic" do

let!(:preference) do
person.preferences.create(name: "testing")
end

let!(:eager) do
Person.includes(:preferences).last
end

it "puts the documents in the parent document" do
expect(eager.ivar(:preferences)).to eq([ preference ])
end

it "does not query when touching the association" do
expect_query(0) do
expect(eager.preferences).to eq([ preference ])
end
end

it "does not query when updating the association" do
expect_query(0) do
eager.preferences.first.name = "new pref"
expect(eager.preferences.first.name).to eq("new pref")
end
end
end
end
end

0 comments on commit d4b11b0

Please sign in to comment.