From 1e23281c289ab5804e97877f730b836177e511c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Wed, 20 Dec 2017 11:32:54 +0100 Subject: [PATCH] Fixed related content tests --- app/models/related_content.rb | 1 - db/schema.rb | 2 +- spec/models/relation_spec.rb | 16 +++++++++--- spec/shared/features/relationable.rb | 39 ++++++++++------------------ 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/app/models/related_content.rb b/app/models/related_content.rb index 0e7698ecb..1fd1b6b0c 100644 --- a/app/models/related_content.rb +++ b/app/models/related_content.rb @@ -20,7 +20,6 @@ class RelatedContent < ActiveRecord::Base after_create :create_opposite_related_content, unless: proc { opposite_related_content.present? } after_create :create_author_score - scope :not_hidden, -> { where('positive_score - negative_score / LEAST(nullif(positive_score + negative_score, 0), 1) >= ?', RELATED_CONTENT_SCORE_THRESHOLD) } scope :not_hidden, -> { where(hidden_at: nil) } def score_positive(user) diff --git a/db/schema.rb b/db/schema.rb index 9f45b8f3a..ab6decc80 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -872,8 +872,8 @@ ActiveRecord::Schema.define(version: 20171220010000) do t.integer "related_content_id" t.datetime "created_at" t.datetime "updated_at" - t.integer "related_content_scores_count", default: 0 t.datetime "hidden_at" + t.integer "related_content_scores_count", default: 0 t.integer "author_id" end diff --git a/spec/models/relation_spec.rb b/spec/models/relation_spec.rb index 5c778bd5c..9363f202d 100644 --- a/spec/models/relation_spec.rb +++ b/spec/models/relation_spec.rb @@ -18,7 +18,7 @@ describe RelatedContent do end it "should not allow repeated related contents" do - related_content = create(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable) + related_content = create(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable, author: build(:user)) new_related_content = build(:related_content, parent_relationable: related_content.parent_relationable, child_relationable: related_content.child_relationable) expect(new_related_content).not_to be_valid end @@ -26,7 +26,7 @@ describe RelatedContent do describe 'create_opposite_related_content' do let(:parent_relationable) { create(:proposal) } let(:child_relationable) { create(:debate) } - let(:related_content) { build(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable) } + let(:related_content) { build(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable, author: build(:user)) } it 'creates an opposite related_content' do expect { related_content.save }.to change { RelatedContent.count }.by(2) @@ -40,8 +40,16 @@ describe RelatedContent do describe '#relationed_contents' do before do - create(:related_content, parent_relationable: parent_relationable, child_relationable: create(:proposal), positive_score: 6, negative_score: 20) - create(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable) + related_content = create(:related_content, parent_relationable: parent_relationable, child_relationable: create(:proposal), author: build(:user)) + create(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable, author: build(:user)) + + 2.times do + related_content.send("score_positive", build(:user)) + end + + 6.times do + related_content.send("score_negative", build(:user)) + end end it 'returns not hidden by reports related contents' do diff --git a/spec/shared/features/relationable.rb b/spec/shared/features/relationable.rb index 9e8bf68fb..e5592fff9 100644 --- a/spec/shared/features/relationable.rb +++ b/spec/shared/features/relationable.rb @@ -6,7 +6,7 @@ shared_examples "relationable" do |relationable_model_name| let(:user) { create(:user) } scenario 'related contents are listed' do - related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1) + related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1, author: build(:user)) visit eval("#{relationable.class.name.downcase}_path(relationable)") within("#related-content-list") do @@ -72,7 +72,7 @@ shared_examples "relationable" do |relationable_model_name| end scenario 'related content can be scored positively', :js do - related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1) + related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1, author: build(:user)) login_as(user) visit eval("#{relationable.class.name.downcase}_path(relationable)") @@ -83,24 +83,13 @@ shared_examples "relationable" do |relationable_model_name| expect(page).to_not have_css("#score-positive-related-#{related_content.opposite_related_content.id}") end - expect( - RelatedContentScores.where( - user: current_user, - related_content: related_content - ).first.value - ).to eq(1) - - expect( - RelatedContentScores.where( - user: current_user, - related_content: related_content.opposite_related_content - ).first.value - ).to eq(1) + expect(related_content.related_content_scores.find_by(user_id: user.id, related_content_id: related_content.id).value).to eq(1) + expect(related_content.opposite_related_content.related_content_scores.find_by(user_id: user.id, related_content_id: related_content.opposite_related_content.id).value).to eq(1) end scenario 'related content can be scored negatively', :js do - related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1) + related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1, author: build(:user)) login_as(user) visit eval("#{relationable.class.name.downcase}_path(relationable)") @@ -111,20 +100,20 @@ shared_examples "relationable" do |relationable_model_name| expect(page).to_not have_css("#score-negative-related-#{related_content.opposite_related_content.id}") end - expect(related_content.reload.negative_score).to eq(1) - expect(related_content.opposite_related_content.reload.negative_score).to eq(1) + expect(related_content.related_content_scores.find_by(user_id: user.id, related_content_id: related_content.id).value).to eq(-1) + expect(related_content.opposite_related_content.related_content_scores.find_by(user_id: user.id, related_content_id: related_content.opposite_related_content.id).value).to eq(-1) end scenario 'if related content has negative score it will be hidden' do - related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1) + related_content = create(:related_content, parent_relationable: relationable, child_relationable: related1, author: build(:user)) - related_content.positive_score = 4 - related_content.negative_score = 20 - related_content.opposite_related_content.positive_score = 4 - related_content.opposite_related_content.negative_score = 20 + 2.times do + related_content.send("score_positive", build(:user)) + end - related_content.save - related_content.opposite_related_content.save + 6.times do + related_content.send("score_negative", build(:user)) + end login_as(user)