From e3db003bbcd8ca2fb36139f0051cb4d36d7fe3c0 Mon Sep 17 00:00:00 2001 From: Yoong Kang Lim Date: Tue, 10 Feb 2015 20:18:26 +1100 Subject: [PATCH] Added tests for the concern and member model --- spec/factories/like.rb | 7 +++++++ spec/models/member_spec.rb | 8 ++++++++ spec/models/post_spec.rb | 2 ++ spec/support/is_likeable.rb | 27 +++++++++++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 spec/factories/like.rb create mode 100644 spec/support/is_likeable.rb diff --git a/spec/factories/like.rb b/spec/factories/like.rb new file mode 100644 index 000000000..564d26883 --- /dev/null +++ b/spec/factories/like.rb @@ -0,0 +1,7 @@ +FactoryGirl.define do + factory :like do + member + association :likeable, :factory => "post" + end + +end diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index 9b0481298..01e5ae4f8 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -71,6 +71,14 @@ describe 'member' do @member.forums.length.should == 2 end + it "has many likes" do + @post1 = FactoryGirl.create(:post, :author => @member) + @post2 = FactoryGirl.create(:post, :author => @member) + @like1 = FactoryGirl.create(:like, :member => @member, :likeable => @post1) + @like2 = FactoryGirl.create(:like, :member => @member, :likeable => @post2) + expect(@member.likes.length).to eq 2 + end + it 'has location and lat/long fields' do @member.update_attributes(:location => 'Greenwich, UK') @member.location.should eq 'Greenwich, UK' diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index adce855d2..41afb09a0 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -5,6 +5,8 @@ describe Post do @member = FactoryGirl.create(:member) end + it_behaves_like "it is likeable" + it "should be sorted in reverse order" do FactoryGirl.create(:post, :subject => 'first entry', diff --git a/spec/support/is_likeable.rb b/spec/support/is_likeable.rb new file mode 100644 index 000000000..81403fe38 --- /dev/null +++ b/spec/support/is_likeable.rb @@ -0,0 +1,27 @@ +shared_examples "it is likeable" do + + before(:each) do + # Possibly a horrible hack. + # Will fail if factory name does not match the model name.. + @likeable = FactoryGirl.create(described_class.to_s.underscore.to_sym) + @member1 = FactoryGirl.create(:member) + @member2 = FactoryGirl.create(:member) + @like1 = FactoryGirl.create(:like, :member => @member1, :likeable => @likeable) + @like2 = FactoryGirl.create(:like, :member => @member2, :likeable => @likeable) + end + + it "has many likes" do + expect(@likeable.likes.length).to eq 2 + end + + it 'has many members that likes it' do + expect(@likeable.members.length).to eq 2 + end + + it 'should destroy the like when it is destroyed' do + like_count = @likeable.likes.count + expect { + @likeable.destroy + }.to change(Like, :count).by -like_count + end +end