diff --git a/app/models/debate.rb b/app/models/debate.rb index ae9feaaa6..3488b0519 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -48,13 +48,8 @@ class Debate < ActiveRecord::Base attr_accessor :link_required def self.recommendations(user) - debates_list = where("author_id != ?", user.id) - debates_list_with_tagged = debates_list.joins(:tags).where('taggings.taggable_type = ?', self.name).where('tags.name IN (?)', user.interests) - if debates_list_with_tagged.any? - debates_list = debates_list_with_tagged.group('debates.id') - end - - debates_list + tagged_with(user.interests, any: true). + where("author_id != ?", user.id) end def searchable_values diff --git a/app/models/user.rb b/app/models/user.rb index fec7f9a6d..21b526963 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -86,7 +86,7 @@ class User < ActiveRecord::Base end def debate_votes(debates) - voted = votes.for_debates(debates) + voted = votes.for_debates(Array(debates).map(&:id)) voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value } end diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index ee8c7cb93..f5cde8d7d 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -356,9 +356,9 @@ feature 'Debates' do background do Setting['feature.user.recommendations'] = true - create(:debate, title: 'Best', cached_votes_total: 10) - create(:debate, title: 'Medium', cached_votes_total: 5) - create(:debate, title: 'Worst', cached_votes_total: 1) + create(:debate, title: 'Best', cached_votes_total: 10, tag_list: "Sport") + create(:debate, title: 'Medium', cached_votes_total: 5, tag_list: "Sport") + create(:debate, title: 'Worst', cached_votes_total: 1, tag_list: "Sport") end after do @@ -372,7 +372,9 @@ feature 'Debates' do end scenario 'Debates are ordered by recommendations when there is a user logged', :js do + proposal = create(:proposal, tag_list: "Sport" ) user = create(:user) + create(:follow, followable: proposal, user: user) login_as(user) visit debates_path diff --git a/spec/features/home_spec.rb b/spec/features/home_spec.rb index d1ce77418..8b9cf3e4e 100644 --- a/spec/features/home_spec.rb +++ b/spec/features/home_spec.rb @@ -23,13 +23,18 @@ feature "Home" do feature "For signed in users" do before do - login_as(create(:user)) + # user = create(:user) + # login_as(user) end feature "Recommended" do background do Setting['feature.user.recommendations'] = true + user = create(:user) + proposal = create(:proposal, tag_list: "Sport" ) + create(:follow, followable: proposal, user: user) + login_as(user) end after do @@ -37,19 +42,19 @@ feature "Home" do end scenario 'Display recommended section' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") visit root_path expect(page).to have_content "Recommendations that may interest you" end scenario 'Display recommended section when feature flag recommended is active' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") visit root_path expect(page).to have_content "Recommendations that may interest you" end scenario 'Not display recommended section when feature flag recommended is not active' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") Setting['feature.user.recommendations'] = false visit root_path @@ -58,7 +63,7 @@ feature "Home" do end scenario 'Display debates' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") visit root_path @@ -67,13 +72,13 @@ feature "Home" do end scenario 'Display all recommended debates link' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") visit root_path expect(page).to have_link("All recommended debates", href: debates_path(order: "recommendations")) end scenario 'Display proposal' do - proposal = create(:proposal) + proposal = create(:proposal, tag_list: "Sport") visit root_path @@ -82,13 +87,13 @@ feature "Home" do end scenario 'Display all recommended proposals link' do - debate = create(:proposal) + debate = create(:proposal, tag_list: "Sport") visit root_path expect(page).to have_link("All recommended proposals", href: proposals_path(order: "recommendations")) end scenario 'Display orbit carrousel' do - debate = create_list(:debate, 3) + create_list(:debate, 3, tag_list: "Sport") visit root_path @@ -98,7 +103,7 @@ feature "Home" do end scenario 'Display recommended show when click on carousel' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") visit root_path click_on debate.title @@ -114,14 +119,14 @@ feature "Home" do feature 'Carousel size' do scenario 'Display debates centered when there are no proposals' do - debate = create(:debate) + debate = create(:debate, tag_list: "Sport") visit root_path expect(page).to have_selector('.medium-centered.large-centered') end scenario 'Correct display debates and proposals' do - proposal = create(:proposal) - debates = create(:debate) + proposal = create(:proposal, tag_list: "Sport") + debates = create(:debate, tag_list: "Sport") visit root_path diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index f32a19cad..d6618a5fa 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -718,16 +718,18 @@ describe Debate do let(:user) { create(:user) } - it "Should return up to 4 debates" do - create_list(:debate, 4) + it "Should not return any debates when user has not interests" do + create(:debate) - expect(Debate.recommendations(user).size).to eq 4 + expect(Debate.recommendations(user).size).to eq 0 end it "Should return debates ordered by cached_votes_total" do - debate1 = create(:debate, cached_votes_total: 1 ) - debate2 = create(:debate, cached_votes_total: 5 ) - debate3 = create(:debate, cached_votes_total: 10 ) + debate1 = create(:debate, cached_votes_total: 1, tag_list: "Sport" ) + debate2 = create(:debate, cached_votes_total: 5, tag_list: "Sport" ) + debate3 = create(:debate, cached_votes_total: 10, tag_list: "Sport" ) + proposal = create(:proposal, tag_list: "Sport" ) + create(:follow, followable: proposal, user: user) result = Debate.recommendations(user).sort_by_recommendations @@ -749,8 +751,10 @@ describe Debate do end it "Should not return debates when user is the author" do - debate1 = create(:debate, author: user) - debate2 = create(:debate) + debate1 = create(:debate, author: user, tag_list: "Sport") + debate2 = create(:debate, tag_list: "Sport") + proposal = create(:proposal, tag_list: "Sport" ) + create(:follow, followable: proposal, user: user) result = Debate.recommendations(user) diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index 5587dbb87..72d2b6489 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -884,16 +884,18 @@ describe Proposal do let(:user) { create(:user) } - it "Should return up to 4 proposals" do - create_list(:proposal, 4) + it "Should not return any proposals when user has not interests" do + create(:proposal) - expect(Proposal.recommendations(user).size).to eq 4 + expect(Proposal.recommendations(user).size).to eq 0 end it "Should return proposals ordered by cached_votes_up" do - proposal1 = create(:proposal, cached_votes_up: 1 ) - proposal2 = create(:proposal, cached_votes_up: 5 ) - proposal3 = create(:proposal, cached_votes_up: 10 ) + proposal1 = create(:proposal, cached_votes_up: 1, tag_list: "Sport" ) + proposal2 = create(:proposal, cached_votes_up: 5, tag_list: "Sport" ) + proposal3 = create(:proposal, cached_votes_up: 10, tag_list: "Sport" ) + proposal4 = create(:proposal, tag_list: "Sport" ) + create(:follow, followable: proposal4, user: user) result = Proposal.recommendations(user).sort_by_recommendations @@ -924,8 +926,10 @@ describe Proposal do end it "Should not return proposals when user is the author" do - proposal1 = create(:proposal, author: user) - proposal2 = create(:proposal) + proposal1 = create(:proposal, author: user, tag_list: "Sport") + proposal2 = create(:proposal, tag_list: "Sport") + proposal3 = create(:proposal, tag_list: "Sport") + create(:follow, followable: proposal3, user: user) result = Proposal.recommendations(user) diff --git a/spec/views/welcome/index.html.erb_spec.rb b/spec/views/welcome/index.html.erb_spec.rb index 575448449..d8738f42b 100644 --- a/spec/views/welcome/index.html.erb_spec.rb +++ b/spec/views/welcome/index.html.erb_spec.rb @@ -11,7 +11,9 @@ RSpec.describe "welcome/index" do image_field: nil, image_version: nil, image_default: "https://dummyimage.com/600x400/000/fff", - carousel_size: "medium-6 large-6 medium-centered large-centered"} + carousel_size: "medium-6 large-6 medium-centered large-centered", + btn_text_link: t("welcome.recommended.debates.btn_text_link"), + btn_path_link: debates_path(order: "recommendations")} within 'li[data-slide="0"] .card' do expect(page).to have_selector("img") @@ -28,7 +30,9 @@ RSpec.describe "welcome/index" do image_field: nil, image_version: nil, image_default: nil, - carousel_size: "medium-6 large-6 medium-centered large-centered"} + carousel_size: "medium-6 large-6 medium-centered large-centered", + btn_text_link: t("welcome.recommended.debates.btn_text_link"), + btn_path_link: debates_path(order: "recommendations")} within 'li[data-slide="0"] .card' do expect(page).not_to have_selector("img")