spec/mongoload/mongoload_spec.rb in mongoload-0.0.2 vs spec/mongoload/mongoload_spec.rb in mongoload-0.0.3

- old
+ new

@@ -9,57 +9,57 @@ User.create!(username: 'Betty').tap { |u| u.create_device(uuid: '222') } end let(:user3) do User.create!(username: 'Cathy').tap { |u| u.create_device(uuid: '333') } end + let(:build_users) { [user1, user2, user3] } + let(:users) { User.all.to_a } + let(:devices) { Device.all.to_a } let(:tag1) { Tag.create!(name: 'tag1') } let(:tag2) { Tag.create!(name: 'tag2') } let(:tag3) { Tag.create!(name: 'tag3') } let(:tag4) { Tag.create!(name: 'tag4') } + let(:tags) { Tag.all.to_a } let(:post1) do Post.create!(title: 'post1', user: user1).tap do |p| p.tags << [tag1, tag2] end end - let(:post2) do Post.create!(title: 'post2', user: user1).tap do |p| p.tags << [tag2, tag3] end end - let(:post3) do Post.create!(title: 'post3', user: user2).tap do |p| p.tags << [tag1, tag3] end end - let(:post4) do Post.create!(title: 'post4', user: user2).tap do |p| p.tags << [tag2, tag4] end end - let(:post5) do Post.create!(title: 'post5', user: user3).tap do |p| p.tags << [tag1, tag4] end end - let(:post6) do Post.create!(title: 'post6', user: user3).tap do |p| p.tags << [tag2, tag4] end end + let(:build_posts) { [post1, post2, post3, post4, post5, post6] } + let(:posts) { Post.all.to_a } describe 'has_one relation' do - before { user1 && user2 && user3 } + before { build_users } it 'should eager load' do - users = User.all.to_a users.each do |user| expect(user.ivar(:device)).to be false end users.first.device @@ -68,14 +68,13 @@ end end end describe 'has_many relation' do - before { post1 && post2 && post3 && post4 && post5 && post6 } + before { build_posts } it 'should eager load' do - users = User.all.to_a users.each do |user| expect(user.posts._loaded?).to be false end users.first.posts.to_a @@ -85,14 +84,13 @@ end end describe 'belongs_to' do context 'inverse of has_one' do - before { user1 && user2 && user3 } + before { build_users } it 'should eager load' do - devices = Device.all.to_a devices.each do |device| expect(device.ivar(:user)).to be false end devices.first.user @@ -101,14 +99,13 @@ end end end context 'inverse of has_many' do - before { post1 && post2 && post3 && post4 && post5 && post6 } + before { build_posts } it 'should eager load' do - posts = Post.all.to_a posts.each do |post| expect(post.ivar(:user)).to be false end posts.first.user @@ -118,20 +115,75 @@ end end end describe 'has_and_belongs_to_many' do - before { post1 && post2 && post3 && post4 && post5 && post6 } + before { build_posts } it 'should eager load' do - posts = Post.all.to_a posts.each do |post| expect(post.tags._loaded?).to be false end posts.first.tags.to_a posts.each do |post| expect(post.tags._loaded?).to be true + end + end + end + + describe 'auto_include' do + before { build_users } + context 'is set to false' do + before do + UserWithoutAutoInclude = User.clone + UserWithoutAutoInclude.has_one :device, auto_include: false + end + it 'should not eager load' do + users = UserWithoutAutoInclude.all.to_a + users.each do |user| + expect(user.ivar(:device)).to be false + end + + users.first.device + users[1..-1].each do |user| + expect(user.ivar(:device)).to be false + end + end + end + end + + describe 'fully_load' do + FULLY_LOAD_METHODS = %w(first last size empty?).freeze + before { build_posts } + + context 'is set to true' do + FULLY_LOAD_METHODS.each do |method| + it "should eager load with ##{method}" do + tags.each do |tag| + expect(tag.posts._loaded?).to be false + end + + tags.first.posts.public_send(method) + tags.each do |tag| + expect(tag.posts._loaded?).to be true + end + end + end + end + + context 'is set to false' do + FULLY_LOAD_METHODS.each do |method| + it "should not eager load with ##{method}" do + posts.each do |post| + expect(post.tags._loaded?).to be false + end + + posts.first.tags.public_send(method) + posts[1..-1].each do |post| + expect(post.tags._loaded?).to be false + end + end end end end end